(camel) 01/04: CAMEL-20642 - Camel-AWS-Bedrock: Support Anthropic Haiku model
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
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); +