Skip to content

Commit

Permalink
Update InvokeModelWithResponseStream.java
Browse files Browse the repository at this point in the history
Added sample code to invoke Claude 3 Sonnet Model. Extract text from image data.
  • Loading branch information
vsrinivasprasad1 authored Mar 21, 2024
1 parent c682a07 commit 621b12b
Showing 1 changed file with 81 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,87 @@
*/
public class InvokeModelWithResponseStream {

/**
// snippet-start:[bedrock-runtime.java2.invoke_model_with_response_stream.main]
* Invokes the Anthropic Claude 3 Sonnet model and processes the response stream.
*
* @param encodeImage
* @param silent
* @return
*/
public static String invokeClaude3Sonnet(String encodeImage, boolean silent) {
BedrockRuntimeAsyncClient client = BedrockRuntimeAsyncClient.builder()
.region(Region.US_EAST_1)
.credentialsProvider(ProfileCredentialsProvider.create())
.build();
var finalCompletion = new AtomicReference<>("");
JSONArray messagesArray = new JSONArray();
JSONObject item = new JSONObject();
item.put("role", "user");
JSONArray contentArray = new JSONArray();
JSONObject source = new JSONObject();
source.put("type", "base64");
source.put("media_type", "image/jpeg");
source.put("data", encodeImage);
JSONObject src = new JSONObject();
src.put("source", source);
src.put("type", "image");
contentArray.put(src);
JSONObject second = new JSONObject();
second.put("type", "text");
second.put("text", "What's in this image?");
contentArray.put(second);
item.put("content", contentArray);
messagesArray.put(item);
var payload = new JSONObject()
.put("anthropic_version", "bedrock-2023-05-31")
.put("max_tokens", 2048)
.put("temperature", 0)
.put("messages", messagesArray).toString();
var request = InvokeModelWithResponseStreamRequest.builder()
.body(SdkBytes.fromUtf8String(payload))
.modelId("anthropic.claude-3-sonnet-20240229-v1:0")
.contentType("application/json")
.accept("application/json")
.build();
var visitor = InvokeModelWithResponseStreamResponseHandler.Visitor.builder()
.onChunk(chunk -> {
var json = new JSONObject(chunk.bytes().asUtf8String());
Iterator<String> iterator = json.keys();
String key = null;
while (iterator.hasNext()) {
key = iterator.next();
if (key.equals("delta")) {
var inner = new JSONObject(json.getJSONObject("delta").toString());
Iterator<String> iterator1 = inner.keys();
String key1 = "";
while (iterator1.hasNext()) {
key1 = iterator1.next();
if (key1.equals("text")) {
var completion = inner.get("text");
finalCompletion.set(finalCompletion.get() + completion);
if (!silent) {
System.out.print(completion);
}
}
}
}

}

})
.build();

var handler = InvokeModelWithResponseStreamResponseHandler.builder()
.onEventStream(stream -> stream.subscribe(event -> event.accept(visitor)))
.onComplete(() -> {
})
.onError(e -> System.out.println("\n\nError: " + e.getMessage()))
.build();
client.invokeModelWithResponseStream(request, handler).join();
return finalCompletion.get();
}

// snippet-start:[bedrock-runtime.java2.invoke_model_with_response_stream.main]
/**
* Invokes the Anthropic Claude 2 model and processes the response stream.
Expand Down

0 comments on commit 621b12b

Please sign in to comment.