This is an automated email from the ASF dual-hosted git repository.

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

commit 1a199589778ec260f04ccb90cba0e3c35d06038f
Author: Andrea Cosentino <[email protected]>
AuthorDate: Tue Mar 5 09:59:02 2024 +0100

    CAMEL-20515 - Camel-AWS-Bedrock: Support AI21 Jurassic2 Ultra model
    
    Signed-off-by: Andrea Cosentino <[email protected]>
---
 .../camel/catalog/components/aws-bedrock.json      |  4 +--
 .../apache/camel/catalog/main/sensitive-keys.json  |  1 -
 components/camel-aws/camel-aws-bedrock/pom.xml     |  5 +++
 .../aws2/bedrock/BedrockEndpointUriFactory.java    |  3 +-
 .../camel/component/aws2/bedrock/aws-bedrock.json  |  4 +--
 .../aws2/bedrock/BedrockConfiguration.java         |  3 +-
 .../component/aws2/bedrock/BedrockModels.java      |  4 +--
 .../component/aws2/bedrock/BedrockProducer.java    | 28 +++++++++++++++--
 .../bedrock/integration/BedrockProducerIT.java     | 36 ++++++++++++++++++++++
 .../java/org/apache/camel/util/SensitiveUtils.java |  4 +--
 .../dsl/BedrockEndpointBuilderFactory.java         |  1 +
 11 files changed, 78 insertions(+), 15 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws-bedrock.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws-bedrock.json
index be5a902c16b..5546e5ebe6f 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws-bedrock.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws-bedrock.json
@@ -25,7 +25,7 @@
   "componentProperties": {
     "configuration": { "index": 0, "kind": "property", "displayName": 
"Configuration", "group": "producer", "label": "", "required": false, "type": 
"object", "javaType": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", "deprecated": 
false, "autowired": false, "secret": false, "description": "Component 
configuration" },
     "lazyStartProducer": { "index": 1, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fail [...]
-    "modelId": { "index": 2, "kind": "property", "displayName": "Model Id", 
"group": "producer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Define the model Id we 
are going to use" },
+    "modelId": { "index": 2, "kind": "property", "displayName": "Model Id", 
"group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Define the model Id we 
are going to use" },
     "operation": { "index": 3, "kind": "property", "displayName": "Operation", 
"group": "producer", "label": "", "required": true, "type": "object", 
"javaType": "org.apache.camel.component.aws2.bedrock.BedrockOperations", 
"enum": [ "invokeTextModel", "invokeImageModel", "invokeEmbeddingsModel" ], 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "conf [...]
     "overrideEndpoint": { "index": 4, "kind": "property", "displayName": 
"Override Endpoint", "group": "producer", "label": "", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Set the need for 
overriding the endpoint. This option needs to be used in combina [...]
     "pojoRequest": { "index": 5, "kind": "property", "displayName": "Pojo 
Request", "group": "producer", "label": "", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "If we want to use a POJO 
request as body or not" },
@@ -54,7 +54,7 @@
   },
   "properties": {
     "label": { "index": 0, "kind": "path", "displayName": "Label", "group": 
"producer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Logical name" },
-    "modelId": { "index": 1, "kind": "parameter", "displayName": "Model Id", 
"group": "producer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Define the model Id we 
are going to use" },
+    "modelId": { "index": 1, "kind": "parameter", "displayName": "Model Id", 
"group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Define the model Id we 
are going to use" },
     "operation": { "index": 2, "kind": "parameter", "displayName": 
"Operation", "group": "producer", "label": "", "required": true, "type": 
"object", "javaType": 
"org.apache.camel.component.aws2.bedrock.BedrockOperations", "enum": [ 
"invokeTextModel", "invokeImageModel", "invokeEmbeddingsModel" ], "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "con [...]
     "overrideEndpoint": { "index": 3, "kind": "parameter", "displayName": 
"Override Endpoint", "group": "producer", "label": "", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Set the need for 
overriding the endpoint. This option needs to be used in combin [...]
     "pojoRequest": { "index": 4, "kind": "parameter", "displayName": "Pojo 
Request", "group": "producer", "label": "", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "If we want to use a POJO 
request as body or not" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/sensitive-keys.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/sensitive-keys.json
index a779d45a871..14a695c9ab6 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/sensitive-keys.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/sensitive-keys.json
@@ -27,7 +27,6 @@
   "httpproxypassword",
   "keystore",
   "login",
-  "modelid",
   "oauthclientid",
   "oauthclientsecret",
   "oauthtoken",
diff --git a/components/camel-aws/camel-aws-bedrock/pom.xml 
b/components/camel-aws/camel-aws-bedrock/pom.xml
index 40ba03486a3..ea325d0e204 100644
--- a/components/camel-aws/camel-aws-bedrock/pom.xml
+++ b/components/camel-aws/camel-aws-bedrock/pom.xml
@@ -66,6 +66,11 @@
             <artifactId>camel-test-spring-junit5</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jq</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-base64</artifactId>
diff --git 
a/components/camel-aws/camel-aws-bedrock/src/generated/java/org/apache/camel/component/aws2/bedrock/BedrockEndpointUriFactory.java
 
b/components/camel-aws/camel-aws-bedrock/src/generated/java/org/apache/camel/component/aws2/bedrock/BedrockEndpointUriFactory.java
index e9f56142145..0109b235132 100644
--- 
a/components/camel-aws/camel-aws-bedrock/src/generated/java/org/apache/camel/component/aws2/bedrock/BedrockEndpointUriFactory.java
+++ 
b/components/camel-aws/camel-aws-bedrock/src/generated/java/org/apache/camel/component/aws2/bedrock/BedrockEndpointUriFactory.java
@@ -43,9 +43,8 @@ public class BedrockEndpointUriFactory extends 
org.apache.camel.support.componen
         props.add("useProfileCredentialsProvider");
         props.add("useSessionCredentials");
         PROPERTY_NAMES = Collections.unmodifiableSet(props);
-        Set<String> secretProps = new HashSet<>(4);
+        Set<String> secretProps = new HashSet<>(3);
         secretProps.add("accessKey");
-        secretProps.add("modelId");
         secretProps.add("secretKey");
         secretProps.add("sessionToken");
         SECRET_PROPERTY_NAMES = Collections.unmodifiableSet(secretProps);
diff --git 
a/components/camel-aws/camel-aws-bedrock/src/generated/resources/META-INF/org/apache/camel/component/aws2/bedrock/aws-bedrock.json
 
b/components/camel-aws/camel-aws-bedrock/src/generated/resources/META-INF/org/apache/camel/component/aws2/bedrock/aws-bedrock.json
index be5a902c16b..5546e5ebe6f 100644
--- 
a/components/camel-aws/camel-aws-bedrock/src/generated/resources/META-INF/org/apache/camel/component/aws2/bedrock/aws-bedrock.json
+++ 
b/components/camel-aws/camel-aws-bedrock/src/generated/resources/META-INF/org/apache/camel/component/aws2/bedrock/aws-bedrock.json
@@ -25,7 +25,7 @@
   "componentProperties": {
     "configuration": { "index": 0, "kind": "property", "displayName": 
"Configuration", "group": "producer", "label": "", "required": false, "type": 
"object", "javaType": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", "deprecated": 
false, "autowired": false, "secret": false, "description": "Component 
configuration" },
     "lazyStartProducer": { "index": 1, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fail [...]
-    "modelId": { "index": 2, "kind": "property", "displayName": "Model Id", 
"group": "producer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Define the model Id we 
are going to use" },
+    "modelId": { "index": 2, "kind": "property", "displayName": "Model Id", 
"group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Define the model Id we 
are going to use" },
     "operation": { "index": 3, "kind": "property", "displayName": "Operation", 
"group": "producer", "label": "", "required": true, "type": "object", 
"javaType": "org.apache.camel.component.aws2.bedrock.BedrockOperations", 
"enum": [ "invokeTextModel", "invokeImageModel", "invokeEmbeddingsModel" ], 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "conf [...]
     "overrideEndpoint": { "index": 4, "kind": "property", "displayName": 
"Override Endpoint", "group": "producer", "label": "", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Set the need for 
overriding the endpoint. This option needs to be used in combina [...]
     "pojoRequest": { "index": 5, "kind": "property", "displayName": "Pojo 
Request", "group": "producer", "label": "", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "If we want to use a POJO 
request as body or not" },
@@ -54,7 +54,7 @@
   },
   "properties": {
     "label": { "index": 0, "kind": "path", "displayName": "Label", "group": 
"producer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Logical name" },
-    "modelId": { "index": 1, "kind": "parameter", "displayName": "Model Id", 
"group": "producer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Define the model Id we 
are going to use" },
+    "modelId": { "index": 1, "kind": "parameter", "displayName": "Model Id", 
"group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Define the model Id we 
are going to use" },
     "operation": { "index": 2, "kind": "parameter", "displayName": 
"Operation", "group": "producer", "label": "", "required": true, "type": 
"object", "javaType": 
"org.apache.camel.component.aws2.bedrock.BedrockOperations", "enum": [ 
"invokeTextModel", "invokeImageModel", "invokeEmbeddingsModel" ], "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "con [...]
     "overrideEndpoint": { "index": 3, "kind": "parameter", "displayName": 
"Override Endpoint", "group": "producer", "label": "", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "Set the need for 
overriding the endpoint. This option needs to be used in combin [...]
     "pojoRequest": { "index": 4, "kind": "parameter", "displayName": "Pojo 
Request", "group": "producer", "label": "", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws2.bedrock.BedrockConfiguration", 
"configurationField": "configuration", "description": "If we want to use a POJO 
request as body or not" },
diff --git 
a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockConfiguration.java
 
b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockConfiguration.java
index a2ba9ab6999..b9d5d9c7fbd 100644
--- 
a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockConfiguration.java
+++ 
b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockConfiguration.java
@@ -39,7 +39,8 @@ public class BedrockConfiguration implements Cloneable {
     private String secretKey;
     @UriParam(label = "security", secret = true)
     private String sessionToken;
-    @UriParam(secret = true)
+    @UriParam
+    @Metadata(required = true)
     private String modelId;
     @UriParam
     @Metadata(required = true)
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 e4c27372a9f..5d322aa340d 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
@@ -21,8 +21,8 @@ public enum BedrockModels {
     TITAN_TEXT_EXPRESS_V1("amazon.titan-text-express-v1"),
     TITAN_TEXT_LITE_V1("amazon.titan-text-lite-v1"),
     TITAN_IMAGE_GENERATOR_V1("amazon.titan-image-generator-v1"),
-
-    TITAN_EMBEDDINGS_G1("amazon.titan-embed-text-v1");
+    TITAN_EMBEDDINGS_G1("amazon.titan-embed-text-v1"),
+    JURASSIC2_ULTRA("ai21.j2-ultra-v1"),;
 
     public final String model;
 
diff --git 
a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockProducer.java
 
b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockProducer.java
index bcf73b0c804..421e75bf882 100644
--- 
a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockProducer.java
+++ 
b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/BedrockProducer.java
@@ -101,7 +101,7 @@ public class BedrockProducer extends DefaultProducer {
                     throw ase;
                 }
                 Message message = getMessageForResponse(exchange);
-                message.setBody(result);
+                setResponseText(result, message);
             }
         } else {
             InvokeModelRequest.Builder builder = InvokeModelRequest.builder();
@@ -129,7 +129,7 @@ public class BedrockProducer extends DefaultProducer {
                 throw ase;
             }
             Message message = getMessageForResponse(exchange);
-            message.setBody(result.body().asUtf8String());
+            setResponseText(result, message);
         }
     }
 
@@ -232,6 +232,30 @@ public class BedrockProducer extends DefaultProducer {
         message.setBody(jsonString.get("images"));
     }
 
+    protected void setResponseText(InvokeModelResponse result, Message 
message) {
+        switch (getConfiguration().getModelId()) {
+            case "amazon.titan-text-express-v1", "amazon.titan-text-lite-v1" 
-> setTitanText(result, message);
+            case "ai21.j2-ultra-v1" -> {
+                try {
+                    setAi21Text(result, message);
+                } catch (JsonProcessingException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+            default -> throw new IllegalStateException("Unexpected value: " + 
getConfiguration().getModelId());
+        }
+    }
+
+    private void setTitanText(InvokeModelResponse result, Message message) {
+        message.setBody(result.body().asUtf8String());
+    }
+
+    private void setAi21Text(InvokeModelResponse result, Message message) 
throws JsonProcessingException {
+        ObjectMapper mapper = new ObjectMapper();
+        JsonNode jsonString = mapper.readTree(result.body().asUtf8String());
+        message.setBody(jsonString.get("completions"));
+    }
+
     public static Message getMessageForResponse(final Exchange exchange) {
         return exchange.getMessage();
     }
diff --git 
a/components/camel-aws/camel-aws-bedrock/src/test/java/org/apache/camel/component/aws2/bedrock/integration/BedrockProducerIT.java
 
b/components/camel-aws/camel-aws-bedrock/src/test/java/org/apache/camel/component/aws2/bedrock/integration/BedrockProducerIT.java
index 8c192b239b8..12debf2fcaa 100644
--- 
a/components/camel-aws/camel-aws-bedrock/src/test/java/org/apache/camel/component/aws2/bedrock/integration/BedrockProducerIT.java
+++ 
b/components/camel-aws/camel-aws-bedrock/src/test/java/org/apache/camel/component/aws2/bedrock/integration/BedrockProducerIT.java
@@ -152,6 +152,35 @@ class BedrockProducerIT extends CamelTestSupport {
         MockEndpoint.assertIsSatisfied(context);
     }
 
+    @Test
+    public void testInvokeJurassic2UltraModel() throws InterruptedException {
+
+        result.expectedMessageCount(1);
+        final Exchange result = template.send("direct:send_jurassic2_model", 
exchange -> {
+            ObjectMapper mapper = new ObjectMapper();
+            ObjectNode rootNode = mapper.createObjectNode();
+            rootNode.putIfAbsent("prompt",
+                    new TextNode(
+                            "\"Apple Inc. (NASDAQ:AAPL) Q3 2023 Earnings 
Conference Call August 3, 2023 5:00 PM ET Operator\\\\nGood day, and welcome to 
the Apple Q3 Fiscal Year 2023 Earnings Conference Call. Today's call is being 
recorded. At this time, for opening remarks and introductions, I would like to 
turn the call over to Saori Casey, Vice President of Finance. Please go 
ahead.\\\\nSaori Casey\\\\nThank you. Good afternoon, and thank you for joining 
us. Speaking first today is Ap [...]
+
+            rootNode.putIfAbsent("maxTokens", new IntNode(500));
+            rootNode.putIfAbsent("temperature", new IntNode(0));
+            rootNode.putIfAbsent("topP", new IntNode(1));
+
+            ObjectNode childNode = mapper.createObjectNode();
+            childNode.putIfAbsent("scale", new IntNode(0));
+
+            rootNode.putIfAbsent("presencePenalty", childNode);
+            rootNode.putIfAbsent("frequencyPenalty", childNode);
+
+            
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);
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
@@ -179,6 +208,13 @@ class BedrockProducerIT extends CamelTestSupport {
                         
.to("aws-bedrock:label?accessKey=RAW({{aws.manual.access.key}})&secretKey=RAW({{aws.manual.secret.key}}&region=us-east-1&operation=invokeEmbeddingsModel&modelId="
                             + BedrockModels.TITAN_EMBEDDINGS_G1.model)
                         .to(result);
+
+                from("direct:send_jurassic2_model")
+                        
.to("aws-bedrock:label?accessKey=RAW({{aws.manual.access.key}})&secretKey=RAW({{aws.manual.secret.key}}&region=us-east-1&operation=invokeTextModel&modelId="
+                            + BedrockModels.JURASSIC2_ULTRA.model)
+                        .split(body())
+                        .transform().jq(".data.text")
+                        .to(result);
             }
         };
     }
diff --git 
a/core/camel-util/src/main/java/org/apache/camel/util/SensitiveUtils.java 
b/core/camel-util/src/main/java/org/apache/camel/util/SensitiveUtils.java
index 8f84080f94b..9f0de97dac8 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/SensitiveUtils.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/SensitiveUtils.java
@@ -56,7 +56,6 @@ public final class SensitiveUtils {
                     "httpproxypassword",
                     "keystore",
                     "login",
-                    "modelid",
                     "oauthclientid",
                     "oauthclientsecret",
                     "oauthtoken",
@@ -136,7 +135,6 @@ public final class SensitiveUtils {
                                                     + 
"|\\Qhttpproxypassword\\E"
                                                     + "|\\Qkeystore\\E"
                                                     + "|\\Qlogin\\E"
-                                                    + "|\\Qmodelid\\E"
                                                     + "|\\Qoauthclientid\\E"
                                                     + 
"|\\Qoauthclientsecret\\E"
                                                     + "|\\Qoauthtoken\\E"
@@ -182,7 +180,7 @@ public final class SensitiveUtils {
                                                     + "|\\Qverificationcode\\E"
                                                     + 
"|\\Qwebhookverifytoken\\E"
                                                     + 
"|\\Qzookeeperpassword\\E"
-    // SENSITIVE-PATTERN: END
+                                                    // SENSITIVE-PATTERN: END
     ;
 
     private SensitiveUtils() {
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/BedrockEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/BedrockEndpointBuilderFactory.java
index 4001933f327..e70a15227a3 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/BedrockEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/BedrockEndpointBuilderFactory.java
@@ -46,6 +46,7 @@ public interface BedrockEndpointBuilderFactory {
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
+         * Required: true
          * Group: producer
          * 
          * @param modelId the value to set

Reply via email to