Choosing an embedding model is one of the first decisions you make when building a retrieval-augmented generation system, and it is one of the hardest to reverse. The model you pick determines your vector dimensions, your retrieval quality ceiling, your latency profile, and your cost structure. Four years ago, there were two serious options. Now there are dozens, and the differences are real.
The central question is not “which model scores highest on MTEB” but “which model fits my data, my query patterns, and my operational constraints.” A model that tops leaderboards on academic benchmarks may underperform on your domain-specific text because benchmarks reward generality while production rewards specificity.
The contenders
OpenAI’s text-embedding-3-large is the default choice for teams that want a managed, reliable API with predictable pricing. Cohere’s Embed v4 offers multilingual strength and a matryoshka representation option that lets you trade dimension count for speed without re-embedding. Voyage AI (now part of Salesforce) built Voyage-3-large specifically for code and enterprise search. On the open-source side, models like BGE-M3, E5-Mistral, and Nomic Embed give you full control at the cost of operational responsibility.
Each of these occupies a different point on the capability-vs-control spectrum. OpenAI and Cohere are API-first: you send text, you get vectors, you pay per token. Voyage sits between managed and customizable. Open-source models require you to host inference, but they give you ownership of the entire pipeline.
What actually matters in production
Retrieval quality is the headline metric, but it is not the only one. Four dimensions matter equally in production systems.
Dimensionality and its downstream effects. OpenAI’s text-embedding-3-large produces 3072-dimensional vectors by default, but supports truncation to 256 or 1024 dimensions. Cohere’s matryoshka embeddings are designed for this truncation from the start, meaning the model was trained to produce useful representations at every dimension level. Open-source models like BGE-M3 produce 1024 dimensions. Your choice here directly affects storage costs, index size, and query latency in your vector database. Doubling your dimensions roughly doubles your index memory footprint.
Latency and throughput. API-based models add network round-trip latency on top of inference time. For a single query, this is 50-200ms depending on region and provider load. For batch ingestion of thousands of documents, API rate limits become the bottleneck. Self-hosted models eliminate the network hop and give you control over batching, GPU allocation, and concurrency, but you inherit the operational burden of keeping the inference service healthy.
Domain specialization. General-purpose models work reasonably well across domains. Specialized models work significantly better in narrow domains. Voyage-3-large was trained with a focus on code retrieval, and it shows measurable improvements on code search benchmarks compared to general-purpose alternatives. If your corpus is primarily technical documentation, code, or legal text, a specialized model can improve recall by 10-20% on domain-specific queries. The trade-off is that specialized models may underperform on out-of-domain text.
Multilingual coverage. If your system needs to handle queries and documents in multiple languages, model choice narrows quickly. Cohere Embed v4 supports over 100 languages with strong cross-lingual retrieval. BGE-M3 supports over 100 languages and was specifically designed for multilingual dense retrieval. OpenAI’s models cover major European and Asian languages but show quality degradation on lower-resource languages.
Cost structure comparison
API pricing is straightforward to calculate: multiply your token volume by the per-token price. OpenAI charges $0.13 per million tokens for text-embedding-3-large. Cohere Embed v4 is priced similarly. At moderate volumes (100 million tokens per month), you are looking at $13/month — cheap by any measure.
The cost story changes at scale. If you are embedding billions of tokens for a large document corpus, API costs accumulate, and more importantly, API rate limits impose time constraints. A billion tokens at OpenAI’s rate limits could take days to embed. Self-hosted models amortize across your existing GPU infrastructure. If you already have inference GPUs (because you are running LLMs), adding an embedding model to the same hardware has near-zero marginal cost.
The hidden cost with self-hosting is the engineering time. You need model serving infrastructure, monitoring, version management, and the ability to upgrade models without re-embedding your entire corpus. Teams consistently underestimate this operational overhead by a factor of three to five.
Migration and lock-in
Switching embedding models means re-embedding your entire corpus. There is no shortcut. Vectors from different models are not comparable, so you cannot mix embeddings from OpenAI and Cohere in the same index. This makes your initial choice stickier than it appears.
The practical mitigation is to design your system with a re-embedding pipeline from day one. Store your raw text alongside your vectors. When you want to switch models, re-embed from raw text into a new index, validate retrieval quality, and swap. This pipeline takes a week to build and saves months of pain later.
Open-source models offer the best lock-in story because you own the weights and the inference infrastructure. You can fine-tune, quantize, or swap architectures without permission from a vendor. The cost is that you own everything, including the failures.
Decision framework
Use OpenAI text-embedding-3-large when you want a reliable, low-effort embedding solution and your volume is moderate. It is the safe default for teams that do not have specialized embedding needs.
Use Cohere Embed v4 when you need strong multilingual support or when you want matryoshka embeddings to reduce index size without sacrificing quality. It is the best managed option for international applications.
Use Voyage-3-large when your corpus is primarily code, technical documentation, or enterprise search content. The domain specialization pays for itself in retrieval quality.
Use open-source models (BGE-M3, E5-Mistral, Nomic Embed) when you have the infrastructure to self-host, when volume makes API costs prohibitive, or when you need fine-tuning control over the embedding space. They are the right choice for teams with ML engineering capacity who want to own their retrieval pipeline end-to-end.
The wrong choice is choosing based on a leaderboard. Benchmark your candidates on your own queries, against your own corpus, measured by what your users actually need to find. Everything else is noise.