Skip to content

Providers

turbomem ships with several built-in embedding and fact-extraction providers. Pick one with a string preset in your config, or pass a custom adapter. This page is a quick reference for the models, dimensions, and credentials each provider needs.

See Configuration for the full config shape and how these presets are wired together.

Embedding providers

Select with embeddings: "openai" | "local" | "voyage" | "google".

Recommended defaults

OpenAI - text-embedding-3-small (1536d) · Voyage - voyage-4 (1024d) · Google - gemini-embedding-001 (3072d, recommend truncating to 768 / 1536)

ProviderModelsDefault dimsSupported dimsAPI key / env var
OpenAI
Preset: "openai"
text-embedding-3-small, text-embedding-3-large, text-embedding-ada-002 (legacy)1536 (3-small)1536 / 3072OPENAI_API_KEY
Local (transformers)
Preset: "local"
Xenova/all-MiniLM-L6-v2, Xenova/bge-small-en-v1.5384384none (runs on-device)
Voyage AI
Preset: "voyage"
voyage-4, voyage-4-large, voyage-4-lite, voyage-code-3, voyage-3.5, voyage-3.5-lite, voyage-3-large1024256 / 512 / 1024 / 2048VOYAGE_API_KEY
Google Gemini
Preset: "google"
gemini-embedding-0013072128–3072 (recommend 768 / 1536 / 3072)GEMINI_API_KEY (or GOOGLE_API_KEY)

Dimensions are fixed per store

The vector column dimension is derived from your embedding adapter at init(). Switching to a model with different dimensions against an existing store throws DimensionMismatchError - start a fresh data directory when you change models.

OpenAI

ts
new TurboMemory({
  embeddings: "openai", // text-embedding-3-small (1536d)
  openai: { apiKey: process.env.OPENAI_API_KEY },
  // ...
});

Local (transformers)

Zero-API-cost, on-device embeddings. Requires the optional @huggingface/transformers package (npm install @huggingface/transformers). The model (~25MB) downloads on first use and is cached for the rest of the process.

ts
new TurboMemory({
  embeddings: "local", // Xenova/all-MiniLM-L6-v2 (384d)
  local: { model: "Xenova/bge-small-en-v1.5" }, // optional
  // ...
});

Voyage AI

Calls https://api.voyageai.com/v1/embeddings over plain fetch (no extra dependency). Defaults to voyage-4 at 1024 dimensions; set dimensions to one of 256 / 512 / 1024 / 2048 to use Matryoshka truncation. Voyage 3.x models remain supported but Voyage 4 is recommended for new projects.

ts
new TurboMemory({
  embeddings: "voyage",
  voyage: {
    apiKey: process.env.VOYAGE_API_KEY,
    model: "voyage-4",
    dimensions: 1024, // optional
  },
  // ...
});

Google Gemini

Calls the Generative Language API over plain fetch. Defaults to gemini-embedding-001 at 3072 dimensions. Vectors are always L2-normalized, which is required when you request a truncated dimensions value (Gemini does not normalize those automatically).

ts
new TurboMemory({
  embeddings: "google",
  google: {
    apiKey: process.env.GEMINI_API_KEY,
    model: "gemini-embedding-001",
    dimensions: 768, // optional (recommend 768 / 1536 / 3072)
  },
  // ...
});

Custom adapter

Pass any object implementing EmbeddingAdapter:

ts
new TurboMemory({ embeddings: myCustomAdapter /* ... */ });

Extraction providers

Select with extraction.provider: "openai" | "anthropic" | "google".

Recommended defaults

OpenAI - gpt-4.1-mini · Anthropic - claude-haiku-4-5 · Google gemini-3.5-flash

ProviderPresetExample modelsAPI key / env var
OpenAI"openai"gpt-4.1-mini, gpt-4.1-nano, gpt-4oOPENAI_API_KEY
Anthropic"anthropic"claude-haiku-4-5, claude-sonnet-4-6, claude-opus-4-8ANTHROPIC_API_KEY
Google Gemini"google"gemini-3.5-flash, gemini-3.1-flash-lite, gemini-2.5-flash, gemini-2.5-proGEMINI_API_KEY (or GOOGLE_API_KEY)
OpenAI-compatible"openai" + baseURLGroq, OpenRouter, Together, Mistral, DeepSeek, Ollama, …provider-specific (passed as extraction.apiKey)

Any OpenAI-compatible endpoint works

Providers that expose an OpenAI-compatible chat completions API (Groq, OpenRouter, Together, Mistral, Ollama, and others) work today via the openai provider with a custom baseURL - no new provider needed.

ts
// OpenAI extraction
extraction: {
  provider: "openai",
  model: "gpt-4.1-mini",
  apiKey: process.env.OPENAI_API_KEY,
}

// Native Google extraction
extraction: {
  provider: "google",
  model: "gemini-3.5-flash",
  apiKey: process.env.GEMINI_API_KEY,
}

// Any OpenAI-compatible endpoint (e.g. Groq)
extraction: {
  provider: "openai",
  model: "llama-3.3-70b-versatile",
  apiKey: process.env.GROQ_API_KEY,
  baseURL: "https://api.groq.com/openai/v1",
}

// Anthropic extraction - needs npm install @anthropic-ai/sdk
extraction: {
  provider: "anthropic",
  model: "claude-haiku-4-5",
  apiKey: process.env.ANTHROPIC_API_KEY,
}

The Anthropic provider needs the optional @anthropic-ai/sdk package (npm install @anthropic-ai/sdk). OpenAI and Google providers use the bundled openai SDK and plain fetch respectively, so they need no extra install.

Extraction is non-fatal: parse or transport failures log a warning and yield [] rather than throwing.