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 <tcunn...@redhat.com>
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.

Reply via email to