This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-kamelets.git
The following commit(s) were added to refs/heads/main by this push:
new edc8bc441 Create a Google Vertex AI Sink Kamelet (#2722)
edc8bc441 is described below
commit edc8bc441630c8c5a4278d027d348a212d25c517
Author: Andrea Cosentino <[email protected]>
AuthorDate: Tue Feb 17 10:53:26 2026 +0100
Create a Google Vertex AI Sink Kamelet (#2722)
* Create a Google Vertex AI Sink Kamelet
Signed-off-by: Andrea Cosentino <[email protected]>
* Create a Google Vertex AI Sink Kamelet
Signed-off-by: Andrea Cosentino <[email protected]>
---------
Signed-off-by: Andrea Cosentino <[email protected]>
---
docs/modules/ROOT/nav.adoc | 1 +
.../partials/google-vertexai-sink-description.adoc | 26 ++++++
kamelets/aws-redshift-sink.kamelet.yaml | 2 +-
kamelets/aws-redshift-source.kamelet.yaml | 2 +-
kamelets/google-vertexai-sink.kamelet.yaml | 96 ++++++++++++++++++++++
kamelets/postgresql-sink.kamelet.yaml | 2 +-
kamelets/postgresql-source.kamelet.yaml | 2 +-
.../kamelets/catalog/KameletsCatalogTest.java | 2 +-
.../kamelets/aws-redshift-sink.kamelet.yaml | 2 +-
.../kamelets/aws-redshift-source.kamelet.yaml | 2 +-
.../kamelets/google-vertexai-sink.kamelet.yaml | 96 ++++++++++++++++++++++
.../kamelets/postgresql-sink.kamelet.yaml | 2 +-
.../kamelets/postgresql-source.kamelet.yaml | 2 +-
13 files changed, 228 insertions(+), 9 deletions(-)
diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc
index 7e7bea1de..62b60c6e1 100644
--- a/docs/modules/ROOT/nav.adoc
+++ b/docs/modules/ROOT/nav.adoc
@@ -101,6 +101,7 @@
* xref:google-storage-event-based-source.adoc[]
* xref:google-storage-sink.adoc[]
* xref:google-storage-source.adoc[]
+* xref:google-vertexai-sink.adoc[]
* xref:graphql-sink.adoc[]
* xref:has-header-filter-action.adoc[]
* xref:header-matches-filter-action.adoc[]
diff --git a/docs/modules/ROOT/partials/google-vertexai-sink-description.adoc
b/docs/modules/ROOT/partials/google-vertexai-sink-description.adoc
new file mode 100644
index 000000000..942bcb28e
--- /dev/null
+++ b/docs/modules/ROOT/partials/google-vertexai-sink-description.adoc
@@ -0,0 +1,26 @@
+== Google Vertex AI Sink Kamelet Description
+
+=== Authentication
+
+This Kamelet uses Google Cloud service account authentication. The service
account key is optional - if not provided, the Kamelet will use Application
Default Credentials (ADC).
+
+If you provide a service account key, it must be base64-encoded. Ensure that
the service account has the `aiplatform.endpoints.predict` permission
(typically granted through the `Vertex AI User` role).
+
+=== Required Configuration
+
+- **Project ID**: The Google Cloud Project ID
+- **Location**: The Google Cloud region where Vertex AI models are available
(e.g., `us-central1`)
+- **Model ID**: The model identifier to use for predictions (e.g.,
`gemini-2.5-pro`)
+
+=== Optional Configuration
+
+- **Service Account Key**: Base64-encoded service account credentials
+- **Operation**: The operation to perform (default: `generateText`). Supported
operations are `generateText`, `generateChat`, `generateImage`,
`generateEmbeddings`, `generateCode`, `generateMultimodal`, and `rawPredict`
+- **Temperature**: Controls randomness in generation (0.0 to 1.0)
+- **Max Output Tokens**: Maximum number of tokens to generate in the response
+- **Top P**: Nucleus sampling parameter (0.0 to 1.0)
+- **Top K**: Only sample from the top K options for each subsequent token
+
+=== Content Generation
+
+The Kamelet sends the message body as a prompt to the specified Google Vertex
AI model and returns the generated content. It supports Google native models
(Gemini, Imagen) as well as partner models (Claude, Llama, Mistral) through the
`rawPredict` operation.
diff --git a/kamelets/aws-redshift-sink.kamelet.yaml
b/kamelets/aws-redshift-sink.kamelet.yaml
index d2af0fca3..06aea8b01 100644
--- a/kamelets/aws-redshift-sink.kamelet.yaml
+++ b/kamelets/aws-redshift-sink.kamelet.yaml
@@ -78,7 +78,7 @@ spec:
- "camel:jackson"
- "camel:kamelet"
- "camel:sql"
- - "mvn:com.amazon.redshift:redshift-jdbc42:2.2.3"
+ - "mvn:com.amazon.redshift:redshift-jdbc42:2.2.4"
- "mvn:org.apache.commons:commons-dbcp2:2.14.0"
template:
beans:
diff --git a/kamelets/aws-redshift-source.kamelet.yaml
b/kamelets/aws-redshift-source.kamelet.yaml
index d00f769b4..ef4f32490 100644
--- a/kamelets/aws-redshift-source.kamelet.yaml
+++ b/kamelets/aws-redshift-source.kamelet.yaml
@@ -88,7 +88,7 @@ spec:
- "camel:jackson"
- "camel:kamelet"
- "camel:sql"
- - "mvn:com.amazon.redshift:redshift-jdbc42:2.2.3"
+ - "mvn:com.amazon.redshift:redshift-jdbc42:2.2.4"
- "mvn:org.apache.commons:commons-dbcp2:2.14.0"
template:
beans:
diff --git a/kamelets/google-vertexai-sink.kamelet.yaml
b/kamelets/google-vertexai-sink.kamelet.yaml
new file mode 100644
index 000000000..daa19b5ab
--- /dev/null
+++ b/kamelets/google-vertexai-sink.kamelet.yaml
@@ -0,0 +1,96 @@
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+apiVersion: camel.apache.org/v1
+kind: Kamelet
+metadata:
+ name: google-vertexai-sink
+ annotations:
+ camel.apache.org/kamelet.support.level: "Preview"
+ camel.apache.org/catalog.version: "4.18.0-SNAPSHOT"
+ camel.apache.org/kamelet.icon:
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjU2cHgiIGhlaWdodD0iMjMxcHgiIHZpZXdCb3g9IjAgMCAyNTYgMjMxIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIj4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0yNTIuOTI1ODU0LDEwMy4yMzcwNzcgTDIwMC4zMjczNDQsMTEuNzU5NjY3IEMxOTYuMzAyNTc5LDQuNjIyMjU3MDMgMTg4LjgwMD
[...]
+ camel.apache.org/provider: "Apache Software Foundation"
+ camel.apache.org/kamelet.group: "Google Vertex AI"
+ camel.apache.org/kamelet.namespace: "GCP"
+ labels:
+ camel.apache.org/kamelet.type: "sink"
+spec:
+ definition:
+ title: "Google Vertex AI Sink"
+ description: Send data to Google Vertex AI for generating content with
generative AI models.
+ required:
+ - projectId
+ - location
+ - modelId
+ type: object
+ properties:
+ projectId:
+ title: Google Cloud Project Id
+ description: The Google Cloud Project ID.
+ type: string
+ location:
+ title: Google Cloud Location
+ description: The Google Cloud region (e.g., us-central1).
+ type: string
+ modelId:
+ title: Model Id
+ description: The Model ID to use for predictions (e.g.,
gemini-2.5-pro).
+ type: string
+ serviceAccountKey:
+ title: Service Account Key
+ description: The service account key to use as credentials for the
Vertex AI client. You must encode this value in base64.
+ type: binary
+ x-descriptors:
+ - urn:camel:group:credentials
+ operation:
+ title: Operation
+ description: The operation to perform.
+ type: string
+ default: generateText
+ enum: ["generateText", "generateChat", "generateImage",
"generateEmbeddings", "generateCode", "generateMultimodal", "rawPredict"]
+ temperature:
+ title: Temperature
+ description: Controls randomness in generation. Lower values make
output more deterministic. Range 0.0 to 1.0.
+ type: string
+ maxOutputTokens:
+ title: Max Output Tokens
+ description: Maximum number of tokens to generate in the response.
+ type: string
+ topP:
+ title: Top P
+ description: Nucleus sampling parameter. Considers tokens with top_p
probability mass. Range 0.0 to 1.0.
+ type: string
+ topK:
+ title: Top K
+ description: Only sample from the top K options for each subsequent
token.
+ type: string
+ dependencies:
+ - "camel:core"
+ - "camel:kamelet"
+ - "camel:google-vertexai"
+ template:
+ from:
+ uri: "kamelet:source"
+ steps:
+ - to:
+ uri: "google-vertexai:{{projectId}}:{{location}}:{{modelId}}"
+ parameters:
+ serviceAccountKey: "{{?serviceAccountKey}}"
+ operation: "{{operation}}"
+ temperature: "{{?temperature}}"
+ maxOutputTokens: "{{?maxOutputTokens}}"
+ topP: "{{?topP}}"
+ topK: "{{?topK}}"
diff --git a/kamelets/postgresql-sink.kamelet.yaml
b/kamelets/postgresql-sink.kamelet.yaml
index ca310abd0..f7251469a 100644
--- a/kamelets/postgresql-sink.kamelet.yaml
+++ b/kamelets/postgresql-sink.kamelet.yaml
@@ -78,7 +78,7 @@ spec:
- "camel:jackson"
- "camel:kamelet"
- "camel:sql"
- - "mvn:org.postgresql:postgresql:42.7.9"
+ - "mvn:org.postgresql:postgresql:42.7.10"
- "mvn:org.apache.commons:commons-dbcp2:2.14.0"
template:
beans:
diff --git a/kamelets/postgresql-source.kamelet.yaml
b/kamelets/postgresql-source.kamelet.yaml
index 789d0d082..7cdf7f1c8 100644
--- a/kamelets/postgresql-source.kamelet.yaml
+++ b/kamelets/postgresql-source.kamelet.yaml
@@ -88,7 +88,7 @@ spec:
- "camel:jackson"
- "camel:kamelet"
- "camel:sql"
- - "mvn:org.postgresql:postgresql:42.7.9"
+ - "mvn:org.postgresql:postgresql:42.7.10"
- "mvn:org.apache.commons:commons-dbcp2:2.14.0"
template:
beans:
diff --git
a/library/camel-kamelets-catalog/src/test/java/org/apache/camel/kamelets/catalog/KameletsCatalogTest.java
b/library/camel-kamelets-catalog/src/test/java/org/apache/camel/kamelets/catalog/KameletsCatalogTest.java
index 5c2afd295..fe79189a2 100644
---
a/library/camel-kamelets-catalog/src/test/java/org/apache/camel/kamelets/catalog/KameletsCatalogTest.java
+++
b/library/camel-kamelets-catalog/src/test/java/org/apache/camel/kamelets/catalog/KameletsCatalogTest.java
@@ -193,7 +193,7 @@ public class KameletsCatalogTest {
verifyHeaders("google-functions-sink", 5);
verifyHeaders("google-mail-source", 6);
verifyHeaders("google-pubsub-sink", 3);
- verifyHeaders("google-pubsub-source", 5);
+ verifyHeaders("google-pubsub-source", 6);
verifyHeaders("google-sheets-source", 6);
verifyHeaders("google-storage-source", 21);
verifyHeaders("google-storage-sink", 15);
diff --git
a/library/camel-kamelets/src/main/resources/kamelets/aws-redshift-sink.kamelet.yaml
b/library/camel-kamelets/src/main/resources/kamelets/aws-redshift-sink.kamelet.yaml
index be24935ad..06aea8b01 100644
---
a/library/camel-kamelets/src/main/resources/kamelets/aws-redshift-sink.kamelet.yaml
+++
b/library/camel-kamelets/src/main/resources/kamelets/aws-redshift-sink.kamelet.yaml
@@ -78,7 +78,7 @@ spec:
- "camel:jackson"
- "camel:kamelet"
- "camel:sql"
- - "mvn:com.amazon.redshift:redshift-jdbc42:2.2.2"
+ - "mvn:com.amazon.redshift:redshift-jdbc42:2.2.4"
- "mvn:org.apache.commons:commons-dbcp2:2.14.0"
template:
beans:
diff --git
a/library/camel-kamelets/src/main/resources/kamelets/aws-redshift-source.kamelet.yaml
b/library/camel-kamelets/src/main/resources/kamelets/aws-redshift-source.kamelet.yaml
index 51271e204..ef4f32490 100644
---
a/library/camel-kamelets/src/main/resources/kamelets/aws-redshift-source.kamelet.yaml
+++
b/library/camel-kamelets/src/main/resources/kamelets/aws-redshift-source.kamelet.yaml
@@ -88,7 +88,7 @@ spec:
- "camel:jackson"
- "camel:kamelet"
- "camel:sql"
- - "mvn:com.amazon.redshift:redshift-jdbc42:2.2.2"
+ - "mvn:com.amazon.redshift:redshift-jdbc42:2.2.4"
- "mvn:org.apache.commons:commons-dbcp2:2.14.0"
template:
beans:
diff --git
a/library/camel-kamelets/src/main/resources/kamelets/google-vertexai-sink.kamelet.yaml
b/library/camel-kamelets/src/main/resources/kamelets/google-vertexai-sink.kamelet.yaml
new file mode 100644
index 000000000..daa19b5ab
--- /dev/null
+++
b/library/camel-kamelets/src/main/resources/kamelets/google-vertexai-sink.kamelet.yaml
@@ -0,0 +1,96 @@
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+apiVersion: camel.apache.org/v1
+kind: Kamelet
+metadata:
+ name: google-vertexai-sink
+ annotations:
+ camel.apache.org/kamelet.support.level: "Preview"
+ camel.apache.org/catalog.version: "4.18.0-SNAPSHOT"
+ camel.apache.org/kamelet.icon:
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjU2cHgiIGhlaWdodD0iMjMxcHgiIHZpZXdCb3g9IjAgMCAyNTYgMjMxIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIj4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0yNTIuOTI1ODU0LDEwMy4yMzcwNzcgTDIwMC4zMjczNDQsMTEuNzU5NjY3IEMxOTYuMzAyNTc5LDQuNjIyMjU3MDMgMTg4LjgwMD
[...]
+ camel.apache.org/provider: "Apache Software Foundation"
+ camel.apache.org/kamelet.group: "Google Vertex AI"
+ camel.apache.org/kamelet.namespace: "GCP"
+ labels:
+ camel.apache.org/kamelet.type: "sink"
+spec:
+ definition:
+ title: "Google Vertex AI Sink"
+ description: Send data to Google Vertex AI for generating content with
generative AI models.
+ required:
+ - projectId
+ - location
+ - modelId
+ type: object
+ properties:
+ projectId:
+ title: Google Cloud Project Id
+ description: The Google Cloud Project ID.
+ type: string
+ location:
+ title: Google Cloud Location
+ description: The Google Cloud region (e.g., us-central1).
+ type: string
+ modelId:
+ title: Model Id
+ description: The Model ID to use for predictions (e.g.,
gemini-2.5-pro).
+ type: string
+ serviceAccountKey:
+ title: Service Account Key
+ description: The service account key to use as credentials for the
Vertex AI client. You must encode this value in base64.
+ type: binary
+ x-descriptors:
+ - urn:camel:group:credentials
+ operation:
+ title: Operation
+ description: The operation to perform.
+ type: string
+ default: generateText
+ enum: ["generateText", "generateChat", "generateImage",
"generateEmbeddings", "generateCode", "generateMultimodal", "rawPredict"]
+ temperature:
+ title: Temperature
+ description: Controls randomness in generation. Lower values make
output more deterministic. Range 0.0 to 1.0.
+ type: string
+ maxOutputTokens:
+ title: Max Output Tokens
+ description: Maximum number of tokens to generate in the response.
+ type: string
+ topP:
+ title: Top P
+ description: Nucleus sampling parameter. Considers tokens with top_p
probability mass. Range 0.0 to 1.0.
+ type: string
+ topK:
+ title: Top K
+ description: Only sample from the top K options for each subsequent
token.
+ type: string
+ dependencies:
+ - "camel:core"
+ - "camel:kamelet"
+ - "camel:google-vertexai"
+ template:
+ from:
+ uri: "kamelet:source"
+ steps:
+ - to:
+ uri: "google-vertexai:{{projectId}}:{{location}}:{{modelId}}"
+ parameters:
+ serviceAccountKey: "{{?serviceAccountKey}}"
+ operation: "{{operation}}"
+ temperature: "{{?temperature}}"
+ maxOutputTokens: "{{?maxOutputTokens}}"
+ topP: "{{?topP}}"
+ topK: "{{?topK}}"
diff --git
a/library/camel-kamelets/src/main/resources/kamelets/postgresql-sink.kamelet.yaml
b/library/camel-kamelets/src/main/resources/kamelets/postgresql-sink.kamelet.yaml
index ca310abd0..f7251469a 100644
---
a/library/camel-kamelets/src/main/resources/kamelets/postgresql-sink.kamelet.yaml
+++
b/library/camel-kamelets/src/main/resources/kamelets/postgresql-sink.kamelet.yaml
@@ -78,7 +78,7 @@ spec:
- "camel:jackson"
- "camel:kamelet"
- "camel:sql"
- - "mvn:org.postgresql:postgresql:42.7.9"
+ - "mvn:org.postgresql:postgresql:42.7.10"
- "mvn:org.apache.commons:commons-dbcp2:2.14.0"
template:
beans:
diff --git
a/library/camel-kamelets/src/main/resources/kamelets/postgresql-source.kamelet.yaml
b/library/camel-kamelets/src/main/resources/kamelets/postgresql-source.kamelet.yaml
index 789d0d082..7cdf7f1c8 100644
---
a/library/camel-kamelets/src/main/resources/kamelets/postgresql-source.kamelet.yaml
+++
b/library/camel-kamelets/src/main/resources/kamelets/postgresql-source.kamelet.yaml
@@ -88,7 +88,7 @@ spec:
- "camel:jackson"
- "camel:kamelet"
- "camel:sql"
- - "mvn:org.postgresql:postgresql:42.7.9"
+ - "mvn:org.postgresql:postgresql:42.7.10"
- "mvn:org.apache.commons:commons-dbcp2:2.14.0"
template:
beans: