
AI EmbeddingStoreRetriever
CertifiedRetrieve context from an embedding store
AI EmbeddingStoreRetriever
Retrieve context from an embedding store
Builds a content retriever over the configured embedding store using a query embedding from embeddingProvider. Results are filtered by maxResults and minScore (0–1). The store is not mutated; ensure the embedding model dimension matches stored vectors.
type: io.kestra.plugin.ai.retriever.EmbeddingStoreRetrieverExamples
Use RAG with AIAgent using an embedding store content retriever. This example ingests documents into a KV embedding store and then uses an AI agent with the EmbeddingStoreRetriever to answer questions grounded in the ingested data.
id: embeddingstoreretriever
type: io.kestra.plugin.ai.retriever.EmbeddingStoreRetriever
id: agent_with_rag
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
googleApiKey: "{{ secret('GEMINI_API_KEY') }}"
embeddings:
type: io.kestra.plugin.ai.embeddings.KestraKVStore
drop: true
fromDocuments:
- content: Paris is the capital of France with a population of over 2.1 million people
- content: The Eiffel Tower is the most famous landmark in Paris at 330 meters tall
- id: agent
type: io.kestra.plugin.ai.agent.AIAgent
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-2.5-flash
googleApiKey: "{{ secret('GEMINI_API_KEY') }}"
contentRetrievers:
- type: io.kestra.plugin.ai.retriever.EmbeddingStoreRetriever
embeddings:
type: io.kestra.plugin.ai.embeddings.KestraKVStore
embeddingProvider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
googleApiKey: "{{ secret('GEMINI_API_KEY') }}"
maxResults: 3
minScore: 0.0
prompt: What is the capital of France and how many people live there?
Use multiple embedding stores simultaneously. This demonstrates the power of the content retriever approach - you can retrieve from multiple embedding stores and other sources in a single task.
id: embeddingstoreretriever
type: io.kestra.plugin.ai.retriever.EmbeddingStoreRetriever
id: multi_store_rag
namespace: company.ai
tasks:
- id: agent
type: io.kestra.plugin.ai.agent.AIAgent
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-2.5-flash
googleApiKey: "{{ secret('GEMINI_API_KEY') }}"
contentRetrievers:
- type: io.kestra.plugin.ai.retriever.EmbeddingStoreRetriever
embeddings:
type: io.kestra.plugin.ai.embeddings.Pinecone
pineconeApiKey: "{{ secret('PINECONE_API_KEY') }}"
index: technical-docs
embeddingProvider:
type: io.kestra.plugin.ai.provider.OpenAI
googleApiKey: "{{ secret('OPENAI_API_KEY') }}"
modelName: text-embedding-3-small
- type: io.kestra.plugin.ai.retriever.EmbeddingStoreRetriever
embeddings:
type: io.kestra.plugin.ai.embeddings.Qdrant
host: localhost
port: 6333
collectionName: business-docs
embeddingProvider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
googleApiKey: "{{ secret('GEMINI_API_KEY') }}"
- type: io.kestra.plugin.ai.retriever.TavilyWebSearch
tavilyApiKey: "{{ secret('TAVILY_API_KEY') }}"
prompt: What are the latest trends in data orchestration?
Properties
embeddingProvider *RequiredNon-dynamic
Embedding model provider
Provider used to generate embeddings for the query. Must support embedding generation.
Use Amazon Bedrock models
Invokes Bedrock-hosted chat/embedding models with AWS credentials. Supports standard AWS region/auth settings; ensure model IDs match your Bedrock region and account access.
Chat completion with OpenAI
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.AmazonBedrock
accessKeyId: "{{ secret('AWS_ACCESS_KEY') }}"
secretAccessKey: "{{ secret('AWS_SECRET_KEY') }}"
modelName: anthropic.claude-3-sonnet-20240229-v1:0
thinkingBudgetTokens: 1024
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
AWS Access Key ID
Model name
AWS Secret Access Key
Base URL
Custom base URL to override the default endpoint (useful for local tests, WireMock, or enterprise gateways).
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
COHERECOHERETITANAmazon Bedrock Embedding Model Type
io.kestra.plugin.ai.provider.AmazonBedrockio.kestra.plugin.langchain4j.provider.AmazonBedrockUse Anthropic Claude models
Provides Claude chat models only; embeddings and images are unsupported. Enforces Anthropic rules (no seed/responseFormat). Thinking mode requires max_tokens > thinking.budget_tokens; set API key and optional base URL.
Chat completion with Anthropic
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.Anthropic
apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
modelName: claude-3-haiku-20240307
configuration:
thinkingEnabled: true
thinkingBudgetTokens: 1024
returnThinking: false
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
API Key
Model name
Base URL
Custom base URL to override the default endpoint (useful for local tests, WireMock, or enterprise gateways).
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
Maximum Tokens
Specifies the maximum number of tokens that the model is allowed to generate in its response.
io.kestra.plugin.ai.provider.Anthropicio.kestra.plugin.langchain4j.provider.AnthropicUse Azure OpenAI deployments
Targets Azure-hosted OpenAI models via the resource endpoint and deployment name. Supports API key or AAD client credentials; set apiVersion when required by the deployment.
Chat completion with Azure OpenAI
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.AzureOpenAI
apiKey: "{{ secret('AZURE_API_KEY') }}"
endpoint: https://your-resource.openai.azure.com/
modelName: anthropic.claude-3-sonnet-20240229-v1:0
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
API endpoint
The Azure OpenAI endpoint in the format: https://{resource}.openai.azure.com/
Model name
API Key
Base URL
Custom base URL to override the default endpoint (useful for local tests, WireMock, or enterprise gateways).
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client ID
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
Client secret
API version
Tenant ID
io.kestra.plugin.ai.provider.AzureOpenAIio.kestra.plugin.langchain4j.provider.AzureOpenAIUse DashScope (Qwen) models
Calls Alibaba Cloud DashScope for Qwen chat/embeddings/images with API key. Some params (timeouts, retries, stop, maxTokens) map directly to DashScope limits.
Chat completion with DashScope (Qwen)
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.DashScope
apiKey: "{{ secret('DASHSCOPE_API_KEY') }}"
modelName: qwen-plus
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
API Key
Model name
https://dashscope-intl.aliyuncs.com/api/v1API base URL
If you use a model in the China (Beijing) region, you need to replace the URL with: https://dashscope.aliyuncs.com/api/v1,
otherwise use the Singapore region of: "https://dashscope-intl.aliyuncs.com/api/v1.
The default value is computed based on the system timezone.
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
Whether the model uses Internet search results for reference when generating text or not
The maximum number of tokens returned by this request
Repetition in a continuous sequence during model generation
Increasing repetition_penalty reduces the repetition in model generation,
1.0 means no penalty. Value range: (0, +inf)
Use DeepSeek models
Connects to DeepSeek’s OpenAI-compatible endpoint with API key and model name for chat/embedding tasks.
Chat completion with DeepSeek
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.DeepSeek
apiKey: "{{ secret('DEEPSEEK_API_KEY') }}"
modelName: deepseek-chat
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
API Key
Model name
https://api.deepseek.com/v1API base URL
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
io.kestra.plugin.ai.provider.DeepSeekio.kestra.plugin.langchain4j.provider.DeepSeekUse GitHub Models via Azure AI Inference
Calls GitHub Models through the Azure AI Inference API with a GitHub token. Supports chat and embeddings; response format options map to Azure AI Inference capabilities.
Chat completion with GitHub Models
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.GitHubModels
gitHubToken: "{{ secret('GITHUB_TOKEN') }}"
modelName: gpt-4o-mini
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely.
- type: USER
content: "{{ inputs.prompt }}"
GitHub Token
Personal Access Token (PAT) used to access GitHub Models.
Model name
Base URL
Custom base URL to override the default endpoint (useful for local tests, WireMock, or enterprise gateways).
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
Use Google Gemini models
Supports Gemini chat, embeddings, and images. Tools do not support JSON Schema anyOf, and tools cannot be combined with responseFormat; configure either but not both.
Thinking models (e.g. gemini-3.5-flash) attach a thought_signature to every function-call part. This provider automatically captures those signatures (returnThinking defaults to true) and re-attaches them to the conversation history for every follow-up request (sendThinking is always enabled), preventing the 400 INVALID_ARGUMENT – Function call is missing a thought_signature error.
In addition, thinking is disabled by default (thinkingBudget = 0) to reduce token usage, unless thinkingEnabled: true or thinkingBudgetTokens > 0 is explicitly set.
Chat completion with Google Gemini
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
apiKey: "{{ secret('GOOGLE_API_KEY') }}"
modelName: gemini-2.5-flash
configuration:
thinkingEnabled: true
thinkingBudgetTokens: 1024
returnThinking: true
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
Chat completion with Google Gemini with a local base URL + PEM certificates
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-2.5-flash
clientPem: "{{ secret('CLIENT_PEM') }}"
caPem: "{{ secret('CA_PEM') }}"
baseUrl: "https://internal.gemini.company.com/endpoint"
configuration:
thinkingEnabled: true
thinkingBudgetTokens: 1024
returnThinking: true
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
Model name
API Key
Required unless certificate-based authentication is configured with clientPem (optionally with caPem).
Base URL
Custom base URL to override the default endpoint (useful for local tests, WireMock, or enterprise gateways).
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
The configuration for embeddingModel
io.kestra.plugin.ai.provider.GoogleGemini-EmbeddingModelConfiguration
Maximum number of retries for failed requests
Used to specify output embedding size
If set, output embeddings will be truncated to the size specified.
RETRIEVAL_QUERYRETRIEVAL_DOCUMENTSEMANTIC_SIMILARITYCLASSIFICATIONCLUSTERINGQUESTION_ANSWERINGFACT_VERIFICATIONUsed to convey intended downstream application to help the model produce better embeddings.
Timeout in seconds for each request
The headline or name of the document (passed to the model as metadata).
If set, this help improving retrieval quality by providing context for a document.
io.kestra.plugin.ai.provider.GoogleGeminiio.kestra.plugin.langchain4j.provider.GoogleGeminiUse Google Vertex AI models
Calls Vertex AI Gemini chat, embeddings, or images using project, location, and endpoint settings. Requires GCP credentials; ensure response formats are supported by the selected model/region.
Chat completion with Google Vertex AI
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.GoogleVertexAI
endpoint: your-vertex-ai-endpoint
location: your-google-cloud-region
project: your-google-cloud-project-id
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
Endpoint URL
Project location
Model name
Project ID
Base URL
Custom base URL to override the default endpoint (useful for local tests, WireMock, or enterprise gateways).
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
io.kestra.plugin.ai.provider.GoogleVertexAIio.kestra.plugin.langchain4j.provider.GoogleVertexAIUse Hugging Face Inference endpoints
Routes requests to Hugging Face Inference Endpoints via the OpenAI-compatible gateway (default router.huggingface.co). Requires an API token and deployment model name.
Chat completion with HuggingFace
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.HuggingFace
apiKey: "{{ secret('HUGGING_FACE_API_KEY') }}"
modelName: HuggingFaceTB/SmolLM3-3B:hf-inference
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
API Key
Model name
https://router.huggingface.co/v1API base URL
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
Use LocalAI OpenAI-compatible server
Targets a self-hosted LocalAI instance via its OpenAI-compatible API for chat/embeddings/images. Set baseUrl if your server is not on the default.
Chat completion with LocalAI
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.LocalAI
modelName: gemma-3-1b-it
baseUrl: http://localhost:8080/v1
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
API base URL
Model name
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
io.kestra.plugin.ai.provider.LocalAIio.kestra.plugin.langchain4j.provider.LocalAIUse Mistral models
Calls Mistral chat/embedding APIs with an API key. topK is not supported; chat configuration must respect model limits.
Chat completion with Mistral AI
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.MistralAI
apiKey: "{{ secret('MISTRAL_API_KEY') }}"
modelName: mistral:7b
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
API Key
Model name
Base URL
Custom base URL to override the default endpoint (useful for local tests, WireMock, or enterprise gateways).
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
io.kestra.plugin.ai.provider.MistralAIio.kestra.plugin.langchain4j.provider.MistralAIUse OCI Generative AI models
Calls Oracle Cloud GenAI chat/embedding models with compartment OCID and region. Auth is handled via OCI SDK provider (config file or instance principals). Ensure the model is permitted in the chosen compartment.
Chat completion with OciGenAI
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.OciGenAI
region: "{{ secret('OCI_GENAI_MODEL_REGION_PROPERTY') }}"
compartmentId: "{{ secret('OCI_GENAI_COMPARTMENT_ID_PROPERTY') }}"
authProvider: "{{ secret('OCI_GENAI_CONFIG_PROFILE_PROPERTY') }}"
modelName: oracle.chat.gpt-3.5
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
OCID of OCI Compartment with the model
Model name
OCI Region to connect the client to
OCI SDK Authentication provider
Base URL
Custom base URL to override the default endpoint (useful for local tests, WireMock, or enterprise gateways).
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
Use local Ollama models
Calls an Ollama server for chat/embeddings using the given endpoint and model name. Ideal for self-hosted/local models; ensure the Ollama daemon is reachable.
Chat completion with Ollama
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.Ollama
modelName: llama3
endpoint: http://localhost:11434
configuration:
thinkingEnabled: true
returnThinking: true
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
Model endpoint
Model name
Base URL
Custom base URL to override the default endpoint (useful for local tests, WireMock, or enterprise gateways).
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
io.kestra.plugin.ai.provider.Ollamaio.kestra.plugin.langchain4j.provider.OllamaUse OpenAI models
Connects to OpenAI-compatible endpoints (defaults to api.openai.com) for chat, embeddings, or images. Requires API key; override baseUrl for Azure-compatible or proxy setups.
Chat completion with OpenAI
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.OpenAI
apiKey: "{{ secret('OPENAI_API_KEY') }}"
modelName: gpt-5-mini
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
API Key
Model name
https://api.openai.com/v1API base URL
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
io.kestra.plugin.ai.provider.OpenAIio.kestra.plugin.langchain4j.provider.OpenAIUse OpenRouter models
Routes requests through OpenRouter’s multi-model API using your API key. Supports chat/embedding/image models exposed by OpenRouter; honor provider-specific safety/usage limits.
Chat completion with OpenRouter
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.OpenRouter
apiKey: "{{ secret('OPENROUTER_API_KEY') }}"
baseUrl: https://openrouter.ai/api/v1
modelName: x-ai/grok-beta
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
API Key
Model name
Base URL
Custom base URL to override the default endpoint (useful for local tests, WireMock, or enterprise gateways).
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
io.kestra.plugin.ai.provider.OpenRouterio.kestra.plugin.langchain4j.provider.OpenRouterUse IBM watsonx.ai models
Calls IBM watsonx.ai chat/embedding endpoints with API key and project ID. Ensure the selected model ID is available in the configured project.
Chat completion with Watsonx AI
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.completion.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.WatsonxAI
apiKey: "{{ secret('WATSONX_API_KEY') }}"
projectId: "{{ secret('WATSONX_PROJECT_ID') }}"
modelName: ibm/granite-3-3-8b-instruct
baseUrl : "https://api.eu-de.dataplatform.cloud.ibm.com/wx"
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
API Key
Model name
Project Id
Base URL
Custom base URL to override the default endpoint (useful for local tests, WireMock, or enterprise gateways).
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
Use Cloudflare Workers AI models
Invokes Workers AI chat, embedding, and image models using account ID and API key. Ensure the selected model is available in your account/region.
Chat completion with WorkersAI
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.WorkersAI
accountId: "{{ secret('WORKERS_AI_ACCOUNT_ID') }}"
apiKey: "{{ secret('WORKERS_AI_API_KEY') }}"
modelName: @cf/meta/llama-2-7b-chat-fp16
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
Account Identifier
Unique identifier assigned to an account
API Key
Model name
Base URL
Custom base URL to override the default endpoint (useful for local tests, WireMock, or enterprise gateways).
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
io.kestra.plugin.ai.provider.WorkersAIio.kestra.plugin.langchain4j.provider.WorkersAIUse ZhiPu AI models
Calls ZhiPu’s OpenAI-compatible chat/embedding/image APIs with API key and model name. Supports stop tokens, retry count, and max tokens per request.
Chat completion with ZhiPu AI
id: chat_completion
namespace: company.ai
inputs:
- id: prompt
type: STRING
tasks:
- id: chat_completion
type: io.kestra.plugin.ai.ChatCompletion
provider:
type: io.kestra.plugin.ai.provider.ZhiPuAI
apiKey: "{{ secret('ZHIPU_API_KEY') }}"
modelName: glm-4.5-flash
messages:
- type: SYSTEM
content: You are a helpful assistant, answer concisely, avoid overly casual language or unnecessary verbosity.
- type: USER
content: "{{ inputs.prompt }}"
API Key
Model name
https://open.bigmodel.cn/API base URL
The base URL for ZhiPu API (defaults to https://open.bigmodel.cn/)
CA PEM certificate content
CA certificate as text, used to verify SSL/TLS connections when using custom endpoints.
Client PEM certificate content
PEM client certificate as text, used to authenticate the connection to enterprise AI endpoints.
The maximum retry times to request
The maximum number of tokens returned by this request
With the stop parameter, the model will automatically stop generating text when it is about to contain the specified string or token_id
embeddings *RequiredNon-dynamic
Embedding store
The embedding store to retrieve relevant content from
Store embeddings in Chroma
Connects to a Chroma HTTP instance using cosine distance; targets the given collection and drops it when drop=true.
Ingest documents into a Chroma embedding store
id: document_ingestion
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
apiKey: "{{ secret('GEMINI_API_KEY') }}"
embeddings:
type: io.kestra.plugin.ai.embeddings.Chroma
baseUrl: http://localhost:8000
collectionName: embeddings
fromExternalURLs:
- https://raw.githubusercontent.com/kestra-io/docs/refs/heads/main/content/blogs/release-0-24.md
The database base URL
The collection name
io.kestra.plugin.ai.embeddings.Chromaio.kestra.plugin.langchain4j.embeddings.ChromaStore embeddings in Elasticsearch
Targets an Elasticsearch 8.15+ cluster using the provided hosts/index; when drop=true the index is deleted. Supports basic auth, custom headers, path prefix, and trust-all TLS for self-signed certs.
Ingest documents into an Elasticsearch embedding store (requires Elasticsearch 8.15+)
id: document_ingestion
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
apiKey: "{{ secret('GEMINI_API_KEY') }}"
embeddings:
type: io.kestra.plugin.ai.embeddings.Elasticsearch
connection:
hosts:
- http://localhost:9200
fromExternalURLs:
- https://raw.githubusercontent.com/kestra-io/docs/refs/heads/main/content/blogs/release-0-24.md
io.kestra.plugin.ai.embeddings.Elasticsearch-ElasticsearchConnection
1List of HTTP Elasticsearch servers
Must be a URI like https://example.com: 9200 with scheme and port
Basic authorization configuration
io.kestra.plugin.ai.embeddings.Elasticsearch-ElasticsearchConnection-BasicAuth
Basic authorization password
Basic authorization username
List of HTTP headers to be sent with every request
Each item is a key: value string, e.g., Authorization: Token XYZ
Path prefix for all HTTP requests
If set to /my/path, each client request becomes /my/path/ + endpoint. Useful when Elasticsearch is behind a proxy providing a base path; do not use otherwise.
Treat responses with deprecation warnings as failures
8Target Elasticsearch server major version
Major version used for compatible-with media-type headers (Accept and Content-Type). The bundled elasticsearch-java 9.x client defaults to compatible-with=9, which Elasticsearch 8 rejects. Set to 8 when targeting an Elasticsearch 8 cluster (the default), or 9 for Elasticsearch 9.
Trust all SSL CA certificates
Use this if the server uses a self-signed SSL certificate. WARNING: enabling this disables both certificate chain validation and hostname verification, exposing connections to man-in-the-middle attacks. Prefer supplying a custom CA certificate instead. Use only in trusted, controlled environments.
The name of the index to store embeddings
io.kestra.plugin.ai.embeddings.Elasticsearchio.kestra.plugin.langchain4j.embeddings.ElasticsearchPrototype embeddings in Kestra KV
Stores embeddings in-memory and persists them to Kestra namespace KV on completion. Suitable for small demos; not scalable. drop=true discards any previously saved KV snapshot.
Ingest documents into a KV embedding store.\nWARNING: the KestraKVStore embeddings are for quick prototyping only; since they are stored in a KV store and loaded into memory, this won't scale with large numbers of documents.
id: document_ingestion
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
apiKey: "{{ secret('GEMINI_API_KEY') }}"
embeddings:
type: io.kestra.plugin.ai.embeddings.KestraKVStore
drop: true
fromExternalURLs:
- https://raw.githubusercontent.com/kestra-io/docs/refs/heads/main/content/blogs/release-0-24.md
{{ flow.id }}-embedding-storeThe name of the KV pair to use
io.kestra.plugin.ai.embeddings.KestraKVStoreio.kestra.plugin.langchain4j.embeddings.KestraKVStoreStore embeddings in MariaDB
Persists embeddings to a MariaDB table; create/drop behavior is controlled by createTable and drop. Metadata defaults to COMBINED_JSON unless COLUMN_PER_KEY is configured with column/index definitions. Requires valid JDBC URL and credentials.
Ingest documents into a MariaDB embedding store
id: document_ingestion
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
apiKey: "{{ secret('GEMINI_API_KEY') }}"
embeddings:
type: io.kestra.plugin.ai.embeddings.MariaDB
username: "{{ secret('MARIADB_USERNAME') }}"
password: "{{ secret('MARIADB_PASSWORD') }}"
databaseUrl: "{{ secret('MARIADB_DATABASE_URL') }}"
tableName: embeddings
fieldName: id
fromExternalURLs:
- https://raw.githubusercontent.com/kestra-io/docs/refs/heads/main/content/blogs/release-0-24.md
Whether to create the table if it doesn't exist
Database URL of the MariaDB database (e.g., jdbc: mariadb://host: port/dbname)
Name of the column used as the unique ID in the database
The password
Name of the table where embeddings will be stored
The username
Metadata Column Definitions
List of SQL column definitions for metadata fields (e.g., 'text TEXT', 'source TEXT'). Required only when using COLUMN_PER_KEY storage mode.
Metadata Index Definitions
List of SQL index definitions for metadata columns (e.g., 'INDEX idx_text (text)'). Used only with COLUMN_PER_KEY storage mode.
COLUMN_PER_KEYMetadata Storage Mode
Determines how metadata is stored: - COLUMN_PER_KEY: Use individual columns for each metadata field (requires columnDefinitions and indexes). - COMBINED_JSON (default): Store metadata as a JSON object in a single column. If columnDefinitions and indexes are provided, COLUMN_PER_KEY must be used.
Store embeddings in Milvus
Connects via URI or host/port with token-based auth; creates the target collection if missing. Metric/index/consistency options map to Milvus settings; drop=true clears the collection. Use defaults for host=localhost, port=19530, secure gRPC unless overridden.
Ingest documents into a Milvus embedding store
id: document_ingestion
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
apiKey: "{{ secret('GEMINI_API_KEY') }}"
embeddings:
type: io.kestra.plugin.ai.embeddings.Milvus
# Use either `uri` or `host`/`port`:
# For gRPC (typical): milvus://localhost:19530
# For HTTP: http://localhost:9091
uri: "http://localhost:19200"
token: "{{ secret('MILVUS_TOKEN') }}" # omit if auth is disabled
collectionName: embeddings
fromExternalURLs:
- https://raw.githubusercontent.com/kestra-io/docs/refs/heads/main/content/blogs/release-0-24.md
Token
Milvus auth token. Required if authentication is enabled; omit for local deployments without auth.
Auto flush on delete
If true, flush after delete operations.
Auto flush on insert
If true, flush after insert operations. Setting it to false can improve throughput.
Collection name
Target collection. Created automatically if it does not exist. Default: "default".
Consistency level
Read/write consistency level. Common values include STRONG, BOUNDED, or EVENTUALLY (depends on client/version).
Database name
Logical database to use. If not provided, the default database is used.
Host
Milvus host name (used when uri is not set). Default: "localhost".
ID field name
Field name for document IDs. Default depends on collection schema.
Index type
Vector index type (e.g., IVF_FLAT, IVF_SQ8, HNSW). Depends on Milvus deployment and dataset.
Metadata field name
Field name for metadata. Default depends on collection schema.
Metric type
Similarity metric (e.g., L2, IP, COSINE). Should match the embedding provider’s expected metric.
Password
Required when authentication/TLS is enabled. See https://milvus.io/docs/authenticate.md
Port
Milvus port (used when uri is not set). Typical: 19530 (gRPC) or 9091 (HTTP). Default: 19530.
Retrieve embeddings on search
If true, return stored embeddings along with matches. Default: false.
Text field name
Field name for original text. Default depends on collection schema.
io.kestra.plugin.ai.embeddings.Milvusio.kestra.plugin.langchain4j.embeddings.MilvusURI
Connection URI. Use either uri OR host/port (not both).
Examples:
- gRPC (typical): "milvus://host: 19530"
- HTTP: "http://host: 9091"
Username
Required when authentication/TLS is enabled. See https://milvus.io/docs/authenticate.md
Vector field name
Field name for the embedding vector. Must match the index definition and embedding dimensionality.
Store embeddings in MongoDB Atlas
Uses MongoDB Atlas vector search with the provided collection/index; can optionally create the index and wait for readiness (up to 1 minute). Supply scheme/host and credentials; drop=true removes stored vectors.
Ingest documents into a MongoDB Atlas embedding store
id: document_ingestion
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
apiKey: "{{ secret('GEMINI_API_KEY') }}"
embeddings:
type: io.kestra.plugin.ai.embeddings.MongoDBAtlas
username: "{{ secret('MONGODB_ATLAS_USERNAME') }}"
password: "{{ secret('MONGODB_ATLAS_PASSWORD') }}"
host: "{{ secret('MONGODB_ATLAS_HOST') }}"
database: "{{ secret('MONGODB_ATLAS_DATABASE') }}"
collectionName: embeddings
indexName: embeddings
fromExternalURLs:
- https://raw.githubusercontent.com/kestra-io/docs/refs/heads/main/content/blogs/release-0-24.md
The collection name
The host
The index name
The scheme (e.g., mongodb+srv)
Create the index
The database
The metadata field names
The connection string options
The password
io.kestra.plugin.ai.embeddings.MongoDBAtlasio.kestra.plugin.langchain4j.embeddings.MongoDBAtlasThe username
Store embeddings with pgvector
Uses the PostgreSQL pgvector extension to persist embeddings in the given table. drop=true recreates the table; optional IVF index (useIndex) defaults to false. Ensure pgvector extension is installed and the user can create tables/indexes.
Ingest documents into a PGVector embedding store
id: document_ingestion
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
apiKey: "{{ secret('GEMINI_API_KEY') }}"
embeddings:
type: io.kestra.plugin.ai.embeddings.PGVector
host: localhost
port: 5432
user: "{{ secret('POSTGRES_USER') }}"
password: "{{ secret('POSTGRES_PASSWORD') }}"
database: postgres
table: embeddings
fromExternalURLs:
- https://raw.githubusercontent.com/kestra-io/docs/refs/heads/main/content/blogs/release-0-24.md
The database name
The database server host
The database password
The database server port
The table to store embeddings in
The database user
io.kestra.plugin.ai.embeddings.PGVectorio.kestra.plugin.langchain4j.embeddings.PGVectorfalseWhether to use use an IVFFlat index
An IVFFlat index divides vectors into lists, and then searches a subset of those lists closest to the query vector. It has faster build times and uses less memory than HNSW but has lower query performance (in terms of speed-recall tradeoff).
Store embeddings in Pinecone
Creates or connects to a serverless Pinecone index in the given cloud/region; namespace defaults to Pinecone’s default. Requires an API key; drop=true clears the index contents.
Ingest documents into a Pinecone embedding store
id: document_ingestion
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
apiKey: "{{ secret('GEMINI_API_KEY') }}"
embeddings:
type: io.kestra.plugin.ai.embeddings.Pinecone
apiKey: "{{ secret('PINECONE_API_KEY') }}"
cloud: AWS
region: us-east-1
index: embeddings
fromExternalURLs:
- https://raw.githubusercontent.com/kestra-io/docs/refs/heads/main/content/blogs/release-0-24.md
The API key
The cloud provider
The index
The cloud provider region
The namespace (default will be used if not provided)
io.kestra.plugin.ai.embeddings.Pineconeio.kestra.plugin.langchain4j.embeddings.PineconeStore embeddings in Qdrant
Uses the Qdrant gRPC client with API key, host, and port. Targets the specified collection; drop=true removes its contents. Distance metric follows the Qdrant collection defaults.
Ingest documents into a Qdrant embedding store
id: document_ingestion
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
apiKey: "{{ secret('GEMINI_API_KEY') }}"
embeddings:
type: io.kestra.plugin.ai.embeddings.Qdrant
apiKey: "{{ secret('QDRANT_API_KEY') }}"
host: localhost
port: 6334
collectionName: embeddings
fromExternalURLs:
- https://raw.githubusercontent.com/kestra-io/docs/refs/heads/main/content/blogs/release-0-24.md
The API key
The collection name
The database server host
The database server port
io.kestra.plugin.ai.embeddings.Qdrantio.kestra.plugin.langchain4j.embeddings.QdrantStore embeddings in Redis
Backs an embedding index with Redis (jedis). Uses indexName (defaults to embedding-index); drop=true clears stored vectors. Ensure Redis deployment supports vector search modules for production use.
Ingest documents into a Redis embedding store
id: document_ingestion
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
apiKey: my_api_key
embeddings:
type: io.kestra.plugin.ai.embeddings.Redis
host: localhost
port: 6379
indexName: embeddings
fromExternalURLs:
- https://raw.githubusercontent.com/kestra-io/docs/refs/heads/main/content/blogs/release-0-24.md
The database server host
The database server port
embedding-indexThe index name
Store embeddings in Alibaba Tablestore
Connects to Tablestore using access keys and writes embeddings with cosine distance. Uses the configured instance/endpoint; metadata schemas are optional. drop=true is not supported—manage cleanup in Tablestore.
Ingest documents into a Tablestore embedding store
id: document_ingestion
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
apiKey: "{{ secret('GEMINI_API_KEY') }}"
embeddings:
type: io.kestra.plugin.ai.embeddings.Tablestore
endpoint: "{{ secret('TABLESTORE_ENDPOINT') }}"
instanceName: "{{ secret('TABLESTORE_INSTANCE_NAME') }}"
accessKeyId: "{{ secret('TABLESTORE_ACCESS_KEY_ID') }}"
accessKeySecret: "{{ secret('TABLESTORE_ACCESS_KEY_SECRET') }}"
fromExternalURLs:
- https://raw.githubusercontent.com/kestra-io/docs/refs/heads/main/content/blogs/release-0-24.md
Access Key ID
The access key ID used for authentication with the database.
Access Key Secret
The access key secret used for authentication with the database.
Endpoint URL
The base URL for the Tablestore database endpoint.
Instance Name
The name of the Tablestore database instance.
Metadata Schema List
Optional list of metadata field schemas for the collection.
com.alicloud.openservices.tablestore.model.search.FieldSchema
SingleWordMaxWordMinWordSplitFuzzycom.alicloud.openservices.tablestore.model.search.analysis.AnalyzerParameter
LONGDOUBLEBOOLEANKEYWORDTEXTNESTEDGEO_POINTDATEVECTORFUZZY_KEYWORDIPJSONUNKNOWNDOCSFREQSPOSITIONSOFFSETSFLATTENNESTEDcom.alicloud.openservices.tablestore.model.search.FieldSchema
SingleWordMaxWordMinWordSplitFuzzyLONGDOUBLEBOOLEANKEYWORDTEXTNESTEDGEO_POINTDATEVECTORFUZZY_KEYWORDIPJSONUNKNOWNDOCSFREQSPOSITIONSOFFSETSFLATTENNESTEDcom.alicloud.openservices.tablestore.model.search.vector.VectorOptions
EUCLIDEANCOSINEDOT_PRODUCTStore embeddings in Weaviate
Connects to a Weaviate cluster (HTTP + optional gRPC) using the given host/scheme. Defaults: objectClass "Default", avoidDups true, consistency QUORUM. Provide API key when auth is enabled; drop=true clears the class contents.
Ingest documents into a Weaviate embedding store
id: document_ingestion
namespace: company.ai
tasks:
- id: ingest
type: io.kestra.plugin.ai.rag.IngestDocument
provider:
type: io.kestra.plugin.ai.provider.GoogleGemini
modelName: gemini-embedding-001
apiKey: "{{ secret('GEMINI_API_KEY') }}"
embeddings:
type: io.kestra.plugin.ai.embeddings.Weaviate
apiKey: "{{ secret('WEAVIATE_API_KEY') }}" # omit for local/no-auth
scheme: https # http | https
host: your-cluster-id.weaviate.network # no protocol
# port: 443 # optional; usually omit
drop: true
fromExternalURLs:
- https://raw.githubusercontent.com/kestra-io/docs/refs/heads/main/content/blogs/release-0-24.md
API key
Weaviate API key. Omit for local deployments without auth.
Host
Cluster host name without protocol, e.g., "abc123.weaviate.network".
Avoid duplicates
If true (default), a hash-based ID is derived from each text segment to prevent duplicates. If false, a random ID is used.
ONEQUORUMALLConsistency level
Write consistency: ONE, QUORUM (default), or ALL.
gRPC port
Port for gRPC if enabled (e.g., 50051).
Metadata field name
Field used to store metadata. Defaults to "_metadata" if not set.
Metadata keys
The list of metadata keys to store - if not provided, it will default to an empty list.
Object class
Weaviate class to store objects in (must start with an uppercase letter). Defaults to "Default" if not set.
Port
Optional port (e.g., 443 for https, 80 for http). Leave unset to use provider defaults.
Scheme
Cluster scheme: "https" (recommended) or "http".
Secure gRPC
Whether the gRPC connection is secured (TLS).
io.kestra.plugin.ai.embeddings.Weaviateio.kestra.plugin.langchain4j.embeddings.WeaviateUse gRPC for batch inserts
If true, use gRPC for batch inserts. HTTP remains required for search operations.
maxResults integerstring
3Maximum number of results to return from the embedding store
minScore numberstring
0.0Minimum similarity score
Only results with a similarity score ≥ minScore are returned. Range: 0.0 to 1.0 inclusive.
Metrics
ai.embedding.store.calls counter
callsNumber of times an embedding store is used, tagged by store class name
ai.provider.calls counter
callsNumber of times an embedding model is obtained from a provider, tagged by provider class name