(camel) 01/04: CAMEL-20642 - Camel-AWS-Bedrock: Support Anthropic Haiku model

2024-04-03 Thread acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 8ecf93604d73accfe8b04384ce44fe1be3206701
Author: Andrea Cosentino 
AuthorDate: Wed Apr 3 13:23:32 2024 +0200

CAMEL-20642 - Camel-AWS-Bedrock: Support Anthropic Haiku model

Signed-off-by: Andrea Cosentino 
---
 .../component/aws2/bedrock/BedrockModels.java  |  3 +-
 .../aws2/bedrock/runtime/BedrockProducer.java  |  2 +-
 .../runtime/integration/BedrockProducerIT.java | 44 ++
 3 files changed, 47 insertions(+), 2 deletions(-)

diff --git 
a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockModels.java
 
b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockModels.java
index d8d9bf561a9..ecbf2966a9d 100644
--- 
a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockModels.java
+++ 
b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockModels.java
@@ -27,7 +27,8 @@ public enum BedrockModels {
 ANTROPHIC_CLAUDE_INSTANT_V1("anthropic.claude-instant-v1"),
 ANTROPHIC_CLAUDE_V2("anthropic.claude-v2"),
 ANTROPHIC_CLAUDE_V2_1("anthropic.claude-v2:1"),
-ANTROPHIC_CLAUDE_V3("anthropic.claude-3-sonnet-20240229-v1:0");
+ANTROPHIC_CLAUDE_V3("anthropic.claude-3-sonnet-20240229-v1:0"),
+ANTROPHIC_CLAUDE_HAIKU_V3("anthropic.claude-3-haiku-20240307-v1:0");
 
 public final String model;
 
diff --git 
a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockProducer.java
 
b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockProducer.java
index e553972684f..98f48abbcd1 100644
--- 
a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockProducer.java
+++ 
b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockProducer.java
@@ -249,7 +249,7 @@ public class BedrockProducer extends DefaultProducer {
 throw new RuntimeException(e);
 }
 }
-case "anthropic.claude-3-sonnet-20240229-v1:0" -> {
+case "anthropic.claude-3-sonnet-20240229-v1:0", 
"anthropic.claude-3-haiku-20240307-v1:0" -> {
 try {
 setAnthropicV3Text(result, message);
 } catch (JsonProcessingException e) {
diff --git 
a/components/camel-aws/camel-aws-bedrock/src/test/java/org/apache/camel/component/aws2/bedrock/runtime/integration/BedrockProducerIT.java
 
b/components/camel-aws/camel-aws-bedrock/src/test/java/org/apache/camel/component/aws2/bedrock/runtime/integration/BedrockProducerIT.java
index b0a9bb36346..85600c4d4a2 100644
--- 
a/components/camel-aws/camel-aws-bedrock/src/test/java/org/apache/camel/component/aws2/bedrock/runtime/integration/BedrockProducerIT.java
+++ 
b/components/camel-aws/camel-aws-bedrock/src/test/java/org/apache/camel/component/aws2/bedrock/runtime/integration/BedrockProducerIT.java
@@ -336,6 +336,44 @@ class BedrockProducerIT extends CamelTestSupport {
 MockEndpoint.assertIsSatisfied(context);
 }
 
+@Test
+public void testInvokeAnthropicV3HaikuModel() throws InterruptedException {
+
+result.expectedMessageCount(1);
+final Exchange result = 
template.send("direct:send_anthropic_v3_haiku_model", exchange -> {
+ObjectMapper mapper = new ObjectMapper();
+ObjectNode rootNode = mapper.createObjectNode();
+
+ArrayNode messages = mapper.createArrayNode();
+
+ObjectNode element = mapper.createObjectNode();
+element.putIfAbsent("role", new TextNode("user"));
+
+ArrayNode content = mapper.createArrayNode();
+
+ObjectNode textContent = mapper.createObjectNode();
+
+textContent.putIfAbsent("type", new TextNode("text"));
+textContent.putIfAbsent("text", new TextNode("Can you tell the 
history of Mayflower?"));
+
+content.add(textContent);
+
+element.putIfAbsent("content", content);
+
+messages.add(element);
+
+rootNode.putIfAbsent("messages", messages);
+rootNode.putIfAbsent("max_tokens", new IntNode(1000));
+rootNode.putIfAbsent("anthropic_version", new 
TextNode("bedrock-2023-05-31"));
+
+
exchange.getMessage().setBody(mapper.writer().writeValueAsString(rootNode));
+
exchange.getMessage().setHeader(BedrockConstants.MODEL_CONTENT_TYPE, 
"application/json");
+
exchange.getMessage().setHeader(BedrockConstants.MODEL_ACCEPT_CONTENT_TYPE, 
"application/json");
+});
+
+MockEndpoint.assertIsSatisfied(context);
+}
+
 @Over

(camel) 01/04: CAMEL-20642 - Camel-AWS-Bedrock: Support Anthropic Haiku model

2024-04-03 Thread acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch haiku-claude-support
in repository https://gitbox.apache.org/repos/asf/camel.git

commit db759ec1e602e12a5da86e0e7826de24d33e9361
Author: Andrea Cosentino 
AuthorDate: Wed Apr 3 13:23:32 2024 +0200

CAMEL-20642 - Camel-AWS-Bedrock: Support Anthropic Haiku model

Signed-off-by: Andrea Cosentino 
---
 .../component/aws2/bedrock/BedrockModels.java  |  3 +-
 .../aws2/bedrock/runtime/BedrockProducer.java  |  2 +-
 .../runtime/integration/BedrockProducerIT.java | 44 ++
 3 files changed, 47 insertions(+), 2 deletions(-)

diff --git 
a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockModels.java
 
b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockModels.java
index d8d9bf561a9..ecbf2966a9d 100644
--- 
a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockModels.java
+++ 
b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockModels.java
@@ -27,7 +27,8 @@ public enum BedrockModels {
 ANTROPHIC_CLAUDE_INSTANT_V1("anthropic.claude-instant-v1"),
 ANTROPHIC_CLAUDE_V2("anthropic.claude-v2"),
 ANTROPHIC_CLAUDE_V2_1("anthropic.claude-v2:1"),
-ANTROPHIC_CLAUDE_V3("anthropic.claude-3-sonnet-20240229-v1:0");
+ANTROPHIC_CLAUDE_V3("anthropic.claude-3-sonnet-20240229-v1:0"),
+ANTROPHIC_CLAUDE_HAIKU_V3("anthropic.claude-3-haiku-20240307-v1:0");
 
 public final String model;
 
diff --git 
a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockProducer.java
 
b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockProducer.java
index e553972684f..98f48abbcd1 100644
--- 
a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockProducer.java
+++ 
b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockProducer.java
@@ -249,7 +249,7 @@ public class BedrockProducer extends DefaultProducer {
 throw new RuntimeException(e);
 }
 }
-case "anthropic.claude-3-sonnet-20240229-v1:0" -> {
+case "anthropic.claude-3-sonnet-20240229-v1:0", 
"anthropic.claude-3-haiku-20240307-v1:0" -> {
 try {
 setAnthropicV3Text(result, message);
 } catch (JsonProcessingException e) {
diff --git 
a/components/camel-aws/camel-aws-bedrock/src/test/java/org/apache/camel/component/aws2/bedrock/runtime/integration/BedrockProducerIT.java
 
b/components/camel-aws/camel-aws-bedrock/src/test/java/org/apache/camel/component/aws2/bedrock/runtime/integration/BedrockProducerIT.java
index b0a9bb36346..85600c4d4a2 100644
--- 
a/components/camel-aws/camel-aws-bedrock/src/test/java/org/apache/camel/component/aws2/bedrock/runtime/integration/BedrockProducerIT.java
+++ 
b/components/camel-aws/camel-aws-bedrock/src/test/java/org/apache/camel/component/aws2/bedrock/runtime/integration/BedrockProducerIT.java
@@ -336,6 +336,44 @@ class BedrockProducerIT extends CamelTestSupport {
 MockEndpoint.assertIsSatisfied(context);
 }
 
+@Test
+public void testInvokeAnthropicV3HaikuModel() throws InterruptedException {
+
+result.expectedMessageCount(1);
+final Exchange result = 
template.send("direct:send_anthropic_v3_haiku_model", exchange -> {
+ObjectMapper mapper = new ObjectMapper();
+ObjectNode rootNode = mapper.createObjectNode();
+
+ArrayNode messages = mapper.createArrayNode();
+
+ObjectNode element = mapper.createObjectNode();
+element.putIfAbsent("role", new TextNode("user"));
+
+ArrayNode content = mapper.createArrayNode();
+
+ObjectNode textContent = mapper.createObjectNode();
+
+textContent.putIfAbsent("type", new TextNode("text"));
+textContent.putIfAbsent("text", new TextNode("Can you tell the 
history of Mayflower?"));
+
+content.add(textContent);
+
+element.putIfAbsent("content", content);
+
+messages.add(element);
+
+rootNode.putIfAbsent("messages", messages);
+rootNode.putIfAbsent("max_tokens", new IntNode(1000));
+rootNode.putIfAbsent("anthropic_version", new 
TextNode("bedrock-2023-05-31"));
+
+
exchange.getMessage().setBody(mapper.writer().writeValueAsString(rootNode));
+
exchange.getMessage().setHeader(BedrockConstants.MODEL_CONTENT_TYPE, 
"application/json");
+
exchange.getMessage().setHeader(BedrockConstants.MODEL_ACCEPT_CONTENT_TYPE, 
"application/json");
+});
+
+MockEndpoint.assertIsSatisfied(context);
+