docling-pipelines

EmbeddingsOperator

Generates dense vector embeddings from document text using a configurable AI provider.


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


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

Sample flow

See sample_flows/use_cases/invoice_processing.json.