Built-in Embedders
vectlite.embedders provides ready-to-use embedding factories for the most common providers. Each factory returns a Callable[[str], list[float]] suitable for upsert_text() and search_text().
Every provider lazy-imports its SDK, so none of them are runtime dependencies of vectlite. Install only what you use.
Available providers
| Factory | Install | Source | Cost |
|---|---|---|---|
embedders.openai(model) | pip install openai | API | Paid |
embedders.cohere(model) | pip install cohere | API | Paid |
embedders.voyage(model) | pip install voyageai | API | Paid |
embedders.fastembed(model) | pip install fastembed | Local ONNX | Free |
embedders.sentence_transformer(model) | pip install sentence-transformers | Local PyTorch | Free |
embedders.ollama(model) | (Ollama running locally) | Local HTTP | Free |
Usage
import vectlite
from vectlite import embedders
db = vectlite.open("knowledge.vdb", dimension=1536)
embed = embedders.openai("text-embedding-3-small")
vectlite.upsert_text(db, "doc1", "Auth setup guide for SSO", embed, {"source": "docs"})
results = vectlite.search_text(db, "how to authenticate", embed, k=5)
The dimension you pass to open() must match the model's output dimension.
Provider notes
OpenAI
embed = embedders.openai("text-embedding-3-small") # 1536 dims
embed = embedders.openai("text-embedding-3-large") # 3072 dims
Reads OPENAI_API_KEY from the environment.
Cohere
embed = embedders.cohere("embed-english-v3.0") # 1024 dims
embed = embedders.cohere("embed-multilingual-v3.0")
Reads COHERE_API_KEY from the environment.
Voyage AI
embed = embedders.voyage("voyage-3")
embed = embedders.voyage("voyage-3-large")
Reads VOYAGE_API_KEY from the environment.
FastEmbed (local ONNX, no GPU needed)
embed = embedders.fastembed("BAAI/bge-small-en-v1.5") # 384 dims, fast
embed = embedders.fastembed("BAAI/bge-large-en-v1.5") # 1024 dims, better quality
First call downloads the ONNX model from HuggingFace Hub. Lightweight, no PyTorch dependency.
SentenceTransformers (local PyTorch)
embed = embedders.sentence_transformer("sentence-transformers/all-MiniLM-L6-v2") # 384 dims
embed = embedders.sentence_transformer("BAAI/bge-large-en-v1.5", device="cuda")
Heavier than FastEmbed but unlocks the full sentence-transformers ecosystem (cross-encoders, multilingual, instruction-tuned models).
Ollama (local server)
embed = embedders.ollama("nomic-embed-text")
embed = embedders.ollama("mxbai-embed-large")
Requires a running Ollama server at http://localhost:11434. Useful when you already have Ollama for LLMs and want a single backend.
Picking a provider
| Constraint | Pick |
|---|---|
| Easiest start, low scale | openai |
| Best multilingual | cohere (embed-multilingual-v3.0) |
| Best quality / context | voyage |
| Fully offline, lightweight | fastembed |
| Already on Ollama | ollama |
| Custom or fine-tuned model | sentence_transformer |
Async embedders (Node.js)
Node text helpers accept embed functions that return either a value or a Promise. There is no built-in embedders module on Node — wire up the provider SDK yourself:
const OpenAI = require('openai')
const openai = new OpenAI()
async function embed(text) {
const res = await openai.embeddings.create({
model: 'text-embedding-3-small',
input: text,
})
return res.data[0].embedding
}
await vectlite.upsertText(db, 'doc1', 'Hello world', embed)
const results = await vectlite.searchText(db, 'greeting', embed, { k: 5 })