Careeroza
Embedding APIs
Where to Get Real Embeddings
| Option | Type | Notes |
|---|---|---|
Voyage AI (voyageai) | API | Anthropic's recommended embedding provider (Claude has no embeddings endpoint); models for general text, code, finance, law, multilingual |
| sentence-transformers | Open source, local | Free, runs on CPU; e.g. all-MiniLM-L6-v2 (384 dims), multilingual models for Indian languages |
| OpenAI, Google Gemini, Cohere | API | Also offer embedding models |
| Ollama | Local | Serves 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.pyExample 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.pyExample 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.