Embeddings are the cheapest line item on any agent bill I have seen, and simultaneously the most consequential choice on the list, because unlike every other tool category, you cannot casually switch later. Vectors from different models live in different spaces; change models and you re-embed the entire corpus. So this listicle is short on options and long on tradeoffs, which is how embedding decisions deserve to be treated.
Three providers carry our embedding traffic. Routed prices below are provider list plus 20%, per the pricing docs, and quality scores are our hand-curated catalog ratings.
| Provider | Model | Routed per 1M tokens | Dimensions | Quality score |
|---|---|---|---|---|
| DeepInfra | bge-large | $0.012 | 1024 | 79 |
| OpenAI | text-embedding-3-small | $0.024 | 1536 | 84 |
| Mixedbread | mxbai-embed-large | $0.072 | 1024 | 86 |
1. DeepInfra bge-large: the budget pick with an escape hatch
At $0.012 per million tokens routed, bge-large on DeepInfra is the price floor of the category, and it comes with a property the other two lack: the model is open-weights. If DeepInfra disappeared tomorrow, or you outgrew API pricing, you could serve the exact same model yourself and your existing vectors would still be valid. For a category defined by lock-in, that is a structural advantage no managed model can match.
The 79 quality score reflects a solid, well-understood retriever that is a rung below the newer models on hard retrieval. For straightforward semantic search over reasonably clean text, in my experience the gap rarely shows. At 1024 dimensions, its vectors are also a third smaller than OpenAI’s default, which your vector database bill will notice at scale.
2. OpenAI text-embedding-3-small: the sensible default
Twice the price of bge-large at $0.024 per million routed, still absurdly cheap in absolute terms, and scored 84 in our catalog. The default output is 1536 dimensions, and the API’s most underrated feature is the dimensions parameter: the docs let you request truncated vectors (say 512 dimensions) with modest quality loss, which is a genuinely useful knob when vector storage costs more than embedding does. That is common: storage is forever, embedding is once.
The tradeoff is the obvious one. It is a closed model behind one vendor. There is no self-hosting escape hatch, and if the model is ever deprecated, re-embedding is not optional. I wrote more about that failure mode in the embedding pricing breakdown.
3. Mixedbread mxbai-embed-large: the retrieval specialist
The premium pick at $0.072 per million routed, six times the floor, and our highest-scored embedding model at 86. Mixedbread is a retrieval-focused shop and the model’s reputation on public retrieval leaderboards is strong; I will note that reputation qualitatively rather than quote benchmark numbers our catalog does not contain. It shares the 1024-dimension footprint of bge-large, so you get the top of our quality range without paying for wider vectors downstream.
Six times the cheapest option sounds dramatic until you run the math on real corpora, so let us do that.
The math: price barely matters, the choice still does
Take a genuinely large corpus: 100 million tokens, roughly the text of a decent internal wiki plus years of documents. One-time embedding cost, routed: $1.20 on bge-large, $2.40 on OpenAI 3-small, $7.20 on mxbai-embed-large. The spread between cheapest and best is five dollars. On one hundred million tokens.
This is why I tell people embedding choice is not a pricing decision. The recurring costs live elsewhere: query embeddings scale with traffic but stay tiny, while vector storage and retrieval quality compound daily. A model that retrieves slightly better saves you real money in LLM tokens, because worse retrieval means stuffing more chunks into context to compensate. And a model you have to migrate off costs you the entire corpus embedding again, plus the re-indexing, plus the eval time to confirm nothing regressed.
How I would choose in 2026
If you want maximum optionality, take bge-large on DeepInfra: cheapest, open weights, self-hostable, good enough for most retrieval. If you want the boring reliable middle with a handy dimensions knob, take OpenAI 3-small. If retrieval quality is the product, take mxbai-embed-large and never think about the $5.
Whatever you pick, pin it explicitly. This is the one category where I tell route.tools users not to let cheapest-first routing pick freely per request: set the provider in your saved routing preferences, record the model name next to every vector you store, and treat a model change as the migration it is. Failover still helps you here (a provider outage should not take down your query path), but it should fail over to the same model wherever possible, not to a different vector space.
Side-by-side pricing and scores for every embedding provider we route are on the embedding API comparison page.