This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch docs-bedrock-image in repository https://gitbox.apache.org/repos/asf/camel.git
commit e3719520630b685b7fc4ee24342c88d28454eaf1 Author: Andrea Cosentino <anco...@gmail.com> AuthorDate: Wed Feb 28 14:35:00 2024 +0100 Camel-AWS-Bedrock: Docs and example for Titan Image Generator and Titax Text Lite Signed-off-by: Andrea Cosentino <anco...@gmail.com> --- .../src/main/docs/aws-bedrock-component.adoc | 168 ++++++++++++++++++++- 1 file changed, 165 insertions(+), 3 deletions(-) diff --git a/components/camel-aws/camel-aws-bedrock/src/main/docs/aws-bedrock-component.adoc b/components/camel-aws/camel-aws-bedrock/src/main/docs/aws-bedrock-component.adoc index 7e7e2e50f54..a436bdb88ef 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/docs/aws-bedrock-component.adoc +++ b/components/camel-aws/camel-aws-bedrock/src/main/docs/aws-bedrock-component.adoc @@ -133,20 +133,140 @@ Json schema for request } -------------------------------------------------------------------------------- +- Titan Text Lite V1 with id `amazon.titan-text-lite-v1` +Lite is a light weight efficient model, ideal for fine-tuning of English-language tasks. + +Json schema for request + +[source,json] +-------------------------------------------------------------------------------- +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "inputText": { + "type": "string" + }, + "textGenerationConfig": { + "type": "object", + "properties": { + "maxTokenCount": { + "type": "integer" + }, + "stopSequences": { + "type": "array", + "items": [ + { + "type": "string" + } + ] + }, + "temperature": { + "type": "integer" + }, + "topP": { + "type": "integer" + } + }, + "required": [ + "maxTokenCount", + "stopSequences", + "temperature", + "topP" + ] + } + }, + "required": [ + "inputText", + "textGenerationConfig" + ] +} +-------------------------------------------------------------------------------- + +- Titan Image Generator G1 with id `amazon.titan-image-generator-v1` +It generates images from text, and allows users to upload and edit an existing image. Users can edit an image with a text prompt (without a mask) or parts of an image with an image mask. You can extend the boundaries of an image with outpainting, and fill in an image with inpainting. + +Json schema for request + +[source,json] +-------------------------------------------------------------------------------- +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "textToImageParams": { + "type": "object", + "properties": { + "text": { + "type": "string" + }, + "negativeText": { + "type": "string" + } + }, + "required": [ + "text", + "negativeText" + ] + }, + "taskType": { + "type": "string" + }, + "imageGenerationConfig": { + "type": "object", + "properties": { + "cfgScale": { + "type": "integer" + }, + "seed": { + "type": "integer" + }, + "quality": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "numberOfImages": { + "type": "integer" + } + }, + "required": [ + "cfgScale", + "seed", + "quality", + "width", + "height", + "numberOfImages" + ] + } + }, + "required": [ + "textToImageParams", + "taskType", + "imageGenerationConfig" + ] +} +-------------------------------------------------------------------------------- + === Bedrock Producer operations Camel-AWS Bedrock component provides the following operation on the producer side: -- invokeModel +- invokeTextModel +- invokeImageModel == Producer Examples -- invokeModel: this operation will invoke a model from Bedrock +- invokeTextModel: this operation will invoke a model from Bedrock. This is an example for both Titan Express and Titan Lite. [source,java] -------------------------------------------------------------------------------- from("direct:invoke") - .to("aws-bedrock://test?bedrockRuntimeClient=#amazonBedrockRuntimeClient&operation=invokeModel&modelId=" + .to("aws-bedrock://test?bedrockRuntimeClient=#amazonBedrockRuntimeClient&operation=invokeTextModel&modelId=" + BedrockModels.TITAN_TEXT_EXPRESS_V1.model)) -------------------------------------------------------------------------------- @@ -176,6 +296,48 @@ and you can the send to the direct endpoint something like where template is a ProducerTemplate. +- invokeImageModel: this operation will invoke a model from Bedrock. This is an example for both Titan Express and Titan Lite. + +[source,java] +-------------------------------------------------------------------------------- +from("direct:invoke") + .to("aws-bedrock://test?bedrockRuntimeClient=#amazonBedrockRuntimeClient&operation=invokeImageModel&modelId=" + + BedrockModels.TITAN_IMAGE_GENERATOR_V1.model)) + .split(body()) + .unmarshal().base64() + .setHeader("CamelFileName", simple("image-${random(128)}.png")).to("file:target/generated_images") +-------------------------------------------------------------------------------- + +and you can the send to the direct endpoint something like + +[source,java] +-------------------------------------------------------------------------------- + final Exchange result = template.send("direct:send_titan_image", exchange -> { + ObjectMapper mapper = new ObjectMapper(); + ObjectNode rootNode = mapper.createObjectNode(); + ObjectNode textParameter = mapper.createObjectNode(); + textParameter.putIfAbsent("text", + new TextNode("A Sci-fi camel running in the desert")); + rootNode.putIfAbsent("textToImageParams", textParameter); + rootNode.putIfAbsent("taskType", new TextNode("TEXT_IMAGE")); + ObjectNode childNode = mapper.createObjectNode(); + childNode.putIfAbsent("numberOfImages", new IntNode(3)); + childNode.putIfAbsent("quality", new TextNode("standard")); + childNode.putIfAbsent("cfgScale", new IntNode(8)); + childNode.putIfAbsent("height", new IntNode(512)); + childNode.putIfAbsent("width", new IntNode(512)); + childNode.putIfAbsent("seed", new IntNode(0)); + + rootNode.putIfAbsent("imageGenerationConfig", 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"); + }); +-------------------------------------------------------------------------------- + +where template is a ProducerTemplate. + == Dependencies Maven users will need to add the following dependency to their pom.xml.