From 44a6318660969291ad00e4b65e9b0ba82cec9e4b Mon Sep 17 00:00:00 2001 From: Andrea Cosentino Date: Tue, 17 Feb 2026 10:21:27 +0100 Subject: [PATCH 1/2] Create a Google Vertex AI Sink Kamelet Signed-off-by: Andrea Cosentino --- docs/modules/ROOT/nav.adoc | 1 + 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 +- .../google-vertexai-sink.kamelet.yaml | 96 +++++++++++++++++++ .../kamelets/postgresql-sink.kamelet.yaml | 2 +- .../kamelets/postgresql-source.kamelet.yaml | 2 +- 12 files changed, 202 insertions(+), 9 deletions(-) create mode 100644 kamelets/google-vertexai-sink.kamelet.yaml create mode 100644 library/camel-kamelets/src/main/resources/kamelets/google-vertexai-sink.kamelet.yaml 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/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,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjU2cHgiIGhlaWdodD0iMjMxcHgiIHZpZXdCb3g9IjAgMCAyNTYgMjMxIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIj4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0yNTIuOTI1ODU0LDEwMy4yMzcwNzcgTDIwMC4zMjczNDQsMTEuNzU5NjY3IEMxOTYuMzAyNTc5LDQuNjIyMjU3MDMgMTg4LjgwMDU0LDAuMTQ4NDI0NzI2IDE4MC42MDc5MDIsMCBMNzUuMzkwODgxNCwwIEM2Ny4xOTcwOTEyLDAuMTQ0Mzg1NDggNTkuNjkzMTk4NCw0LjYxOTMyMzYzIDU1LjY3MTQzOTgsMTEuNzU5NjY3IEwzLjA1MjkyOTg1LDEwMi45OTcwODMgQy0xLjAxNzY0MzI4LDExMC4wODAzNzMgLTEuMDE3NjQzMjgsMTE4Ljc5MzE0NiAzLjA1MjkyOTg1LDEyNS44NzY0MzYgTDU1LjY1MTQ0MDQsMjE3Ljg3MzgzIEM1OS42MzE5NzU1LDIyNS4xMTI3MDcgNjcuMTE1OTA1MiwyMjkuNzM1MTM0IDc1LjM3MDg4MiwyMzAuMDUzNDg2IEwxODAuNTg3OTAzLDIzMC4wNTM0ODYgQzE4OC44NDI0NDIsMjI5Ljc3MDE0NCAxOTYuMzM5ODA5LDIyNS4xNjY4OTYgMjAwLjMyNzM0NCwyMTcuOTMzODI5IEwyNTIuOTI1ODU0LDEyNi40NTY0MTkgQzI1Ny4wMjQ3MTUsMTE5LjI1OTMxMSAyNTcuMDI0NzE1LDExMC40MzQxODUgMjUyLjkyNTg1NCwxMDMuMjM3MDc3IFoiIGlkPSJwYXRoLTEiPjwvcGF0aD4KICAgIDwvZGVmcz4KCQk8Zz4KCQkJCTxtYXNrIGlkPSJtYXNrLTIiIGZpbGw9IndoaXRlIj4KCQkJCQkJPHVzZSB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KCQkJCTwvbWFzaz4KCQkJCTxnIGZpbGwtcnVsZT0ibm9uemVybyI+PC9nPgoJCQkJPHBhdGggZD0iTTI1Mi45MjU4NTQsMTAzLjIzNzA3NyBMMjAwLjMyNzM0NCwxMS43NTk2NjcgQzE5Ni4zMDI1NzksNC42MjIyNTcwMyAxODguODAwNTQsMC4xNDg0MjQ3MjYgMTgwLjYwNzkwMiwwIEw3NS4zOTA4ODE0LDAgQzY3LjE5NzA5MTIsMC4xNDQzODU0OCA1OS42OTMxOTg0LDQuNjE5MzIzNjMgNTUuNjcxNDM5OCwxMS43NTk2NjcgTDMuMDUyOTI5ODUsMTAyLjk5NzA4MyBDLTEuMDE3NjQzMjgsMTEwLjA4MDM3MyAtMS4wMTc2NDMyOCwxMTguNzkzMTQ2IDMuMDUyOTI5ODUsMTI1Ljg3NjQzNiBMNTUuNjUxNDQwNCwyMTcuODczODMgQzU5LjYzMTk3NTUsMjI1LjExMjcwNyA2Ny4xMTU5MDUyLDIyOS43MzUxMzQgNzUuMzcwODgyLDIzMC4wNTM0ODYgTDE4MC41ODc5MDMsMjMwLjA1MzQ4NiBDMTg4Ljg0MjQ0MiwyMjkuNzcwMTQ0IDE5Ni4zMzk4MDksMjI1LjE2Njg5NiAyMDAuMzI3MzQ0LDIxNy45MzM4MjkgTDI1Mi45MjU4NTQsMTI2LjQ1NjQxOSBDMjU3LjAyNDcxNSwxMTkuMjU5MzExIDI1Ny4wMjQ3MTUsMTEwLjQzNDE4NSAyNTIuOTI1ODU0LDEwMy4yMzcwNzcgWiIgZmlsbD0iIzQyODVGNCIgZmlsbC1ydWxlPSJub256ZXJvIiBtYXNrPSJ1cmwoI21hc2stMikiPjwvcGF0aD4KCQkJCTxwYXRoIGQ9Ik0xODcuMTY3NjA1LDg0LjczMTYwMyBMMTc5LjkxNTcxMSw5Mi42NDA5NDg1IEwxODEuNTQ5Mzc5LDEzOS42Mzg3OTcgTDE3NC42NzYwMTksMTQ5LjYwMDE5IEwxNzAuNjkxNDYyLDE0NS42MTU2MzMgTDE3NC4zNTcyNTQsMTQ1LjYxNTYzMyBMMTc0LjM1NzI1NCwxMjkuMzE4Nzk1IEwxNTYuNzY1NDM1LDExMS43MjY5NzYgTDE0My40Njg3NDYsMTE4LjM3MzA0NyBMOTkuMzY3ODkyOSw3NC4xNzI1MjcxIEw3OC4xMzAyMDQ1LDg1LjU0ODQzNzEgTDc1LjUwMDM5NywxMDcuNTgzMDM3IEw4Mi45NTE1MTg0LDE0Ny45MDY3NTMgTDkzLjc0OTY2NzcsMTU4LjQ4NTc1MiBMODguODI4NzM5OSwxNjUuNDc4NjQ5IEwxNTMuMDc2MDk4LDIzMS4yMzY4MTYgTDE3OS45MTU3MTEsMjMxLjIzNjgxNiBDMTg4LjEzODYxNCwyMzAuOTU0NTYgMTk3LjA0NDI3NiwyMjUuNTY1Njk4IDIwMS4wMTY1MjgsMjE4LjM2MDM1MiBMMjQ0Ljc5NTMzNiwxNDIuMzU2OTM0IEwxODcuMTY3NjA1LDg0LjczMTYwMyBaIiBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iIG9wYWNpdHk9IjAuMDcwMDAwMDAwMyIgbWFzaz0idXJsKCNtYXNrLTIpIj48L3BhdGg+CgkJCQk8cG9seWdvbiBmaWxsPSIjRkZGRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIG1hc2s9InVybCgjbWFzay0yKSIgcG9pbnRzPSI4OC44Mjg3Mzk5IDE2NS40Nzg2NDkgOTkuMzY3ODkyOSAxNTQuOTM5NDk2IDgzLjU2OTEyNDcgMTM5LjE0MDcyOCA4My41NjkxMjQ3IDg5Ljk3MTI5NTMgOTkuMzY3ODkyOSA3NC4xNzI1MjcxIDg4LjgyODczOTkgNjMuNjMzMzc0MSA2Ny43MzA1MTEgODQuNzMxNjAzIDY3LjczMDUxMSAxNDQuMzgwNDIiPjwvcG9seWdvbj4KCQkJCTxjaXJjbGUgZmlsbD0iI0ZGRkZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBtYXNrPSJ1cmwoI21hc2stMikiIGN4PSIxMDUuMTQ1NSIgY3k9IjExNC41NTYwMTIiIHI9IjcuNDcxMDQ0MjMiPjwvY2lyY2xlPgoJCQkJPGNpcmNsZSBmaWxsPSIjRkZGRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIG1hc2s9InVybCgjbWFzay0yKSIgY3g9IjEyNy40OTg4NjUiIGN5PSIxMTQuNTU2MDEyIiByPSI3LjQ3MTA0NDIzIj48L2NpcmNsZT4KCQkJCTxjaXJjbGUgZmlsbD0iI0ZGRkZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBtYXNrPSJ1cmwoI21hc2stMikiIGN4PSIxNDkuODUyMjI5IiBjeT0iMTE0LjU1NjAxMiIgcj0iNy40NzEwNDQyMyI+PC9jaXJjbGU+CgkJCQk8cG9seWdvbiBmaWxsPSIjRkZGRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIG1hc2s9InVybCgjbWFzay0yKSIgcG9pbnRzPSIxNjYuMDY5Mzc2IDYzLjYzMzM3NDEgMTU1LjUzMDIyMyA3NC4xNzI1MjcxIDE3MS4zMjg5OTEgODkuOTcxMjk1MyAxNzEuMzI4OTkxIDEzOS4xNDA3MjggMTU1LjUzMDIyMyAxNTQuOTM5NDk2IDE2Ni4wNjkzNzYgMTY1LjQ3ODY0OSAxODcuMTY3NjA1IDE0NC4zODA0MiAxODcuMTY3NjA1IDg0LjczMTYwMyI+PC9wb2x5Z29uPgoJCTwvZz4KPC9zdmc+Cg==" + 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 @@ void testSupportedHeaders() throws Exception { 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,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjU2cHgiIGhlaWdodD0iMjMxcHgiIHZpZXdCb3g9IjAgMCAyNTYgMjMxIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIj4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0yNTIuOTI1ODU0LDEwMy4yMzcwNzcgTDIwMC4zMjczNDQsMTEuNzU5NjY3IEMxOTYuMzAyNTc5LDQuNjIyMjU3MDMgMTg4LjgwMDU0LDAuMTQ4NDI0NzI2IDE4MC42MDc5MDIsMCBMNzUuMzkwODgxNCwwIEM2Ny4xOTcwOTEyLDAuMTQ0Mzg1NDggNTkuNjkzMTk4NCw0LjYxOTMyMzYzIDU1LjY3MTQzOTgsMTEuNzU5NjY3IEwzLjA1MjkyOTg1LDEwMi45OTcwODMgQy0xLjAxNzY0MzI4LDExMC4wODAzNzMgLTEuMDE3NjQzMjgsMTE4Ljc5MzE0NiAzLjA1MjkyOTg1LDEyNS44NzY0MzYgTDU1LjY1MTQ0MDQsMjE3Ljg3MzgzIEM1OS42MzE5NzU1LDIyNS4xMTI3MDcgNjcuMTE1OTA1MiwyMjkuNzM1MTM0IDc1LjM3MDg4MiwyMzAuMDUzNDg2IEwxODAuNTg3OTAzLDIzMC4wNTM0ODYgQzE4OC44NDI0NDIsMjI5Ljc3MDE0NCAxOTYuMzM5ODA5LDIyNS4xNjY4OTYgMjAwLjMyNzM0NCwyMTcuOTMzODI5IEwyNTIuOTI1ODU0LDEyNi40NTY0MTkgQzI1Ny4wMjQ3MTUsMTE5LjI1OTMxMSAyNTcuMDI0NzE1LDExMC40MzQxODUgMjUyLjkyNTg1NCwxMDMuMjM3MDc3IFoiIGlkPSJwYXRoLTEiPjwvcGF0aD4KICAgIDwvZGVmcz4KCQk8Zz4KCQkJCTxtYXNrIGlkPSJtYXNrLTIiIGZpbGw9IndoaXRlIj4KCQkJCQkJPHVzZSB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KCQkJCTwvbWFzaz4KCQkJCTxnIGZpbGwtcnVsZT0ibm9uemVybyI+PC9nPgoJCQkJPHBhdGggZD0iTTI1Mi45MjU4NTQsMTAzLjIzNzA3NyBMMjAwLjMyNzM0NCwxMS43NTk2NjcgQzE5Ni4zMDI1NzksNC42MjIyNTcwMyAxODguODAwNTQsMC4xNDg0MjQ3MjYgMTgwLjYwNzkwMiwwIEw3NS4zOTA4ODE0LDAgQzY3LjE5NzA5MTIsMC4xNDQzODU0OCA1OS42OTMxOTg0LDQuNjE5MzIzNjMgNTUuNjcxNDM5OCwxMS43NTk2NjcgTDMuMDUyOTI5ODUsMTAyLjk5NzA4MyBDLTEuMDE3NjQzMjgsMTEwLjA4MDM3MyAtMS4wMTc2NDMyOCwxMTguNzkzMTQ2IDMuMDUyOTI5ODUsMTI1Ljg3NjQzNiBMNTUuNjUxNDQwNCwyMTcuODczODMgQzU5LjYzMTk3NTUsMjI1LjExMjcwNyA2Ny4xMTU5MDUyLDIyOS43MzUxMzQgNzUuMzcwODgyLDIzMC4wNTM0ODYgTDE4MC41ODc5MDMsMjMwLjA1MzQ4NiBDMTg4Ljg0MjQ0MiwyMjkuNzcwMTQ0IDE5Ni4zMzk4MDksMjI1LjE2Njg5NiAyMDAuMzI3MzQ0LDIxNy45MzM4MjkgTDI1Mi45MjU4NTQsMTI2LjQ1NjQxOSBDMjU3LjAyNDcxNSwxMTkuMjU5MzExIDI1Ny4wMjQ3MTUsMTEwLjQzNDE4NSAyNTIuOTI1ODU0LDEwMy4yMzcwNzcgWiIgZmlsbD0iIzQyODVGNCIgZmlsbC1ydWxlPSJub256ZXJvIiBtYXNrPSJ1cmwoI21hc2stMikiPjwvcGF0aD4KCQkJCTxwYXRoIGQ9Ik0xODcuMTY3NjA1LDg0LjczMTYwMyBMMTc5LjkxNTcxMSw5Mi42NDA5NDg1IEwxODEuNTQ5Mzc5LDEzOS42Mzg3OTcgTDE3NC42NzYwMTksMTQ5LjYwMDE5IEwxNzAuNjkxNDYyLDE0NS42MTU2MzMgTDE3NC4zNTcyNTQsMTQ1LjYxNTYzMyBMMTc0LjM1NzI1NCwxMjkuMzE4Nzk1IEwxNTYuNzY1NDM1LDExMS43MjY5NzYgTDE0My40Njg3NDYsMTE4LjM3MzA0NyBMOTkuMzY3ODkyOSw3NC4xNzI1MjcxIEw3OC4xMzAyMDQ1LDg1LjU0ODQzNzEgTDc1LjUwMDM5NywxMDcuNTgzMDM3IEw4Mi45NTE1MTg0LDE0Ny45MDY3NTMgTDkzLjc0OTY2NzcsMTU4LjQ4NTc1MiBMODguODI4NzM5OSwxNjUuNDc4NjQ5IEwxNTMuMDc2MDk4LDIzMS4yMzY4MTYgTDE3OS45MTU3MTEsMjMxLjIzNjgxNiBDMTg4LjEzODYxNCwyMzAuOTU0NTYgMTk3LjA0NDI3NiwyMjUuNTY1Njk4IDIwMS4wMTY1MjgsMjE4LjM2MDM1MiBMMjQ0Ljc5NTMzNiwxNDIuMzU2OTM0IEwxODcuMTY3NjA1LDg0LjczMTYwMyBaIiBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iIG9wYWNpdHk9IjAuMDcwMDAwMDAwMyIgbWFzaz0idXJsKCNtYXNrLTIpIj48L3BhdGg+CgkJCQk8cG9seWdvbiBmaWxsPSIjRkZGRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIG1hc2s9InVybCgjbWFzay0yKSIgcG9pbnRzPSI4OC44Mjg3Mzk5IDE2NS40Nzg2NDkgOTkuMzY3ODkyOSAxNTQuOTM5NDk2IDgzLjU2OTEyNDcgMTM5LjE0MDcyOCA4My41NjkxMjQ3IDg5Ljk3MTI5NTMgOTkuMzY3ODkyOSA3NC4xNzI1MjcxIDg4LjgyODczOTkgNjMuNjMzMzc0MSA2Ny43MzA1MTEgODQuNzMxNjAzIDY3LjczMDUxMSAxNDQuMzgwNDIiPjwvcG9seWdvbj4KCQkJCTxjaXJjbGUgZmlsbD0iI0ZGRkZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBtYXNrPSJ1cmwoI21hc2stMikiIGN4PSIxMDUuMTQ1NSIgY3k9IjExNC41NTYwMTIiIHI9IjcuNDcxMDQ0MjMiPjwvY2lyY2xlPgoJCQkJPGNpcmNsZSBmaWxsPSIjRkZGRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIG1hc2s9InVybCgjbWFzay0yKSIgY3g9IjEyNy40OTg4NjUiIGN5PSIxMTQuNTU2MDEyIiByPSI3LjQ3MTA0NDIzIj48L2NpcmNsZT4KCQkJCTxjaXJjbGUgZmlsbD0iI0ZGRkZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBtYXNrPSJ1cmwoI21hc2stMikiIGN4PSIxNDkuODUyMjI5IiBjeT0iMTE0LjU1NjAxMiIgcj0iNy40NzEwNDQyMyI+PC9jaXJjbGU+CgkJCQk8cG9seWdvbiBmaWxsPSIjRkZGRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIG1hc2s9InVybCgjbWFzay0yKSIgcG9pbnRzPSIxNjYuMDY5Mzc2IDYzLjYzMzM3NDEgMTU1LjUzMDIyMyA3NC4xNzI1MjcxIDE3MS4zMjg5OTEgODkuOTcxMjk1MyAxNzEuMzI4OTkxIDEzOS4xNDA3MjggMTU1LjUzMDIyMyAxNTQuOTM5NDk2IDE2Ni4wNjkzNzYgMTY1LjQ3ODY0OSAxODcuMTY3NjA1IDE0NC4zODA0MiAxODcuMTY3NjA1IDg0LjczMTYwMyI+PC9wb2x5Z29uPgoJCTwvZz4KPC9zdmc+Cg==" + 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: From 4b856d7f11aea644e8b0d8e46923cf5897114a58 Mon Sep 17 00:00:00 2001 From: Andrea Cosentino Date: Tue, 17 Feb 2026 10:42:44 +0100 Subject: [PATCH 2/2] Create a Google Vertex AI Sink Kamelet Signed-off-by: Andrea Cosentino --- .../google-vertexai-sink-description.adoc | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 docs/modules/ROOT/partials/google-vertexai-sink-description.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.