You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2025/08/02 18:07:57 UTC

(camel) branch main updated: CAMEL-22311 Add transforms to camel-weaviate and add a weaviate test to camel-langchain4j-embeddings (#18803)

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

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


The following commit(s) were added to refs/heads/main by this push:
     new ebd2e63c2e1 CAMEL-22311 Add transforms to camel-weaviate and add a weaviate test to camel-langchain4j-embeddings (#18803)
ebd2e63c2e1 is described below

commit ebd2e63c2e1b49d1322f3f548731462aa13af668
Author: Tom Cunningham <tc...@redhat.com>
AuthorDate: Sat Aug 2 14:07:51 2025 -0400

    CAMEL-22311 Add transforms to camel-weaviate and add a weaviate test to camel-langchain4j-embeddings (#18803)
---
 .../apache/camel/catalog/components/weaviate.json  |   4 +-
 .../apache/camel/catalog/transformers.properties   |   1 +
 .../catalog/transformers/weaviate-embeddings.json  |  14 ++
 .../camel-ai/camel-langchain4j-embeddings/pom.xml  |  12 ++
 ...Chain4jEmbeddingsComponentWeaviateTargetIT.java | 196 +++++++++++++++++++++
 .../apache/camel/component/weaviate/weaviate.json  |   4 +-
 .../org/apache/camel/transformer.properties        |   7 +
 .../apache/camel/transformer/weaviate-embeddings   |   2 +
 .../camel/transformer/weaviate-embeddings.json     |  14 ++
 .../camel/component/weaviate/WeaviateVectorDb.java |   7 +
 .../WeaviateEmbeddingsDataTypeTransformer.java     | 100 +++++++++++
 .../WeaviateVectorDbEndpointBuilderFactory.java    |  24 +++
 12 files changed, 383 insertions(+), 2 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/weaviate.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/weaviate.json
index eb63514b7b8..ab0a50c7ca2 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/weaviate.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/weaviate.json
@@ -48,7 +48,9 @@
     "CamelWeaviateProperties": { "index": 10, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "HashMap", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Weaviate Object properties", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#PROPERTIES" },
     "CamelWeaviateIndexId": { "index": 11, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Index Id", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#INDEX_ID" },
     "CamelWeaviateQueryTopK": { "index": 12, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Query Top K", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#QUERY_TOP_K" },
-    "CamelWeaviateUpdateWithMerge": { "index": 13, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "true", "description": "Merges properties into the object", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#UPDATE_WITH_MERGE" }
+    "CamelWeaviateUpdateWithMerge": { "index": 13, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "true", "description": "Merges properties into the object", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#UPDATE_WITH_MERGE" },
+    "CamelWeaviateKeyName": { "index": 14, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Key Name for Insert\/Upsert operation", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#KEY_NAME" },
+    "CamelWeaviateKeyValue": { "index": 15, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Key Value for Insert\/Upsert operation", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#KEY_VALUE" }
   },
   "properties": {
     "collection": { "index": 0, "kind": "path", "displayName": "Collection", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The collection Name" },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers.properties
index a0de4954cf1..d9a9a5e978b 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers.properties
@@ -40,3 +40,4 @@ qdrant-embeddings
 qdrant-rag
 slack-application-cloudevents
 text-plain
+weaviate-embeddings
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/weaviate-embeddings.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/weaviate-embeddings.json
new file mode 100644
index 00000000000..6f0bef95cdc
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/weaviate-embeddings.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "weaviate:embeddings",
+    "title": "Weaviate (Embeddings)",
+    "description": "Prepares the message to become an object writable by Weaviate component",
+    "deprecated": false,
+    "javaType": "org.apache.camel.component.weaviate.transform.WeaviateEmbeddingsDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-weaviate",
+    "version": "4.14.0-SNAPSHOT"
+  }
+}
+
diff --git a/components/camel-ai/camel-langchain4j-embeddings/pom.xml b/components/camel-ai/camel-langchain4j-embeddings/pom.xml
index 7cf5a98627f..7d22fb6d91a 100644
--- a/components/camel-ai/camel-langchain4j-embeddings/pom.xml
+++ b/components/camel-ai/camel-langchain4j-embeddings/pom.xml
@@ -94,6 +94,11 @@
             <artifactId>camel-neo4j</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-weaviate</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-test-junit5</artifactId>
@@ -152,6 +157,13 @@
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-infra-weaviate</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
 
     </dependencies>
 </project>
diff --git a/components/camel-ai/camel-langchain4j-embeddings/src/test/java/org/apache/camel/component/langchain4j/embeddings/LangChain4jEmbeddingsComponentWeaviateTargetIT.java b/components/camel-ai/camel-langchain4j-embeddings/src/test/java/org/apache/camel/component/langchain4j/embeddings/LangChain4jEmbeddingsComponentWeaviateTargetIT.java
new file mode 100644
index 00000000000..d89cd9253ac
--- /dev/null
+++ b/components/camel-ai/camel-langchain4j-embeddings/src/test/java/org/apache/camel/component/langchain4j/embeddings/LangChain4jEmbeddingsComponentWeaviateTargetIT.java
@@ -0,0 +1,196 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.langchain4j.embeddings;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import dev.langchain4j.model.embedding.onnx.allminilml6v2.AllMiniLmL6V2EmbeddingModel;
+import io.weaviate.client.base.Result;
+import io.weaviate.client.v1.data.model.WeaviateObject;
+import io.weaviate.client.v1.schema.model.WeaviateClass;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.qdrant.QdrantAction;
+import org.apache.camel.component.weaviate.WeaviateVectorDb;
+import org.apache.camel.component.weaviate.WeaviateVectorDbAction;
+import org.apache.camel.component.weaviate.WeaviateVectorDbComponent;
+import org.apache.camel.spi.DataType;
+import org.apache.camel.test.infra.weaviate.services.WeaviateService;
+import org.apache.camel.test.infra.weaviate.services.WeaviateServiceFactory;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.TestMethodOrder;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
+public class LangChain4jEmbeddingsComponentWeaviateTargetIT extends CamelTestSupport {
+    public static final long POINT_ID = 8;
+    public static final String WEAVIATE_URI = "weaviate:embeddings";
+    private static String CREATEID = null;
+
+    @RegisterExtension
+    static WeaviateService WEAVIATE = WeaviateServiceFactory.createSingletonService();
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+
+        var qc = context.getComponent(WeaviateVectorDb.SCHEME, WeaviateVectorDbComponent.class);
+        qc.getConfiguration().setScheme("http");
+        qc.getConfiguration().setHost(WEAVIATE.getWeaviateEndpointUrl());
+        context.getRegistry().bind("embedding-model", new AllMiniLmL6V2EmbeddingModel());
+
+        return context;
+    }
+
+    @Test
+    @Order(1)
+    public void createCollection() {
+        Exchange result = fluentTemplate.to(WEAVIATE_URI)
+                .withHeader(WeaviateVectorDb.Headers.ACTION, QdrantAction.CREATE_COLLECTION)
+                .withBody(
+                        WeaviateClass.builder().className("embeddings").build())
+                .request(Exchange.class);
+
+        assertThat(result).isNotNull();
+        assertThat(result.getException()).isNull();
+    }
+
+    @Test
+    @Order(3)
+    public void create() {
+        HashMap<String, String> map = new HashMap<String, String>();
+        map.put("sky", "blue");
+        map.put("age", "34");
+
+        Exchange result = fluentTemplate.to("direct:in")
+                .withHeader(WeaviateVectorDb.Headers.ACTION, WeaviateVectorDbAction.CREATE)
+                .withBody("hi")
+                .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME, "embeddings")
+                .withHeader(WeaviateVectorDb.Headers.PROPERTIES, map)
+                .request(Exchange.class);
+
+        assertThat(result).isNotNull();
+        assertThat(result.getException()).isNull();
+        Result<WeaviateObject> res = (Result<WeaviateObject>) result.getIn().getBody();
+        CREATEID = res.getResult().getId();
+    }
+
+    @Test
+    @Order(3)
+    public void updateById() {
+
+        HashMap<String, String> map = new HashMap<String, String>();
+        map.put("dog", "dachshund");
+
+        Exchange result = fluentTemplate.to("direct:up")
+                .withHeader(WeaviateVectorDb.Headers.ACTION, WeaviateVectorDbAction.UPDATE_BY_ID)
+                .withBody("hi")
+                .withHeader(WeaviateVectorDb.Headers.INDEX_ID, CREATEID)
+                .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME, "embeddings")
+                .withHeader(WeaviateVectorDb.Headers.PROPERTIES, map)
+                .request(Exchange.class);
+
+        assertThat(result).isNotNull();
+        assertThat(result.getException()).isNull();
+    }
+
+    @Test
+    @Order(8)
+    public void querybyid() {
+        Exchange result = fluentTemplate.to(WEAVIATE_URI)
+                .withHeader(WeaviateVectorDb.Headers.ACTION, WeaviateVectorDbAction.QUERY_BY_ID)
+                .withHeader(WeaviateVectorDb.Headers.INDEX_ID, CREATEID)
+                .request(Exchange.class);
+
+        assertThat(result).isNotNull();
+        assertThat(result.getException()).isNull();
+        Result<WeaviateObject> res = (Result<WeaviateObject>) result.getIn().getBody();
+        assertThat(res.hasErrors()).isFalse();
+
+        List<WeaviateObject> list = (List) res.getResult();
+        for (WeaviateObject wo : list) {
+
+            Map<String, Object> map = wo.getProperties();
+            assertThat(map).containsKey("sky");
+            assertThat(map).containsKey("age");
+            assertThat(map).containsKey("dog");
+        }
+    }
+
+    @Test
+    @Order(9)
+    public void query() {
+        Exchange result = fluentTemplate.to("direct:query")
+                .withHeader(WeaviateVectorDb.Headers.ACTION, WeaviateVectorDbAction.QUERY)
+                .withBody("hi")
+                .request(Exchange.class);
+
+        assertThat(result).isNotNull();
+        assertThat(result.getException()).isNull();
+        assertNotNull(result.getIn().getBody());
+    }
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                from("direct:in")
+                        .to("langchain4j-embeddings:test")
+                        .setHeader(WeaviateVectorDb.Headers.ACTION).constant(WeaviateVectorDbAction.CREATE)
+                        // transform data to embed to a vecto embeddings
+                        .transform(
+                                new DataType("weaviate:embeddings"))
+                        .to(WEAVIATE_URI);
+
+                from("direct:up")
+                        .to("langchain4j-embeddings:test")
+                        // transform prompt into embeddings for search
+                        .transform(
+                                new DataType("weaviate:embeddings"))
+                        .setHeader(WeaviateVectorDb.Headers.ACTION, constant(WeaviateVectorDbAction.UPDATE_BY_ID))
+                        .to(WEAVIATE_URI)
+                        // decode retrieved embeddings for RAG
+                        .transform(
+                                new DataType("weaviate:embeddings"));
+
+                from("direct:query")
+                        .to("langchain4j-embeddings:test")
+                        // transform prompt into embeddings for search
+                        .transform(
+                                new DataType("weaviate:embeddings"))
+                        .setHeader(WeaviateVectorDb.Headers.ACTION, constant(WeaviateVectorDbAction.QUERY))
+                        .to(WEAVIATE_URI)
+                        // decode retrieved embeddings for RAG
+                        .transform(
+                                new DataType("weaviate:embeddings"));
+            }
+        };
+    }
+}
diff --git a/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/org/apache/camel/component/weaviate/weaviate.json b/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/org/apache/camel/component/weaviate/weaviate.json
index eb63514b7b8..ab0a50c7ca2 100644
--- a/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/org/apache/camel/component/weaviate/weaviate.json
+++ b/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/org/apache/camel/component/weaviate/weaviate.json
@@ -48,7 +48,9 @@
     "CamelWeaviateProperties": { "index": 10, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "HashMap", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Weaviate Object properties", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#PROPERTIES" },
     "CamelWeaviateIndexId": { "index": 11, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Index Id", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#INDEX_ID" },
     "CamelWeaviateQueryTopK": { "index": 12, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Query Top K", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#QUERY_TOP_K" },
-    "CamelWeaviateUpdateWithMerge": { "index": 13, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "true", "description": "Merges properties into the object", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#UPDATE_WITH_MERGE" }
+    "CamelWeaviateUpdateWithMerge": { "index": 13, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "true", "description": "Merges properties into the object", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#UPDATE_WITH_MERGE" },
+    "CamelWeaviateKeyName": { "index": 14, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Key Name for Insert\/Upsert operation", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#KEY_NAME" },
+    "CamelWeaviateKeyValue": { "index": 15, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Key Value for Insert\/Upsert operation", "constantName": "org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#KEY_VALUE" }
   },
   "properties": {
     "collection": { "index": 0, "kind": "path", "displayName": "Collection", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The collection Name" },
diff --git a/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties b/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..2faff48da8b
--- /dev/null
+++ b/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=weaviate:embeddings
+groupId=org.apache.camel
+artifactId=camel-weaviate
+version=4.14.0-SNAPSHOT
+projectName=Camel :: AI :: Weaviate
+projectDescription=Camel Weaviate support
diff --git a/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/services/org/apache/camel/transformer/weaviate-embeddings b/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/services/org/apache/camel/transformer/weaviate-embeddings
new file mode 100644
index 00000000000..c1b57cf57f9
--- /dev/null
+++ b/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/services/org/apache/camel/transformer/weaviate-embeddings
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.weaviate.transform.WeaviateEmbeddingsDataTypeTransformer
diff --git a/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/services/org/apache/camel/transformer/weaviate-embeddings.json b/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/services/org/apache/camel/transformer/weaviate-embeddings.json
new file mode 100644
index 00000000000..6f0bef95cdc
--- /dev/null
+++ b/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/services/org/apache/camel/transformer/weaviate-embeddings.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "weaviate:embeddings",
+    "title": "Weaviate (Embeddings)",
+    "description": "Prepares the message to become an object writable by Weaviate component",
+    "deprecated": false,
+    "javaType": "org.apache.camel.component.weaviate.transform.WeaviateEmbeddingsDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-weaviate",
+    "version": "4.14.0-SNAPSHOT"
+  }
+}
+
diff --git a/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/WeaviateVectorDb.java b/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/WeaviateVectorDb.java
index 80a7dc6be2d..17a7a8617da 100644
--- a/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/WeaviateVectorDb.java
+++ b/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/WeaviateVectorDb.java
@@ -67,5 +67,12 @@ public class WeaviateVectorDb {
 
         @Metadata(description = "Merges properties into the object", javaType = "Boolean", defaultValue = "true")
         public static final String UPDATE_WITH_MERGE = "CamelWeaviateUpdateWithMerge";
+
+        @Metadata(description = "Key Name for Insert/Upsert operation", javaType = "String")
+        public static final String KEY_NAME = "CamelWeaviateKeyName";
+
+        @Metadata(description = "Key Value for Insert/Upsert operation", javaType = "String")
+        public static final String KEY_VALUE = "CamelWeaviateKeyValue";
+
     }
 }
diff --git a/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/transform/WeaviateEmbeddingsDataTypeTransformer.java b/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/transform/WeaviateEmbeddingsDataTypeTransformer.java
new file mode 100644
index 00000000000..5dbf805997c
--- /dev/null
+++ b/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/transform/WeaviateEmbeddingsDataTypeTransformer.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.weaviate.transform;
+
+import java.util.HashMap;
+import java.util.List;
+
+import dev.langchain4j.data.embedding.Embedding;
+import dev.langchain4j.data.segment.TextSegment;
+import org.apache.camel.Message;
+import org.apache.camel.ai.CamelLangchain4jAttributes;
+import org.apache.camel.component.weaviate.WeaviateVectorDb;
+import org.apache.camel.component.weaviate.WeaviateVectorDbAction;
+import org.apache.camel.spi.DataType;
+import org.apache.camel.spi.DataTypeTransformer;
+import org.apache.camel.spi.Transformer;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * Maps a LangChain4j Embeddings to a Weaviate Create/UpdateByID to write an embeddings vector on a Weaviate Database.
+ */
+@DataTypeTransformer(name = "weaviate:embeddings",
+                     description = "Prepares the message to become an object writable by Weaviate component")
+public class WeaviateEmbeddingsDataTypeTransformer extends Transformer {
+
+    @Override
+    public void transform(Message message, DataType fromType, DataType toType) {
+        Embedding embedding = message.getHeader(CamelLangchain4jAttributes.CAMEL_LANGCHAIN4J_EMBEDDING_VECTOR, Embedding.class);
+        String textFieldName = message.getHeader(WeaviateVectorDb.Headers.TEXT_FIELD_NAME, () -> "text", String.class);
+        String vectorFieldName = message.getHeader(WeaviateVectorDb.Headers.VECTOR_FIELD_NAME, () -> "vector", String.class);
+        String collectionName = message.getHeader(WeaviateVectorDb.Headers.COLLECTION_NAME, () -> "embeddings", String.class);
+        String keyName = message.getHeader(WeaviateVectorDb.Headers.KEY_NAME, () -> "id", String.class);
+        Object keyValue = message.getHeader(WeaviateVectorDb.Headers.KEY_VALUE, () -> null);
+        TextSegment text = message.getBody(TextSegment.class);
+        final WeaviateVectorDbAction action = message.getHeader(WeaviateVectorDb.Headers.ACTION, WeaviateVectorDbAction.class);
+        switch (action) {
+            case CREATE ->
+                createEmbeddingOperation(message, embedding, vectorFieldName, textFieldName, text, collectionName, keyValue,
+                        keyName);
+            case UPDATE_BY_ID ->
+                updateEmbeddingOperation(message, embedding, vectorFieldName, textFieldName, text, collectionName, keyValue,
+                        keyName);
+            case QUERY ->
+                queryEmbeddingOperation(message, embedding, vectorFieldName, textFieldName, text, collectionName, keyValue,
+                        keyName);
+            default -> throw new IllegalStateException("The only operations supported are create and updatebyid");
+        }
+    }
+
+    private static void createEmbeddingOperation(
+            Message message, Embedding embedding, String vectorFieldName, String textFieldName, TextSegment text,
+            String collectionName, Object keyValue, String keyName) {
+        message.setBody(embedding.vectorAsList(), List.class);
+
+        if (ObjectHelper.isNotEmpty(keyValue) && ObjectHelper.isNotEmpty(keyName)) {
+            HashMap<String, Object> maps = new HashMap<String, Object>();
+            maps.put(keyName, keyValue);
+            message.setHeader(WeaviateVectorDb.Headers.PROPERTIES, maps);
+        }
+    }
+
+    private static void updateEmbeddingOperation(
+            Message message, Embedding embedding, String vectorFieldName, String textFieldName, TextSegment text,
+            String collectionName, Object keyValue, String keyName) {
+        message.setBody(embedding.vectorAsList(), List.class);
+
+        if (ObjectHelper.isNotEmpty(keyValue) && ObjectHelper.isNotEmpty(keyName)) {
+            HashMap<String, Object> maps = new HashMap<String, Object>();
+            maps.put(keyName, keyValue);
+            message.setHeader(WeaviateVectorDb.Headers.PROPERTIES, maps);
+        }
+    }
+
+    private static void queryEmbeddingOperation(
+            Message message, Embedding embedding, String vectorFieldName, String textFieldName, TextSegment text,
+            String collectionName, Object keyValue, String keyName) {
+        message.setBody(embedding.vectorAsList(), List.class);
+
+        if (ObjectHelper.isNotEmpty(keyValue) && ObjectHelper.isNotEmpty(keyName)) {
+            HashMap<String, Object> maps = new HashMap<String, Object>();
+            maps.put(keyName, keyValue);
+            message.setHeader(WeaviateVectorDb.Headers.PROPERTIES, maps);
+        }
+    }
+}
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/WeaviateVectorDbEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/WeaviateVectorDbEndpointBuilderFactory.java
index 7510b92a6b0..89ce7a17754 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/WeaviateVectorDbEndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/WeaviateVectorDbEndpointBuilderFactory.java
@@ -439,6 +439,30 @@ public interface WeaviateVectorDbEndpointBuilderFactory {
         public String weaviateUpdateWithMerge() {
             return "CamelWeaviateUpdateWithMerge";
         }
+        /**
+         * Key Name for Insert/Upsert operation.
+         * 
+         * The option is a: {@code String} type.
+         * 
+         * Group: producer
+         * 
+         * @return the name of the header {@code WeaviateKeyName}.
+         */
+        public String weaviateKeyName() {
+            return "CamelWeaviateKeyName";
+        }
+        /**
+         * Key Value for Insert/Upsert operation.
+         * 
+         * The option is a: {@code String} type.
+         * 
+         * Group: producer
+         * 
+         * @return the name of the header {@code WeaviateKeyValue}.
+         */
+        public String weaviateKeyValue() {
+            return "CamelWeaviateKeyValue";
+        }
     }
     static WeaviateVectorDbEndpointBuilder endpointBuilder(String componentName, String path) {
         class WeaviateVectorDbEndpointBuilderImpl extends AbstractEndpointBuilder implements WeaviateVectorDbEndpointBuilder, AdvancedWeaviateVectorDbEndpointBuilder {