You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2024/08/07 12:12:54 UTC
(camel) branch CAMEL-21012 updated (8008965dba7 -> b66f960a3d3)
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a change to branch CAMEL-21012
in repository https://gitbox.apache.org/repos/asf/camel.git
discard 8008965dba7 CAMEL-21012 - camel-milvus: collection name mismatch with embeddings
discard b8320c0bcbe CAMEL-21012 - camel-milvus: collection name mismatch with embeddings
new 744e45913de CAMEL-21012 - camel-milvus: action name mismatch with embeddings
new b66f960a3d3 CAMEL-21012 - camel-milvus: action name mismatch with embeddings
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (8008965dba7)
\
N -- N -- N refs/heads/CAMEL-21012 (b66f960a3d3)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
(camel) 02/02: CAMEL-21012 - camel-milvus: action name mismatch with embeddings
Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch CAMEL-21012
in repository https://gitbox.apache.org/repos/asf/camel.git
commit b66f960a3d388302543ba7809707812328b28a02
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Aug 7 13:13:07 2024 +0200
CAMEL-21012 - camel-milvus: action name mismatch with embeddings
Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
.../apache/camel/catalog/components/milvus.json | 4 +++-
.../endpoint/dsl/MilvusEndpointBuilderFactory.java | 24 ++++++++++++++++++++++
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/milvus.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/milvus.json
index 6405557553d..b0fdb0f3bd5 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/milvus.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/milvus.json
@@ -37,7 +37,9 @@
"CamelMilvusOperationStatusValue": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Operation Status Value.", "constantName": "org.apache.camel.component.milvus.Milvus$Headers#OPERATION_STATUS_VALUE" },
"CamelMilvusTextFieldName": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Text Field Name for Insert\/Upsert operation", "constantName": "org.apache.camel.component.milvus.Milvus$Headers#TEXT_FIELD_NAME" },
"CamelMilvusVectorFieldName": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Vector Field Name for Insert\/Upsert operation", "constantName": "org.apache.camel.component.milvus.Milvus$Headers#VECTOR_FIELD_NAME" },
- "CamelMilvusCollectionName": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Collection Name for Insert\/Upsert operation", "constantName": "org.apache.camel.component.milvus.Milvus$Headers#COLLECTION_NAME" }
+ "CamelMilvusCollectionName": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Collection Name for Insert\/Upsert operation", "constantName": "org.apache.camel.component.milvus.Milvus$Headers#COLLECTION_NAME" },
+ "CamelMilvusKeyName": { "index": 6, "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.milvus.Milvus$Headers#KEY_NAME" },
+ "CamelMilvusKeyValue": { "index": 7, "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.milvus.Milvus$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/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MilvusEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MilvusEndpointBuilderFactory.java
index 2e3b76f8266..cc09b81be7b 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MilvusEndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MilvusEndpointBuilderFactory.java
@@ -329,6 +329,30 @@ public interface MilvusEndpointBuilderFactory {
public String milvusCollectionName() {
return "CamelMilvusCollectionName";
}
+ /**
+ * Key Name for Insert/Upsert operation.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code MilvusKeyName}.
+ */
+ public String milvusKeyName() {
+ return "CamelMilvusKeyName";
+ }
+ /**
+ * Key Value for Insert/Upsert operation.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code MilvusKeyValue}.
+ */
+ public String milvusKeyValue() {
+ return "CamelMilvusKeyValue";
+ }
}
static MilvusEndpointBuilder endpointBuilder(String componentName, String path) {
class MilvusEndpointBuilderImpl extends AbstractEndpointBuilder implements MilvusEndpointBuilder, AdvancedMilvusEndpointBuilder {
(camel) 01/02: CAMEL-21012 - camel-milvus: action name mismatch with embeddings
Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch CAMEL-21012
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 744e45913de19cd27f9f673101c7ba4a4b732ccb
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Aug 7 12:55:01 2024 +0200
CAMEL-21012 - camel-milvus: action name mismatch with embeddings
Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
...ngChain4jEmbeddingsComponentMilvusTargetIT.java | 23 ++++++++++-
.../org/apache/camel/component/milvus/milvus.json | 4 +-
.../org/apache/camel/component/milvus/Milvus.java | 6 +++
.../MilvusEmbeddingsDataTypeTransformer.java | 46 ++++++++++++++++++++++
4 files changed, 77 insertions(+), 2 deletions(-)
diff --git a/components/camel-ai/camel-langchain4j-embeddings/src/test/java/org/apache/camel/component/langchain4j/embeddings/LangChain4jEmbeddingsComponentMilvusTargetIT.java b/components/camel-ai/camel-langchain4j-embeddings/src/test/java/org/apache/camel/component/langchain4j/embeddings/LangChain4jEmbeddingsComponentMilvusTargetIT.java
index 28811aa4faa..3baf991111e 100644
--- a/components/camel-ai/camel-langchain4j-embeddings/src/test/java/org/apache/camel/component/langchain4j/embeddings/LangChain4jEmbeddingsComponentMilvusTargetIT.java
+++ b/components/camel-ai/camel-langchain4j-embeddings/src/test/java/org/apache/camel/component/langchain4j/embeddings/LangChain4jEmbeddingsComponentMilvusTargetIT.java
@@ -80,7 +80,6 @@ public class LangChain4jEmbeddingsComponentMilvusTargetIT extends CamelTestSuppo
.withDescription("user identification")
.withDataType(DataType.Int64)
.withPrimaryKey(true)
- .withAutoID(true)
.build();
FieldType fieldType2 = FieldType.newBuilder()
@@ -171,6 +170,18 @@ public class LangChain4jEmbeddingsComponentMilvusTargetIT extends CamelTestSuppo
c -> assertThat(c.rowRecords.size() == 1));
}
+ @Test
+ @Order(4)
+ public void upsert() {
+
+ Exchange result = fluentTemplate.to("direct:up")
+ .withBody("hello")
+ .request(Exchange.class);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getException()).isNull();
+ }
+
@Override
protected RoutesBuilder createRouteBuilder() {
return new RouteBuilder() {
@@ -178,6 +189,16 @@ public class LangChain4jEmbeddingsComponentMilvusTargetIT extends CamelTestSuppo
from("direct:in")
.to("langchain4j-embeddings:test")
.setHeader(Milvus.Headers.ACTION).constant(MilvusAction.INSERT)
+ .setHeader(Milvus.Headers.KEY_NAME).constant("userID")
+ .setHeader(Milvus.Headers.KEY_VALUE).constant(Long.valueOf("3"))
+ .transform(new org.apache.camel.spi.DataType("milvus:embeddings"))
+ .to(MILVUS_URI);
+
+ from("direct:up")
+ .to("langchain4j-embeddings:test")
+ .setHeader(Milvus.Headers.ACTION).constant(MilvusAction.UPSERT)
+ .setHeader(Milvus.Headers.KEY_NAME).constant("userID")
+ .setHeader(Milvus.Headers.KEY_VALUE).constant(Long.valueOf("3"))
.transform(new org.apache.camel.spi.DataType("milvus:embeddings"))
.to(MILVUS_URI);
}
diff --git a/components/camel-ai/camel-milvus/src/generated/resources/META-INF/org/apache/camel/component/milvus/milvus.json b/components/camel-ai/camel-milvus/src/generated/resources/META-INF/org/apache/camel/component/milvus/milvus.json
index 6405557553d..b0fdb0f3bd5 100644
--- a/components/camel-ai/camel-milvus/src/generated/resources/META-INF/org/apache/camel/component/milvus/milvus.json
+++ b/components/camel-ai/camel-milvus/src/generated/resources/META-INF/org/apache/camel/component/milvus/milvus.json
@@ -37,7 +37,9 @@
"CamelMilvusOperationStatusValue": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Operation Status Value.", "constantName": "org.apache.camel.component.milvus.Milvus$Headers#OPERATION_STATUS_VALUE" },
"CamelMilvusTextFieldName": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Text Field Name for Insert\/Upsert operation", "constantName": "org.apache.camel.component.milvus.Milvus$Headers#TEXT_FIELD_NAME" },
"CamelMilvusVectorFieldName": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Vector Field Name for Insert\/Upsert operation", "constantName": "org.apache.camel.component.milvus.Milvus$Headers#VECTOR_FIELD_NAME" },
- "CamelMilvusCollectionName": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Collection Name for Insert\/Upsert operation", "constantName": "org.apache.camel.component.milvus.Milvus$Headers#COLLECTION_NAME" }
+ "CamelMilvusCollectionName": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Collection Name for Insert\/Upsert operation", "constantName": "org.apache.camel.component.milvus.Milvus$Headers#COLLECTION_NAME" },
+ "CamelMilvusKeyName": { "index": 6, "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.milvus.Milvus$Headers#KEY_NAME" },
+ "CamelMilvusKeyValue": { "index": 7, "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.milvus.Milvus$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-milvus/src/main/java/org/apache/camel/component/milvus/Milvus.java b/components/camel-ai/camel-milvus/src/main/java/org/apache/camel/component/milvus/Milvus.java
index 0a5a2fe1f83..defaf5cd3ec 100644
--- a/components/camel-ai/camel-milvus/src/main/java/org/apache/camel/component/milvus/Milvus.java
+++ b/components/camel-ai/camel-milvus/src/main/java/org/apache/camel/component/milvus/Milvus.java
@@ -43,5 +43,11 @@ public class Milvus {
@Metadata(description = "Collection Name for Insert/Upsert operation", javaType = "String")
public static final String COLLECTION_NAME = "CamelMilvusCollectionName";
+
+ @Metadata(description = "Key Name for Insert/Upsert operation", javaType = "String")
+ public static final String KEY_NAME = "CamelMilvusKeyName";
+
+ @Metadata(description = "Key Value for Insert/Upsert operation", javaType = "String")
+ public static final String KEY_VALUE = "CamelMilvusKeyValue";
}
}
diff --git a/components/camel-ai/camel-milvus/src/main/java/org/apache/camel/component/milvus/transform/MilvusEmbeddingsDataTypeTransformer.java b/components/camel-ai/camel-milvus/src/main/java/org/apache/camel/component/milvus/transform/MilvusEmbeddingsDataTypeTransformer.java
index 5cd64f1c3b4..f1debf059b0 100644
--- a/components/camel-ai/camel-milvus/src/main/java/org/apache/camel/component/milvus/transform/MilvusEmbeddingsDataTypeTransformer.java
+++ b/components/camel-ai/camel-milvus/src/main/java/org/apache/camel/component/milvus/transform/MilvusEmbeddingsDataTypeTransformer.java
@@ -24,12 +24,15 @@ import java.util.List;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;
import io.milvus.param.dml.InsertParam;
+import io.milvus.param.dml.UpsertParam;
import org.apache.camel.Message;
import org.apache.camel.ai.CamelLangchain4jAttributes;
import org.apache.camel.component.milvus.Milvus;
+import org.apache.camel.component.milvus.MilvusAction;
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 Milvus InsertParam/Upsert Param to write an embeddings vector on a Milvus
@@ -45,13 +48,34 @@ public class MilvusEmbeddingsDataTypeTransformer extends Transformer {
String textFieldName = message.getHeader(Milvus.Headers.TEXT_FIELD_NAME, () -> "text", String.class);
String vectorFieldName = message.getHeader(Milvus.Headers.VECTOR_FIELD_NAME, () -> "vector", String.class);
String collectionName = message.getHeader(Milvus.Headers.COLLECTION_NAME, () -> "embeddings", String.class);
+ String keyName = message.getHeader(Milvus.Headers.KEY_NAME, () -> "id", String.class);
+ Object keyValue = message.getHeader(Milvus.Headers.KEY_VALUE, () -> null);
TextSegment text = message.getBody(TextSegment.class);
+ final MilvusAction action = message.getHeader(Milvus.Headers.ACTION, MilvusAction.class);
+ switch (action) {
+ case INSERT -> insertEmbeddingOperation(message, embedding, vectorFieldName, textFieldName, text, collectionName,
+ keyValue, keyName);
+ case UPSERT -> upsertEmbeddingOperation(message, embedding, vectorFieldName, textFieldName, text, collectionName,
+ keyValue, keyName);
+ default -> throw new IllegalStateException("The only operations supported are insert and upsert");
+ }
+ }
+
+ private static void insertEmbeddingOperation(
+ Message message, Embedding embedding, String vectorFieldName, String textFieldName, TextSegment text,
+ String collectionName, Object keyValue, String keyName) {
List<InsertParam.Field> fields = new ArrayList<>();
ArrayList list = new ArrayList<>();
list.add(embedding.vectorAsList());
fields.add(new InsertParam.Field(vectorFieldName, list));
fields.add(new InsertParam.Field(textFieldName, Collections.singletonList(text.text())));
+ if (ObjectHelper.isNotEmpty(keyValue) && ObjectHelper.isNotEmpty(keyName)) {
+ ArrayList keyValues = new ArrayList<>();
+ keyValues.add(keyValue);
+ fields.add(new InsertParam.Field(keyName, keyValues));
+ }
+
InsertParam insertParam = InsertParam.newBuilder()
.withCollectionName(collectionName)
.withFields(fields)
@@ -59,4 +83,26 @@ public class MilvusEmbeddingsDataTypeTransformer extends Transformer {
message.setBody(insertParam);
}
+
+ private static void upsertEmbeddingOperation(
+ Message message, Embedding embedding, String vectorFieldName, String textFieldName, TextSegment text,
+ String collectionName, Object keyValue, String keyName) {
+ List<InsertParam.Field> fields = new ArrayList<>();
+ ArrayList list = new ArrayList<>();
+ list.add(embedding.vectorAsList());
+ fields.add(new UpsertParam.Field(vectorFieldName, list));
+ fields.add(new UpsertParam.Field(textFieldName, Collections.singletonList(text.text())));
+ if (ObjectHelper.isNotEmpty(keyValue) && ObjectHelper.isNotEmpty(keyName)) {
+ ArrayList keyValues = new ArrayList<>();
+ keyValues.add(keyValue);
+ fields.add(new UpsertParam.Field(keyName, keyValues));
+ }
+
+ UpsertParam upsertParam = UpsertParam.newBuilder()
+ .withCollectionName(collectionName)
+ .withFields(fields)
+ .build();
+
+ message.setBody(upsertParam);
+ }
}