Embedding APIs

Where to Get Real Embeddings

OptionTypeNotes
Voyage AI (voyageai)APIAnthropic's recommended embedding provider (Claude has no embeddings endpoint); models for general text, code, finance, law, multilingual
sentence-transformersOpen source, localFree, runs on CPU; e.g. all-MiniLM-L6-v2 (384 dims), multilingual models for Indian languages
OpenAI, Google Gemini, CohereAPIAlso offer embedding models
OllamaLocalServes open embedding models such as nomic-embed-text

Note: Always embed documents and queries with the same model. Vectors from different models cannot be compared. If you change the model, re-embed everything.

Voyage AI

import voyageai

vo = voyageai.Client()       # reads VOYAGE_API_KEY from the environment

docs = ["Refunds are processed within 5-7 working days.",
        "Orders above Rs 499 ship free.",
        "You can exchange clothes within 10 days."]
doc_vecs = vo.embed(docs, model="voyage-3.5", input_type="document").embeddings
query_vec = vo.embed(["when do I get my money back?"], model="voyage-3.5", input_type="query").embeddings[0]

print(len(doc_vecs), "vectors of", len(doc_vecs[0]), "dimensions")

Run it

python voyage_embed.py

Example output

3 vectors of 1024 dimensions

sentence-transformers (Local, Free)

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("all-MiniLM-L6-v2")      # downloads ~90 MB once
docs = ["Refunds are processed within 5-7 working days.", "Orders above Rs 499 ship free."]
doc_vecs = model.encode(docs, normalize_embeddings=True)
q = model.encode("when do I get my money back?", normalize_embeddings=True)
print(doc_vecs.shape, (doc_vecs @ q).round(3))

Run it

python local_embed.py

Example output

(2, 384) [0.561 0.087]

Tip: input_type="query" vs "document" (Voyage) adds a small instruction that improves retrieval. Use it when the API supports it.