EmbeddingsOperator
Generates dense vector embeddings from document text using a configurable AI provider.
- Short Name:
embeddings - Category: Functional
Overview
EmbeddingsOperator converts document text (or pre-chunked content) into float vector
embeddings suitable for similarity search and RAG pipelines. It supports HuggingFace (local
and API), LiteLLM (100+ providers including Ollama, OpenAI, Azure, Cohere, AWS), and WatsonX
through a unified adapter architecture. Long text is automatically split and averaged when it
exceeds the model token limit.
Key Features
- Three provider backends: HuggingFace, LiteLLM, WatsonX
- Local inference (HuggingFace) — no API key, no cost, offline capable, tested to 600+ parallel processes
- Automatic chunking of text that exceeds
token_limit - Per-document error handling — failed documents are logged and skipped
- Configurable output column name (
embeddings_column) - Works with both
content(full text) andchunked_content(pre-chunked) inputs
Operator Configuration
{
"type": "embeddings",
"name": "generate_embeddings",
"config": {
"provider": "litellm",
"provider_config": {
"model_id": "openai/nomic-embed-text",
"api_base": "http://localhost:11434"
},
"embeddings_column": "embeddings",
"doc_column": "content"
},
"depends_on": ["chunk_documents"]
}
Parameters
Common parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
provider |
string | Yes | "litellm" |
Provider: huggingface, litellm, watsonx |
provider_config |
object | Varies | — | Provider-specific config including model_id (see below) |
embeddings_column |
string | No | "embeddings" |
Output column name for generated embeddings |
doc_column |
string | No | "content" |
Input column containing text to embed |
overlap_ratio |
float | No | 0.2 |
Overlap ratio when auto-chunking long text (0.0–0.5) |
token_limit |
integer | No | 8192 |
Max token limit; text beyond this is auto-chunked and averaged |
HuggingFace provider_config
| Field | Type | Default | Description |
|---|---|---|---|
model_id |
string | Required | HuggingFace model name (e.g. sentence-transformers/all-MiniLM-L6-v2) |
use_local |
boolean | true |
Use local inference vs HuggingFace Inference API |
device |
string | "cpu" |
Device for local inference: cpu, cuda, mps |
api_token |
string | — | HuggingFace API token (required when use_local: false) |
batch_size |
integer | 32 |
Texts per batch |
LiteLLM provider_config
| Field | Type | Default | Description |
|---|---|---|---|
model_id |
string | Required | Model with provider prefix (e.g. openai/nomic-embed-text for Ollama) |
api_key |
string | — | Provider API key (or set env var) |
api_base |
string | — | Custom endpoint URL (e.g. http://localhost:11434 for Ollama) |
batch_size |
integer | 32 |
Texts per batch |
timeout |
integer | 120 |
Request timeout in seconds |
WatsonX provider_config
| Field | Type | Default | Description |
|---|---|---|---|
model_id |
string | Required | WatsonX model (e.g. ibm/slate-125m-english-rtrvr) |
api_key |
string | Required | IBM Cloud API key |
api_base |
string | Required | WatsonX endpoint URL |
container_kind |
string | "project" |
"project" or "space" |
container_id |
string | Required | Project or space UUID |
batch_size |
integer | 800 |
Texts per batch |
enable_rate_limiting |
boolean | false |
Enable 7 req/s rate limiting |
Output Columns
All input columns are preserved. The operator appends:
| Column | PyArrow Type | Description |
|---|---|---|
embeddings (or embeddings_column) |
list<float32> |
Dense embedding vector. For chunked input, a list of vectors (one per chunk). |
Examples
Example 1 — Ollama via LiteLLM (local)
{
"type": "embeddings",
"name": "embed",
"config": {
"provider": "litellm",
"provider_config": {
"model_id": "openai/nomic-embed-text",
"api_base": "http://localhost:11434"
}
},
"depends_on": ["chunk"]
}
Example 2 — HuggingFace local inference
{
"type": "embeddings",
"name": "embed",
"config": {
"provider": "huggingface",
"provider_config": {
"model_id": "sentence-transformers/all-MiniLM-L6-v2",
"use_local": true,
"device": "cpu",
"batch_size": 16
}
},
"depends_on": ["chunk"]
}
Example 3 — WatsonX native
{
"type": "embeddings",
"name": "embed",
"config": {
"provider": "watsonx",
"provider_config": {
"model_id": "ibm/slate-125m-english-rtrvr",
"api_key": "${WATSONX_API_KEY}",
"api_base": "${WATSONX_API_BASE}",
"container_id": "${WATSONX_PROJECT_ID}",
"container_kind": "project",
"batch_size": 800,
"enable_rate_limiting": true
}
},
"depends_on": ["chunk"]
}
Example 4 — OpenAI via LiteLLM
{
"type": "embeddings",
"name": "embed",
"config": {
"provider": "litellm",
"provider_config": {
"model_id": "openai/text-embedding-3-small",
"api_key": "${OPENAI_API_KEY}"
}
},
"depends_on": ["chunk"]
}
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
ConfigurationError: Unknown provider 'invalid' |
Typo in provider |
Use one of: huggingface, litellm, watsonx |
ExternalServiceError: Model '…' not found |
Wrong model_id |
Check model name against provider docs |
The api_key client option must be set |
Missing API key | Set OPENAI_API_KEY, HUGGINGFACE_API_KEY, etc. as env vars |
| Ollama connection refused | Ollama not running | Run ollama serve && ollama pull <model> |
chunked_content column not found |
Chunker was skipped | Add ChunkerOperator before this step; a validation warning is also emitted |
| Slow throughput with HuggingFace API | Rate limits | Switch to use_local: true for local inference |
API key best practice
Store keys as environment variables — never in flow files committed to git:
export OPENAI_API_KEY=sk-...
export WATSONX_API_KEY=...
export HUGGINGFACE_API_KEY=hf_...
Architecture
Provider selection guide
| Use case | Recommended provider | Example model |
|---|---|---|
| Local / offline / high-concurrency | HuggingFace (local) | sentence-transformers/all-MiniLM-L6-v2 |
| Privacy-sensitive workloads | HuggingFace (local) | sentence-transformers/all-MiniLM-L6-v2 |
| Ollama (local LLM server) | LiteLLM | openai/nomic-embed-text |
| Production quality | LiteLLM (OpenAI) | openai/text-embedding-3-large |
| Multilingual | LiteLLM (Cohere) | cohere/embed-multilingual-v3.0 |
| IBM enterprise | WatsonX native | ibm/slate-125m-english-rtrvr |
LiteLLM model prefix reference
| Provider | Prefix | Example |
|---|---|---|
| Ollama | openai/ |
openai/nomic-embed-text |
| OpenAI | openai/ |
openai/text-embedding-3-small |
| Azure OpenAI | azure/ |
azure/text-embedding-ada-002 |
| Cohere | cohere/ |
cohere/embed-english-v3.0 |
| AWS Bedrock | bedrock/ |
bedrock/amazon.titan-embed-text-v1 |
| HuggingFace API | huggingface/ |
huggingface/sentence-transformers/all-MiniLM-L6-v2 |
| WatsonX via LiteLLM | watsonx/ |
watsonx/ibm/slate-125m-english-rtrvr |
Typical pipeline position
Ingest → Extract → Chunker → EmbeddingsOperator → VectorDB