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 239690cfccb CAMEL-21819 Add fetch action to camel-pinecone (#17317)
239690cfccb is described below
commit 239690cfccb654c042345f62fd1a972355bfcabb
Author: Tom Cunningham <[email protected]>
AuthorDate: Sat Mar 1 02:31:15 2025 -0500
CAMEL-21819 Add fetch action to camel-pinecone (#17317)
---
.../apache/camel/catalog/components/pinecone.json | 2 +-
.../apache/camel/component/pinecone/pinecone.json | 2 +-
.../camel/component/pinecone/PineconeVectorDb.java | 4 +--
.../component/pinecone/PineconeVectorDbAction.java | 1 +
.../pinecone/PineconeVectorDbProducer.java | 37 +++++++++++++++++++---
.../component/pinecone/it/PineconeComponentIT.java | 20 +++++++++++-
.../PineconeVectorDbEndpointBuilderFactory.java | 8 ++---
7 files changed, 61 insertions(+), 13 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/pinecone.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/pinecone.json
index f8d422124a3..ce3b21b1a0e 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/pinecone.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/pinecone.json
@@ -52,7 +52,7 @@
"CamelPineconeCollectionCloudRegion": { "index": 10, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "enum": [ "aws", "gcp", "azure" ], "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description":
"Collection Cloud Vendor Region", "constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#COLLECTION_CLOUD_REGION"
},
"CamelPineconeIndexId": { "index": 11, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "Index Upsert Id", "constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#INDEX_ID" },
"CamelPineconeQueryTopK": { "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.pinecone.PineconeVectorDb$Headers#QUERY_TOP_K" },
- "CamelPineconeQueryNamespace": { "index": 13, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Query Namespace", "constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#QUERY_NAMESPACE"
},
+ "CamelPineconeNamespace": { "index": 13, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "Namespace for actions (query\/upsert\/etc)",
"constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#NAMESPACE" },
"CamelPineconeQueryFilter": { "index": 14, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Query Filter", "constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#QUERY_FILTER" },
"CamelPineconeQueryIncludeValues": { "index": 15, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Query Include Values", "constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#QUERY_INCLUDE_VALUES"
},
"CamelPineconeQueryIncludeMetadata": { "index": 16, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "com.google.protobuf.Struct", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description":
"Query Include Metadata", "constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#QUERY_INCLUDE_METADATA"
}
diff --git
a/components/camel-ai/camel-pinecone/src/generated/resources/META-INF/org/apache/camel/component/pinecone/pinecone.json
b/components/camel-ai/camel-pinecone/src/generated/resources/META-INF/org/apache/camel/component/pinecone/pinecone.json
index f8d422124a3..ce3b21b1a0e 100644
---
a/components/camel-ai/camel-pinecone/src/generated/resources/META-INF/org/apache/camel/component/pinecone/pinecone.json
+++
b/components/camel-ai/camel-pinecone/src/generated/resources/META-INF/org/apache/camel/component/pinecone/pinecone.json
@@ -52,7 +52,7 @@
"CamelPineconeCollectionCloudRegion": { "index": 10, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "enum": [ "aws", "gcp", "azure" ], "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description":
"Collection Cloud Vendor Region", "constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#COLLECTION_CLOUD_REGION"
},
"CamelPineconeIndexId": { "index": 11, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "Index Upsert Id", "constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#INDEX_ID" },
"CamelPineconeQueryTopK": { "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.pinecone.PineconeVectorDb$Headers#QUERY_TOP_K" },
- "CamelPineconeQueryNamespace": { "index": 13, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Query Namespace", "constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#QUERY_NAMESPACE"
},
+ "CamelPineconeNamespace": { "index": 13, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "Namespace for actions (query\/upsert\/etc)",
"constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#NAMESPACE" },
"CamelPineconeQueryFilter": { "index": 14, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Query Filter", "constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#QUERY_FILTER" },
"CamelPineconeQueryIncludeValues": { "index": 15, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Query Include Values", "constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#QUERY_INCLUDE_VALUES"
},
"CamelPineconeQueryIncludeMetadata": { "index": 16, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "com.google.protobuf.Struct", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description":
"Query Include Metadata", "constantName":
"org.apache.camel.component.pinecone.PineconeVectorDb$Headers#QUERY_INCLUDE_METADATA"
}
diff --git
a/components/camel-ai/camel-pinecone/src/main/java/org/apache/camel/component/pinecone/PineconeVectorDb.java
b/components/camel-ai/camel-pinecone/src/main/java/org/apache/camel/component/pinecone/PineconeVectorDb.java
index a47fd08cdc2..6a3f792bc8e 100644
---
a/components/camel-ai/camel-pinecone/src/main/java/org/apache/camel/component/pinecone/PineconeVectorDb.java
+++
b/components/camel-ai/camel-pinecone/src/main/java/org/apache/camel/component/pinecone/PineconeVectorDb.java
@@ -66,8 +66,8 @@ public class PineconeVectorDb {
@Metadata(description = "Query Top K", javaType = "Integer")
public static final String QUERY_TOP_K = "CamelPineconeQueryTopK";
- @Metadata(description = "Query Namespace", javaType = "String")
- public static final String QUERY_NAMESPACE =
"CamelPineconeQueryNamespace";
+ @Metadata(description = "Namespace for actions (query/upsert/etc)",
javaType = "String")
+ public static final String NAMESPACE = "CamelPineconeNamespace";
@Metadata(description = "Query Filter", javaType = "String")
public static final String QUERY_FILTER = "CamelPineconeQueryFilter";
diff --git
a/components/camel-ai/camel-pinecone/src/main/java/org/apache/camel/component/pinecone/PineconeVectorDbAction.java
b/components/camel-ai/camel-pinecone/src/main/java/org/apache/camel/component/pinecone/PineconeVectorDbAction.java
index 9fe76c664ba..406b27aa1b6 100644
---
a/components/camel-ai/camel-pinecone/src/main/java/org/apache/camel/component/pinecone/PineconeVectorDbAction.java
+++
b/components/camel-ai/camel-pinecone/src/main/java/org/apache/camel/component/pinecone/PineconeVectorDbAction.java
@@ -20,6 +20,7 @@ public enum PineconeVectorDbAction {
CREATE_COLLECTION,
CREATE_SERVERLESS_INDEX,
CREATE_POD_INDEX,
+ FETCH,
UPSERT,
DELETE_INDEX,
DELETE_COLLECTION,
diff --git
a/components/camel-ai/camel-pinecone/src/main/java/org/apache/camel/component/pinecone/PineconeVectorDbProducer.java
b/components/camel-ai/camel-pinecone/src/main/java/org/apache/camel/component/pinecone/PineconeVectorDbProducer.java
index c1452a8cde7..b5cae413ecd 100644
---
a/components/camel-ai/camel-pinecone/src/main/java/org/apache/camel/component/pinecone/PineconeVectorDbProducer.java
+++
b/components/camel-ai/camel-pinecone/src/main/java/org/apache/camel/component/pinecone/PineconeVectorDbProducer.java
@@ -22,6 +22,7 @@ import java.util.concurrent.ExecutorService;
import com.google.protobuf.Struct;
import io.pinecone.clients.Index;
import io.pinecone.clients.Pinecone;
+import io.pinecone.proto.FetchResponse;
import io.pinecone.proto.UpdateResponse;
import io.pinecone.proto.UpsertResponse;
import io.pinecone.unsigned_indices_model.QueryResponseWithUnsignedIndices;
@@ -86,6 +87,9 @@ public class PineconeVectorDbProducer extends DefaultProducer
{
case DELETE_COLLECTION:
deleteCollection(exchange);
break;
+ case FETCH:
+ fetch(exchange);
+ break;
case QUERY:
query(exchange);
break;
@@ -202,9 +206,11 @@ public class PineconeVectorDbProducer extends
DefaultProducer {
indexName = in.getHeader(PineconeVectorDb.Headers.INDEX_NAME,
String.class);
}
String indexId = in.getHeader(PineconeVectorDb.Headers.INDEX_ID,
String.class);
+ String namespace = in.getHeader(PineconeVectorDb.Headers.NAMESPACE,
String.class);
+
Index index = this.client.getIndexConnection(indexName);
- UpsertResponse result = index.upsert(indexId, elements);
+ UpsertResponse result = index.upsert(indexId, elements, namespace);
populateUpsertResponse(result, exchange);
@@ -219,9 +225,10 @@ public class PineconeVectorDbProducer extends
DefaultProducer {
indexName = in.getHeader(PineconeVectorDb.Headers.INDEX_NAME,
String.class);
}
String indexId = in.getHeader(PineconeVectorDb.Headers.INDEX_ID,
String.class);
+ String namespace = in.getHeader(PineconeVectorDb.Headers.NAMESPACE,
String.class);
Index index = this.client.getIndexConnection(indexName);
- UpdateResponse result = index.update(indexId, elements);
+ UpdateResponse result = index.update(indexId, elements, namespace);
populateUpdateResponse(result, exchange);
@@ -243,6 +250,23 @@ public class PineconeVectorDbProducer extends
DefaultProducer {
this.client.deleteCollection(collectionName);
}
+ private void fetch(Exchange exchange) throws Exception {
+ final Message in = exchange.getMessage();
+ List elements = in.getMandatoryBody(List.class);
+ String indexName = getEndpoint().getConfiguration().getIndexName();
+
+ if (in.getHeader(PineconeVectorDb.Headers.INDEX_NAME, String.class) !=
null) {
+ indexName = in.getHeader(PineconeVectorDb.Headers.INDEX_NAME,
String.class);
+ }
+
+ Index index = this.client.getIndexConnection(indexName);
+
+ FetchResponse result
+ = index.fetch(elements);
+
+ populateFetchResponse(result, exchange);
+ }
+
private void query(Exchange exchange) throws Exception {
final Message in = exchange.getMessage();
List elements = in.getMandatoryBody(List.class);
@@ -256,7 +280,7 @@ public class PineconeVectorDbProducer extends
DefaultProducer {
Index index = this.client.getIndexConnection(indexName);
// Optional arguments, can be null
- String namespace =
in.getHeader(PineconeVectorDb.Headers.QUERY_NAMESPACE, String.class);
+ String namespace = in.getHeader(PineconeVectorDb.Headers.NAMESPACE,
String.class);
Struct filter = in.getHeader(PineconeVectorDb.Headers.QUERY_FILTER,
Struct.class);
boolean includeValues =
(in.getHeader(PineconeVectorDb.Headers.QUERY_INCLUDE_VALUES, Boolean.class) ==
null)
? false :
in.getHeader(PineconeVectorDb.Headers.QUERY_INCLUDE_VALUES, Boolean.class);
@@ -285,7 +309,7 @@ public class PineconeVectorDbProducer extends
DefaultProducer {
String indexId = in.getHeader(PineconeVectorDb.Headers.INDEX_ID,
String.class);
// Optional arguments, can be null
- String namespace =
in.getHeader(PineconeVectorDb.Headers.QUERY_NAMESPACE, String.class);
+ String namespace = in.getHeader(PineconeVectorDb.Headers.NAMESPACE,
String.class);
Struct filter = in.getHeader(PineconeVectorDb.Headers.QUERY_FILTER,
Struct.class);
boolean includeValues =
(in.getHeader(PineconeVectorDb.Headers.QUERY_INCLUDE_VALUES, Boolean.class) ==
null)
? false :
in.getHeader(PineconeVectorDb.Headers.QUERY_INCLUDE_VALUES, Boolean.class);
@@ -313,6 +337,11 @@ public class PineconeVectorDbProducer extends
DefaultProducer {
out.setBody(r);
}
+ private void populateFetchResponse(FetchResponse r, Exchange exchange) {
+ Message out = exchange.getMessage();
+ out.setBody(r);
+ }
+
private void populateIndexResponse(IndexModel r, Exchange exchange) {
Message out = exchange.getMessage();
out.setBody(r);
diff --git
a/components/camel-ai/camel-pinecone/src/test/java/org/apache/camel/component/pinecone/it/PineconeComponentIT.java
b/components/camel-ai/camel-pinecone/src/test/java/org/apache/camel/component/pinecone/it/PineconeComponentIT.java
index 2907e9ef081..cb4143ea246 100644
---
a/components/camel-ai/camel-pinecone/src/test/java/org/apache/camel/component/pinecone/it/PineconeComponentIT.java
+++
b/components/camel-ai/camel-pinecone/src/test/java/org/apache/camel/component/pinecone/it/PineconeComponentIT.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.pinecone.it;
import java.util.Arrays;
import java.util.List;
+import io.pinecone.proto.FetchResponse;
import io.pinecone.unsigned_indices_model.QueryResponseWithUnsignedIndices;
import org.apache.camel.Exchange;
import org.apache.camel.component.pinecone.PineconeVectorDb;
@@ -123,7 +124,7 @@ public class PineconeComponentIT extends CamelTestSupport {
elements)
.withHeader(PineconeVectorDb.Headers.INDEX_NAME,
"test-serverless-index")
.withHeader(PineconeVectorDb.Headers.QUERY_TOP_K, 3)
- .withHeader(PineconeVectorDb.Headers.QUERY_NAMESPACE,
"defaultNamespace")
+ .withHeader(PineconeVectorDb.Headers.NAMESPACE,
"defaultNamespace")
.withHeader(PineconeVectorDb.Headers.QUERY_FILTER, "subject\":
{\"$eq\": \"marine\"}")
.withHeader(PineconeVectorDb.Headers.QUERY_INCLUDE_VALUES,
true)
.withHeader(PineconeVectorDb.Headers.QUERY_INCLUDE_METADATA,
true)
@@ -166,4 +167,21 @@ public class PineconeComponentIT extends CamelTestSupport {
assertThat(result.getException()).isNull();
}
+ @Test
+ @Order(7)
+ public void fetch() {
+
+ List<Float> elements = Arrays.asList(1.0f, 2.0f, 3.2f);
+
+ Exchange result =
fluentTemplate.to("pinecone:test-collection?token={{pinecone.token}}")
+ .withHeader(PineconeVectorDb.Headers.ACTION,
PineconeVectorDbAction.FETCH)
+ .withBody(
+ elements)
+ .request(Exchange.class);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getException()).isNull();
+
assertThat(result.getMessage().getBody(FetchResponse.class).getVectorsCount()
!= 0);
+ }
+
}
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/PineconeVectorDbEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/PineconeVectorDbEndpointBuilderFactory.java
index e0530022e09..153f259332f 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/PineconeVectorDbEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/PineconeVectorDbEndpointBuilderFactory.java
@@ -519,16 +519,16 @@ public interface PineconeVectorDbEndpointBuilderFactory {
return "CamelPineconeQueryTopK";
}
/**
- * Query Namespace.
+ * Namespace for actions (query/upsert/etc).
*
* The option is a: {@code String} type.
*
* Group: producer
*
- * @return the name of the header {@code PineconeQueryNamespace}.
+ * @return the name of the header {@code PineconeNamespace}.
*/
- public String pineconeQueryNamespace() {
- return "CamelPineconeQueryNamespace";
+ public String pineconeNamespace() {
+ return "CamelPineconeNamespace";
}
/**
* Query Filter.