From 419f014deafaa4f79a1ac64aea222c268529537d Mon Sep 17 00:00:00 2001 From: zhuermu Date: Tue, 18 Feb 2025 02:36:59 +0000 Subject: [PATCH] feat: add converse nova api multimodel by java --- .../Nova/java/nova-converse/demo/README.md | 17 +++++ .../demo/dependency-reduced-pom.xml | 35 ++++++++++ .../Nova/java/nova-converse/demo/pom.xml | 55 +++++++++++++++ .../demo/src/main/java/com/example/Main.java | 69 +++++++++++++++++++ 4 files changed, 176 insertions(+) create mode 100644 multi-modal/Nova/java/nova-converse/demo/README.md create mode 100644 multi-modal/Nova/java/nova-converse/demo/dependency-reduced-pom.xml create mode 100644 multi-modal/Nova/java/nova-converse/demo/pom.xml create mode 100644 multi-modal/Nova/java/nova-converse/demo/src/main/java/com/example/Main.java diff --git a/multi-modal/Nova/java/nova-converse/demo/README.md b/multi-modal/Nova/java/nova-converse/demo/README.md new file mode 100644 index 00000000..207e82b6 --- /dev/null +++ b/multi-modal/Nova/java/nova-converse/demo/README.md @@ -0,0 +1,17 @@ +# Converse Sample + +## environment +* java 17 +* maven +aws aws_secret_access_key, aws_access_key_id and region in ~/.aws/credentials or environment variables + +## complie +* install maven and java +```bash +mvn clean package +``` + +## run` +```bash +java -jar target/demo-1.0-SNAPSHOT.jar +``` \ No newline at end of file diff --git a/multi-modal/Nova/java/nova-converse/demo/dependency-reduced-pom.xml b/multi-modal/Nova/java/nova-converse/demo/dependency-reduced-pom.xml new file mode 100644 index 00000000..3fb59beb --- /dev/null +++ b/multi-modal/Nova/java/nova-converse/demo/dependency-reduced-pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + com.example + demo + 1.0-SNAPSHOT + + + + maven-shade-plugin + 3.5.0 + + + package + + shade + + + + + com.example.Main + + + + + + + + + + 17 + 17 + 2.30.21 + + diff --git a/multi-modal/Nova/java/nova-converse/demo/pom.xml b/multi-modal/Nova/java/nova-converse/demo/pom.xml new file mode 100644 index 00000000..b6be7c81 --- /dev/null +++ b/multi-modal/Nova/java/nova-converse/demo/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + com.example + demo + 1.0-SNAPSHOT + + + 17 + 17 + 2.30.21 + + + + + + software.amazon.awssdk + s3 + ${aws.sdk.version} + + + software.amazon.awssdk + bedrockruntime + ${aws.sdk.version} + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.5.0 + + + package + + shade + + + + + com.example.Main + + + + + + + + + diff --git a/multi-modal/Nova/java/nova-converse/demo/src/main/java/com/example/Main.java b/multi-modal/Nova/java/nova-converse/demo/src/main/java/com/example/Main.java new file mode 100644 index 00000000..8eb1145e --- /dev/null +++ b/multi-modal/Nova/java/nova-converse/demo/src/main/java/com/example/Main.java @@ -0,0 +1,69 @@ +package com.example; + +import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; +import software.amazon.awssdk.core.exception.SdkClientException; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeClient; +import software.amazon.awssdk.services.bedrockruntime.model.*; + +import java.util.Arrays; + +public class Main { + + public static String converse(String s3Uri) throws Exception { + var client = BedrockRuntimeClient.builder() + .credentialsProvider(DefaultCredentialsProvider.create()) + .region(Region.US_EAST_1) + .build(); + + var modelId = "amazon.nova-lite-v1:0"; + + // Create video content block + var videoContent = ContentBlock.builder() + .video(video -> video + .format("mp4") + .source(source -> source + .s3Location(s3 -> s3 + .uri(s3Uri) + ))) + .build(); + + // Create text content block + var prompt = "What is the main idea of the video?"; + var textContent = ContentBlock.fromText(prompt); + + // Create message with both video and text content + var message = Message.builder() + .content(Arrays.asList(videoContent, textContent)) + .role(ConversationRole.USER) + .build(); + + try { + ConverseResponse response = client.converse(request -> request + .modelId(modelId) + .messages(message) + .inferenceConfig(config -> config + .maxTokens(4096) + .temperature(0.5F) + .topP(0.9F))); + + var responseText = response.output().message().content().get(0).text(); + System.out.println(responseText); + return responseText; + + } catch (SdkClientException e) { + System.err.printf("ERROR: Can't invoke '%s'. Reason: %s", modelId, e.getMessage()); + throw new RuntimeException(e); + } + } + + public static void main(String[] args) { + String s3Uri = "s3://bedrock-video-generation-us-east-1-pi8hu9/video-class/cb4198e065f64149b7ccdf7f9b78f1b9.mp4"; + //String bucketOwner = "767828766472"; + try { + converse(s3Uri); + } catch (Exception e) { + e.printStackTrace(); + } + } +}