> ## Documentation Index
> Fetch the complete documentation index at: https://usefulai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Best Embedding Models in 2026

export const models = [{
  rank: 1,
  name: "Voyage 4 Large",
  dev: "Voyage AI",
  icon: "/images/icons/voyageai.com.png",
  url: "https://docs.voyageai.com/docs/embeddings",
  bestFor: "Highest-quality general retrieval",
  score: "100%",
  price: "$0.12 / 1M tokens",
  license: "Proprietary",
  custom: "2048",
  customLabel: "Dimensions"
}, {
  rank: 2,
  name: "Octen-Embedding-8B",
  dev: "Octen",
  icon: "/images/icons/octen.ai.png",
  url: "https://huggingface.co/Octen/Octen-Embedding-8B",
  bestFor: "Top open-weight retrieval",
  score: "99%",
  price: "$0.07 / 1M tokens",
  license: "Open weight",
  custom: "4096",
  customLabel: "Dimensions"
}, {
  rank: 3,
  name: "Qwen3-Embedding-8B",
  dev: "Alibaba Qwen",
  icon: "/images/icons/qwen.ai.png",
  url: "https://huggingface.co/Qwen/Qwen3-Embedding-8B",
  bestFor: "Multilingual open-weight retrieval",
  score: "94%",
  price: "$0.01 / 1M tokens",
  license: "Open weight",
  custom: "4096",
  customLabel: "Dimensions"
}, {
  rank: 4,
  name: "Gemini Embedding 2",
  dev: "Google",
  icon: "/images/icons/google.com.png",
  url: "https://ai.google.dev/gemini-api/docs/embeddings",
  bestFor: "Multimodal search",
  score: "89%",
  price: "$0.20 / 1M tokens",
  license: "Proprietary",
  custom: "3072",
  customLabel: "Dimensions"
}, {
  rank: 5,
  name: "Jina Embeddings v5 Text Small",
  dev: "Jina AI",
  icon: "/images/icons/jina.ai.png",
  url: "https://huggingface.co/jinaai/jina-embeddings-v5-text-small",
  bestFor: "Small multilingual retrieval",
  score: "88%",
  price: "n/a",
  license: "Open weight",
  custom: "1024",
  customLabel: "Dimensions"
}, {
  rank: 6,
  name: "Cohere Embed v4.0",
  dev: "Cohere",
  icon: "/images/icons/cohere.com.png",
  url: "https://docs.cohere.com/docs/models",
  bestFor: "Multimodal document search",
  score: "84%",
  price: "$0.12 / 1M tokens",
  license: "Proprietary",
  custom: "1536",
  customLabel: "Dimensions"
}, {
  rank: 7,
  name: "OpenAI text-embedding-3-large",
  dev: "OpenAI",
  icon: "/images/icons/openai.com.png",
  url: "https://developers.openai.com/api/docs/models/text-embedding-3-large",
  bestFor: "Reliable general-purpose default",
  score: "82%",
  price: "$0.13 / 1M tokens",
  license: "Proprietary",
  custom: "3072",
  customLabel: "Dimensions"
}, {
  rank: 8,
  name: "NV-Embed-v2",
  dev: "NVIDIA",
  icon: "/images/icons/nvidia.com.png",
  url: "https://huggingface.co/nvidia/NV-Embed-v2",
  bestFor: "Non-commercial research retrieval",
  score: "80%",
  price: "n/a",
  license: "Open weight",
  custom: "4096",
  customLabel: "Dimensions"
}, {
  rank: 9,
  name: "Snowflake Arctic Embed L v2.0",
  dev: "Snowflake",
  icon: "/images/icons/snowflake.com.png",
  url: "https://huggingface.co/Snowflake/snowflake-arctic-embed-l-v2.0",
  bestFor: "Efficient multilingual retrieval",
  score: "80%",
  price: "n/a",
  license: "Open weight",
  custom: "1024",
  customLabel: "Dimensions"
}, {
  rank: 10,
  name: "E5 Mistral 7B Instruct",
  dev: "Intfloat",
  icon: "/images/icons/huggingface.co.png",
  url: "https://huggingface.co/intfloat/e5-mistral-7b-instruct",
  bestFor: "Instruction-tuned open baseline",
  score: "78%",
  price: "n/a",
  license: "Open weight",
  custom: "4096",
  customLabel: "Dimensions"
}, {
  rank: 11,
  name: "BGE-M3",
  dev: "BAAI",
  icon: "/images/icons/baai.ac.cn.png",
  url: "https://huggingface.co/BAAI/bge-m3",
  bestFor: "Hybrid multilingual retrieval",
  score: "77%",
  price: "n/a",
  license: "Open weight",
  custom: "1024",
  customLabel: "Dimensions"
}, {
  rank: 12,
  name: "OpenAI text-embedding-3-small",
  dev: "OpenAI",
  icon: "/images/icons/openai.com.png",
  url: "https://developers.openai.com/api/docs/models/text-embedding-3-small",
  bestFor: "Cheap high-volume embedding",
  score: "76%",
  price: "$0.02 / 1M tokens",
  license: "Proprietary",
  custom: "1536",
  customLabel: "Dimensions"
}, {
  rank: 13,
  name: "mxbai-embed-large-v1",
  dev: "Mixedbread AI",
  icon: "/images/icons/mixedbread.ai.png",
  url: "https://huggingface.co/mixedbread-ai/mxbai-embed-large-v1",
  bestFor: "Lightweight English retrieval",
  score: "69%",
  price: "n/a",
  license: "Open weight",
  custom: "1024",
  customLabel: "Dimensions"
}, {
  rank: 14,
  name: "Qwen3-Embedding-0.6B",
  dev: "Alibaba Qwen",
  icon: "/images/icons/qwen.ai.png",
  url: "https://huggingface.co/Qwen/Qwen3-Embedding-0.6B",
  bestFor: "Small local multilingual retrieval",
  score: "4%",
  price: "$0.01 / 1M tokens",
  license: "Open weight",
  custom: "1024",
  customLabel: "Dimensions"
}, {
  rank: 15,
  name: "EmbeddingGemma 300M",
  dev: "Google",
  icon: "/images/icons/google.com.png",
  url: "https://ai.google.dev/gemma/docs/embeddinggemma",
  bestFor: "On-device embedding",
  score: "4%",
  price: "n/a",
  license: "Open weight",
  custom: "768",
  customLabel: "Dimensions"
}];

export const Fav = ({icon, size = "h-4 w-4"}) => <img src={icon} alt="" noZoom className={"relative -top-px mr-1 inline rounded-sm object-contain " + size} />;

export const LicenseBadge = ({license}) => license === "Open weight" ? <span className="inline-flex items-center rounded bg-emerald-50 px-1.5 py-[2px] text-xs font-medium leading-4 text-emerald-700 dark:bg-emerald-500/10 dark:text-emerald-400">Open weight</span> : <span className="inline-flex items-center rounded bg-zinc-100 px-1.5 py-[2px] text-xs font-medium leading-4 text-zinc-600 dark:bg-white/10 dark:text-zinc-300">Proprietary</span>;

export const BestForChip = ({children}) => <span className="inline-flex min-w-0 max-w-full items-center rounded bg-sky-50 px-1.5 py-[2px] dark:bg-sky-500/10">
    <span className="truncate text-xs font-medium leading-4 text-sky-700 dark:text-sky-400">{children}</span>
  </span>;

export const HeaderTip = ({label, tip}) => <span className="inline-flex items-center gap-1.5">
    <span>{label}</span>
    <Tooltip tip={tip}>
      <span className="relative top-0.5 inline-flex cursor-pointer text-zinc-500 transition-opacity hover:opacity-70 dark:text-zinc-400">
        <Icon icon="circle-info" size={12} color="currentColor" />
        <span className="sr-only">About {label.toLowerCase()}</span>
      </span>
    </Tooltip>
  </span>;

export const ModelCard = ({model, children}) => <section className="not-prose my-5 rounded-lg border border-zinc-200 bg-white p-5 shadow-sm dark:border-white/10 dark:bg-white/[0.03]">
    <div className="mb-3"><BestForChip>{model.bestFor}</BestForChip></div>
    <div className="flex items-center gap-3">
      <img src={model.icon} alt={model.dev + " logo"} noZoom className="h-10 w-10 shrink-0 rounded-lg object-contain" />
      <div className="min-w-0 flex-1">
        <h2 className="m-0 max-w-full text-xl font-semibold leading-7 tracking-normal">
          <a href={model.url} target="_blank" rel="noreferrer" className="group inline-flex min-w-0 max-w-full items-center gap-1.5 no-underline text-zinc-950 dark:text-white">
            <span className="min-w-0 break-words"><span className="underline-offset-4 group-hover:underline group-focus-visible:underline">{model.name}</span> <span className="font-normal text-zinc-500 dark:text-zinc-400">({model.dev})</span></span>
            <span aria-hidden="true" className="flex shrink-0 text-zinc-400 transition-colors group-hover:text-zinc-900 group-focus-visible:text-zinc-900 dark:text-zinc-500 dark:group-hover:text-white dark:group-focus-visible:text-white"><Icon icon="arrow-up-right" size={12} color="currentColor" /></span>
          </a>
        </h2>
        <div className="mt-1 flex flex-wrap items-center gap-x-2 gap-y-1 text-[13px] leading-5 uai-ink-muted">
          <LicenseBadge license={model.license} />
          <span aria-hidden="true">∙</span>
          <span>Score <span className="tabular-nums text-zinc-950 dark:text-white">{model.score}</span></span>
          <span aria-hidden="true">∙</span>
          <span>Price <span className="tabular-nums text-zinc-950 dark:text-white">{model.price}</span></span>
          {model.custom && <><span aria-hidden="true">∙</span><span>{model.customLabel} <span className="tabular-nums text-zinc-950 dark:text-white">{model.custom}</span></span></>}
        </div>
      </div>
    </div>
    {children}
  </section>;

export const Take = ({children}) => <div className="not-prose mt-4 text-sm leading-[22px] text-zinc-700 dark:text-zinc-300">{children}</div>;

export const ST = ({label, children}) => <div className="not-prose mt-4">
    <div className="text-sm font-semibold text-zinc-950 dark:text-white">{label}</div>
    <div className="mt-1 flex flex-col gap-2.5 text-sm leading-[22px] text-zinc-700 dark:text-zinc-300">{children}</div>
  </div>;

export const AccessBullets = ({rows}) => <div className="not-prose mt-4 text-sm leading-[22px] text-zinc-700 dark:text-zinc-300">
    <div className="font-semibold text-zinc-950 dark:text-white">How to access</div>
    <div className="mt-1.5 flex flex-col gap-1.5">
      {rows.map(([key, body]) => <span key={key} className="flex items-baseline gap-2.5"><span aria-hidden="true" className="relative -top-0.5 inline-block h-1.5 w-1.5 shrink-0 rounded-full bg-zinc-700 dark:bg-zinc-300" /><span><span className="font-semibold text-zinc-950 dark:text-white">{key}</span> — {body}</span></span>)}
    </div>
  </div>;

export const Alt = ({icon, name, dev, url, children}) => <span className="flex items-baseline gap-2.5">
    <span aria-hidden="true" className="relative -top-0.5 inline-block h-1.5 w-1.5 shrink-0 rounded-full bg-zinc-300 dark:bg-zinc-600" />
    <span><Fav icon={icon} /><a href={url} target="_blank" rel="noreferrer" className="font-medium text-zinc-950 underline underline-offset-2 dark:text-white">{name}</a> <span className="uai-ink-muted">({dev})</span> — {children}</span>
  </span>;

<div className="not-prose -mt-2 mb-8 flex flex-wrap items-center gap-x-2 text-sm text-zinc-800 dark:text-zinc-200 lg:-mt-5" style={{ paddingLeft: "2px" }}>
  <span className="inline-flex items-center gap-1.5"><Icon icon="clock-rotate-left" size={10} color="currentColor" /> Updated <time dateTime="2026-07-12">July 12, 2026</time></span>
</div>

Embedding models turn text into vectors so you can search, cluster, and build RAG by meaning, not keywords. The hard part isn't finding a good one - it's matching retrieval quality, price, dimensions, and self-hosting needs to your workload. We compared 15 leading options.

## Best Embedding Models

<div className="uai-overview-breakout not-prose my-5">
  <input type="checkbox" id="models-more" className="fy-more-toggle sr-only" aria-label={"Show all 15 embeddings models"} />

  <div className="fy-more-table overflow-x-auto rounded-lg border border-zinc-200 bg-white dark:border-white/10 dark:bg-white/[0.03]">
    <div className="table text-sm" style={{ width: "100%" }}>
      <div className="table-header-group bg-zinc-50/60 dark:bg-white/[0.02]">
        <div className="table-row">
          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">#</span>
          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">Model</span>
          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">Best for</span>

          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-right text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">
            <HeaderTip label="Score" tip={"UsefulAI's 0-100 embedding score is normalized from RTEB(beta) source rank. Higher is better for retrieval-oriented performance."} />
          </span>

          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-right text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">
            <HeaderTip label="Price" tip={"Current API price per 1M input tokens embedded. Tiers, batch discounts, storage, and self-hosting can change total cost."} />
          </span>

          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">
            <HeaderTip label="License" tip="Proprietary means no public model weights. Open weight means weights are available, though exact licenses and commercial-use terms vary." />
          </span>

          <span className="table-cell whitespace-nowrap px-4 py-2.5 text-left text-[13px] font-medium leading-5 text-zinc-500 dark:text-zinc-400">
            <HeaderTip label={"Dimensions"} tip={"Vector size returned by the model. Lower dimensions reduce storage; higher dimensions are not automatically better."} />
          </span>
        </div>
      </div>

      <div className="table-row-group">
        {models.map((model, index) => (
                        <a key={model.name} href={model.url} target="_blank" rel="noreferrer" className={"table-row no-underline transition-colors hover:bg-zinc-50/60 dark:hover:bg-white/[0.02]" + (models.length > 9 && index >= 7 ? " fy-more-row" : "")}>
                          <span className="table-cell w-8 whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle text-[13px] tabular-nums dark:border-white/5"><span className="sr-only">Rank </span><span className="uai-ink-muted">{model.rank}</span></span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle dark:border-white/5"><span className="flex items-center gap-2.5"><Fav icon={model.icon} /><span className="text-sm font-semibold leading-5 text-zinc-950 dark:text-white">{model.name}</span></span></span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle text-[13px] leading-5 text-zinc-950 dark:border-white/5 dark:text-white"><span className="sr-only">Best for: </span>{model.bestFor}</span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 text-right align-middle text-[13px] leading-5 tabular-nums text-zinc-950 dark:border-white/5 dark:text-white"><span className="sr-only">Score: </span>{model.score}</span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 text-right align-middle text-[13px] leading-5 tabular-nums dark:border-white/5"><span className="sr-only">Price: </span><span className="uai-ink-muted">{model.price}</span></span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle dark:border-white/5"><span className="sr-only">License: </span><LicenseBadge license={model.license} /></span>
                          <span className="table-cell whitespace-nowrap border-t border-zinc-100 px-4 py-3 align-middle text-[13px] leading-5 text-zinc-950 dark:border-white/5 dark:text-white"><span className="sr-only">Dimensions: </span>{model.custom}</span>
                        </a>
                      ))}
      </div>
    </div>
  </div>

  {models.length > 9 && <div className="fy-more-pill mt-3 flex justify-center">
      <label htmlFor="models-more" className="inline-flex cursor-pointer items-center gap-1.5 rounded-full border border-zinc-200 px-4 py-1.5 text-[13px] font-medium text-zinc-600 transition-colors hover:text-zinc-900 dark:border-white/15 dark:text-zinc-300 dark:hover:text-white">
        <span className="fy-more-open inline-flex items-center gap-1.5">Show {models.length - 7} more <Icon icon="chevron-down" size={13} /></span>
        <span className="fy-more-close items-center gap-1.5">Show less <Icon icon="chevron-up" size={13} /></span>
      </label>
    </div>}
</div>

The score is a normalized RTEB rank, not a percent-correct number, so small on-device models like Qwen3-Embedding-0.6B and EmbeddingGemma 300M land near the bottom despite being genuinely useful for local work.

***

<ModelCard model={models[0]}>
  <Take>The strongest general-purpose embedding model in this set, and the one to beat if retrieval quality is your first priority.</Take>

  <ST label="Strengths:">
    <div>It leads on general and multilingual retrieval, and Matryoshka dimensions plus int8 and binary quantization let you shrink vectors and cut storage with little quality loss.</div>
    <div>A long context handles big chunks. If accuracy is what you're optimizing, start here.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It's proprietary and API-only, so there's no self-host route and you pay per token.</div>
    <div>For most of the quality at a lower price, Voyage 4 or Cohere Embed v4.0 are cheaper, and open-weight Octen-Embedding-8B rivals it if you can host.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.voyageai.com/docs/embeddings" target="_blank" rel="noreferrer" className="underline underline-offset-2">Voyage AI API</a> and <a href="https://ai.azure.com/catalog/models/voyage-4-large-embedding-model" target="_blank" rel="noreferrer" className="underline underline-offset-2">Microsoft Foundry</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[1]}>
  <Take>The strongest open-weight model here, effectively matching the best proprietary options if you have the hardware to run it.</Take>

  <ST label="Strengths:">
    <div>It tops the open-weight field on retrieval and is explicitly tuned for hard domains like legal and government text plus long-context queries.</div>
    <div>Fine-tuned from Qwen3-Embedding-8B, it keeps open weights, so you can self-host for privacy or route through a low-cost API.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>At 8B parameters it needs a high-end machine, so open weights don't mean casual local use - the lighter Octen-Embedding-4B eases that.</div>
    <div>Its ecosystem and production history are less proven than Qwen, BGE, OpenAI, Cohere, or Voyage.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.octen.ai/api-reference/embedding" target="_blank" rel="noreferrer" className="underline underline-offset-2">Octen API</a>.</span>],
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://www.sbert.net/" target="_blank" rel="noreferrer" className="underline underline-offset-2">sentence-transformers</a> after downloading weights from <a href="https://huggingface.co/Octen/Octen-Embedding-8B" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[2]}>
  <Take>A top open-weight model with broad language coverage and instruction control, and the foundation much of the open-weight field now builds on.</Take>

  <ST label="Strengths:">
    <div>It covers 100-plus languages, takes task instructions to tune embeddings per use case, and supports Matryoshka dimensions for smaller vectors.</div>
    <div>A full size range and matching rerankers make it easy to standardize on one family across retrieval workloads.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>The 8B size wants a high-end machine for local use, so many will call it through an API instead.</div>
    <div>On the hardest English retrieval it trails Octen-Embedding-8B, which is fine-tuned from it, and proprietary Voyage 4 Large.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://www.alibabacloud.com/help/en/model-studio/model-pricing" target="_blank" rel="noreferrer" className="underline underline-offset-2">Alibaba Cloud Model Studio</a>, <a href="https://ai.azure.com/catalog/models/qwen-qwen3-embedding-8b" target="_blank" rel="noreferrer" className="underline underline-offset-2">Microsoft Foundry</a>, and <a href="https://openrouter.ai/qwen/qwen3-embedding-8b" target="_blank" rel="noreferrer" className="underline underline-offset-2">OpenRouter</a>.</span>],
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://www.sbert.net/" target="_blank" rel="noreferrer" className="underline underline-offset-2">sentence-transformers</a> after downloading weights from <a href="https://huggingface.co/Qwen/Qwen3-Embedding-8B" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[3]}>
  <Take>Google's natively multimodal embedding model, putting text, images, audio, video, and PDFs in one vector space.</Take>

  <ST label="Strengths:">
    <div>One model embeds text and rich media into a shared space, so cross-modal search and classification work without separate pipelines.</div>
    <div>It covers 100-plus languages and offers Matryoshka dimensions from small to large, ranking at the top of multilingual retrieval.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It's proprietary and API-only with no self-host path, and multimodal support may be more model than you need for a pure text corpus.</div>
    <div>For pure text retrieval, Voyage 4 Large and Cohere Embed v4.0 are simpler direct comparisons.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://ai.google.dev/gemini-api/docs/embeddings" target="_blank" rel="noreferrer" className="underline underline-offset-2">Gemini API</a> and <a href="https://docs.cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-text-embeddings" target="_blank" rel="noreferrer" className="underline underline-offset-2">Vertex AI</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[4]}>
  <Take>A sub-1B multilingual model that punches well above its size, and one of the best small open-weight options if the licensing fits.</Take>

  <ST label="Strengths:">
    <div>Built on a Qwen3 backbone, it delivers strong multilingual retrieval across 119-plus languages and a long context while staying small enough to run on a typical machine.</div>
    <div>It holds up well under binary quantization, keeping vector storage tiny.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>The weights ship under a noncommercial license, so commercial use means the paid API or a separate license - a real dealbreaker for some.</div>
    <div>If you need open commercial weights at this size, look at Snowflake Arctic Embed L v2.0 or BGE-M3.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://jina.ai/embeddings/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Jina API</a>.</span>],
["Run locally", <span>You can run it locally with <a href="https://www.sbert.net/" target="_blank" rel="noreferrer" className="underline underline-offset-2">sentence-transformers</a> after downloading weights from <a href="https://huggingface.co/jinaai/jina-embeddings-v5-text-small" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[5]}>
  <Take>A polished multimodal model that embeds text and images together and handles very long documents, strong for mixed-content retrieval.</Take>

  <ST label="Strengths:">
    <div>It embeds interleaved text and images, takes a very long context so full documents fit, and outputs Matryoshka dimensions plus int8 and binary formats to cut storage.</div>
    <div>A dependable pick when your corpus mixes prose, tables, and visuals.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It's proprietary and API-only, and on pure-text retrieval it trails Voyage 4 Large.</div>
    <div>If you don't need image support, cheaper text models cover the same ground - the long context and compression are the real reasons to choose it.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.cohere.com/v2/reference/embed" target="_blank" rel="noreferrer" className="underline underline-offset-2">Cohere API</a>, <a href="https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-embed.html" target="_blank" rel="noreferrer" className="underline underline-offset-2">Amazon Bedrock</a>, and <a href="https://ai.azure.com/catalog/models/embed-v-4-0" target="_blank" rel="noreferrer" className="underline underline-offset-2">Microsoft Foundry</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[6]}>
  <Take>OpenAI's strongest embedding model and a safe, familiar default, though newer rivals have passed it on retrieval quality.</Take>

  <ST label="Strengths:">
    <div>A well-documented, stable general-purpose embedder with dimension shortening, so you can trade vector size for storage savings without re-embedding.</div>
    <div>Easy to integrate and consistent across tasks, it's a low-risk default for RAG and semantic search.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It no longer leads: Voyage 4 Large and Cohere Embed v4.0 score higher, and open-weight models can match it for less.</div>
    <div>It's proprietary and API-only, with no image support and a shorter context than the newest models.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://developers.openai.com/api/docs/guides/embeddings" target="_blank" rel="noreferrer" className="underline underline-offset-2">OpenAI API</a> and <a href="https://learn.microsoft.com/en-us/azure/foundry/openai/tutorials/embeddings" target="_blank" rel="noreferrer" className="underline underline-offset-2">Microsoft Foundry / Azure OpenAI</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[7]}>
  <Take>A high-accuracy open-weight model held back by a strict noncommercial license, so in practice it's a research and evaluation pick.</Take>

  <ST label="Strengths:">
    <div>It posts strong retrieval accuracy and, as open weights, gives full control for research, benchmarking, and private experimentation.</div>
    <div>If you're in academia or a non-profit and want near-top quality you can inspect and self-host, it's a serious option.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>The CC-BY-NC license rules out commercial use, which disqualifies it for most products.</div>
    <div>It's a 7B model needing a high-end machine, and for commercial retrieval Qwen3-Embedding-8B or Octen-Embedding-8B give open weights you can actually ship.</div>
  </ST>

  <AccessBullets
    rows={[
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://www.sbert.net/" target="_blank" rel="noreferrer" className="underline underline-offset-2">sentence-transformers</a> after downloading weights from <a href="https://huggingface.co/nvidia/NV-Embed-v2" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[8]}>
  <Take>A compact open-weight model tuned for multilingual retrieval that stays strong in English, and easy to run on ordinary hardware.</Take>

  <ST label="Strengths:">
    <div>It balances English and non-English retrieval without the usual multilingual tax, and Matryoshka support compresses vectors roughly fourfold with minimal quality loss.</div>
    <div>Small enough for a typical machine, it's a practical open commercial pick for search at scale.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It caps at 1024 dimensions and a shorter context than the largest models, so very long documents need chunking.</div>
    <div>For peak accuracy, Voyage 4 Large and Octen-Embedding-8B pull ahead - this trades a little ceiling for efficiency and open weights.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.snowflake.com/en/user-guide/snowflake-cortex/vector-embeddings" target="_blank" rel="noreferrer" className="underline underline-offset-2">Snowflake Cortex</a>.</span>],
["Run locally", <span>You can run it locally with <a href="https://www.sbert.net/" target="_blank" rel="noreferrer" className="underline underline-offset-2">sentence-transformers</a> after downloading weights from <a href="https://huggingface.co/Snowflake/snowflake-arctic-embed-l-v2.0" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[9]}>
  <Take>One of the original LLM-based embedders - still capable and instruction-driven, but newer open-weight models now beat it on quality and efficiency.</Take>

  <ST label="Strengths:">
    <div>Built on Mistral 7B, it takes natural-language task instructions to shape embeddings and remains a solid, well-understood open-weight baseline for retrieval and classification, with weights you can self-host and study.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It's a 7B model needing a high-end machine, and its context is shorter than newer options.</div>
    <div>Qwen3-Embedding-8B and Octen-Embedding-8B deliver more quality per parameter, so it's now more of a baseline than a first choice.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://ai.azure.com/catalog/models/intfloat-e5-mistral-7b-instruct" target="_blank" rel="noreferrer" className="underline underline-offset-2">Microsoft Foundry</a>.</span>],
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://www.sbert.net/" target="_blank" rel="noreferrer" className="underline underline-offset-2">sentence-transformers</a> after downloading weights from <a href="https://huggingface.co/intfloat/e5-mistral-7b-instruct" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[10]}>
  <Take>A versatile multilingual workhorse that does dense, sparse, and multi-vector retrieval in one model, and still a go-to open-weight default.</Take>

  <ST label="Strengths:">
    <div>One model produces dense, sparse, and ColBERT-style multi-vector outputs, so you can run hybrid retrieval without stitching separate systems together.</div>
    <div>It covers 100-plus languages and a long context, and runs on a typical machine - a flexible, self-hostable default.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Raw dense-retrieval accuracy now trails newer models like Qwen3-Embedding-8B and Snowflake Arctic Embed L v2.0.</div>
    <div>Its strength is flexibility, not a top score, so pick it for hybrid and multilingual work rather than peak single-vector quality.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://openrouter.ai/baai/bge-m3" target="_blank" rel="noreferrer" className="underline underline-offset-2">OpenRouter</a>.</span>],
["Run locally", <span>You can run it locally with <a href="https://github.com/FlagOpen/FlagEmbedding" target="_blank" rel="noreferrer" className="underline underline-offset-2">FlagEmbedding</a> after downloading weights from <a href="https://huggingface.co/BAAI/bge-m3" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[11]}>
  <Take>The budget OpenAI embedder - not the most accurate, but cheap and fast enough to be the default for high-volume, cost-sensitive work.</Take>

  <ST label="Strengths:">
    <div>It's inexpensive and quick, with dimension shortening to cut storage further, which suits large corpora where per-token cost dominates.</div>
    <div>For a hosted, low-effort embedder that just works at volume, it's hard to beat on economics.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Accuracy sits mid-pack, well below the leaders, and it's proprietary and API-only.</div>
    <div>Open-weight models you host can beat it on quality at a similar effective cost; if budget is looser, text-embedding-3-large is the natural upgrade.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://developers.openai.com/api/docs/guides/embeddings" target="_blank" rel="noreferrer" className="underline underline-offset-2">OpenAI API</a> and <a href="https://learn.microsoft.com/en-us/azure/foundry/openai/tutorials/embeddings" target="_blank" rel="noreferrer" className="underline underline-offset-2">Microsoft Foundry / Azure OpenAI</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[12]}>
  <Take>A small, older English-only model that's still a fine lightweight local option, though newer small models have moved past it.</Take>

  <ST label="Strengths:">
    <div>At BERT-large size it's easy to run on a typical machine, fast, and self-hostable, with solid English retrieval for its footprint.</div>
    <div>A reasonable choice for simple, English-only semantic search where you want something small and self-contained.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It's English-only with a short context and no multilingual reach, and its accuracy trails current small models.</div>
    <div>For a similar footprint with more languages and better quality, EmbeddingGemma 300M or Snowflake Arctic Embed L v2.0 are stronger today.</div>
  </ST>

  <AccessBullets
    rows={[
["Run locally", <span>You can run it locally with <a href="https://www.sbert.net/" target="_blank" rel="noreferrer" className="underline underline-offset-2">sentence-transformers</a> after downloading weights from <a href="https://huggingface.co/mixedbread-ai/mxbai-embed-large-v1" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[13]}>
  <Take>The small sibling of the Qwen3 embedding family - the pick when you want capable multilingual embeddings that run locally on modest hardware.</Take>

  <ST label="Strengths:">
    <div>It brings the family's instruction control and 100-plus-language coverage down to a size that runs comfortably on a typical machine through Ollama.</div>
    <div>For local RAG or private on-device search where you can't run an 8B model, it's a genuinely useful default.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>As a sub-1B model it can't match the retrieval accuracy of the 8B version or top proprietary models, so don't expect leaderboard quality.</div>
    <div>If you have the hardware, Jina Embeddings v5 Text Small edges it on multilingual retrieval at a similar size.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://www.alibabacloud.com/help/en/model-studio/model-pricing" target="_blank" rel="noreferrer" className="underline underline-offset-2">Alibaba Cloud Model Studio</a> and <a href="https://openrouter.ai/qwen/qwen3-embedding-0.6b" target="_blank" rel="noreferrer" className="underline underline-offset-2">OpenRouter</a>.</span>],
["Run locally", <span>You can run it locally with <a href="https://ollama.com/search?c=embedding" target="_blank" rel="noreferrer" className="underline underline-offset-2">Ollama</a> after downloading weights from <a href="https://huggingface.co/Qwen/Qwen3-Embedding-0.6B" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[14]}>
  <Take>Google's tiny on-device embedder, built to run on phones and laptops - the pick when footprint and offline use matter more than peak accuracy.</Take>

  <ST label="Strengths:">
    <div>At around 300M parameters it runs in a very small memory budget, even on mobile, and still covers 100-plus languages with Matryoshka dimensions down to 128 for tiny vectors.</div>
    <div>For offline, private, or edge search, it's the most deployable model here.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It won't match larger models on retrieval accuracy, and its short context limits long-document work.</div>
    <div>It's built for footprint, not ceiling - if you can run something bigger, Qwen3-Embedding-0.6B or Snowflake Arctic Embed L v2.0 retrieve better.</div>
  </ST>

  <AccessBullets
    rows={[
["Run locally", <span>You can run it locally with <a href="https://ollama.com/search?c=embedding" target="_blank" rel="noreferrer" className="underline underline-offset-2">Ollama</a> after downloading weights from <a href="https://huggingface.co/google/embeddinggemma-300m" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

***

## How to Choose

When choosing between these models, consider:

* **Access:** First decide whether you'll call a hosted API or self-host. Proprietary models like Voyage 4 Large, Gemini Embedding 2, Cohere Embed v4.0, and the OpenAI models are API-only. Open-weight models can be self-hosted, but the 7B-8B ones (Octen, Qwen3-Embedding-8B, NV-Embed-v2, E5 Mistral) need a high-end machine, while smaller models (BGE-M3, Snowflake, Qwen3-Embedding-0.6B, EmbeddingGemma) run on a typical one.
* **Quality:** We use RTEB, the Retrieval Embedding Benchmark, as the main score. It measures retrieval accuracy on held-out and private datasets across domains like law, healthcare, finance, and code, which makes it harder to game than older public benchmarks. We normalize each model's RTEB rank to a 0-100 scale, so 100 is the top-ranked model and low numbers mean a low rank, not a percent-correct figure. That's why small on-device models score near the bottom even though they're useful.
* **Price:** We use API cost per 1M input tokens for a clean comparison. Several open-weight models show n/a because they have no single first-party per-token rate - your cost is the hardware you run them on, or whatever host you route through.
* **Output Dimensions:** Bigger vectors can capture more, but they cost more to store and search. Most top models support Matryoshka truncation, so you can start at the full size and cut to 512 or 768 to save storage and speed up search with little quality loss.
* **Licensing:** Check this before you build. NV-Embed-v2 and Jina Embeddings v5 Text Small ship open weights under noncommercial licenses, so commercial use needs a paid API or a separate agreement despite the "open weight" label.

***

## Other Models We Considered

<div className="not-prose my-4 flex flex-col gap-1.5 text-sm text-zinc-700 dark:text-zinc-300">
  <Alt icon={"/images/icons/octen.ai.png"} name={"Octen-Embedding-4B"} dev={"Octen"} url={"https://huggingface.co/Octen/Octen-Embedding-4B"}>Nearly matches the 8B on quality with lighter hardware needs.</Alt>
  <Alt icon={"/images/icons/voyageai.com.png"} name={"Voyage 4"} dev={"Voyage AI"} url={"https://docs.voyageai.com/docs/embeddings"}>The cheaper Voyage option, a little less accuracy but still strong.</Alt>
  <Alt icon={"/images/icons/google.com.png"} name={"Gemini Embedding 001"} dev={"Google"} url={"https://ai.google.dev/gemini-api/docs/embeddings"}>The prior Gemini embedder, now superseded by Gemini Embedding 2.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"Jasper Token Compression 600M"} dev={"InfGrad"} url={"https://huggingface.co/infgrad/Jasper-Token-Compression-600M"}>Compact model with strong compression, but niche retrieval performance.</Alt>
  <Alt icon={"/images/icons/qwen.ai.png"} name={"Qwen3-Embedding-4B"} dev={"Alibaba Qwen"} url={"https://huggingface.co/Qwen/Qwen3-Embedding-4B"}>The mid-size Qwen embedder, between the 8B and 0.6B.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"nomic-embed-text-v1.5"} dev={"Nomic AI"} url={"https://huggingface.co/nomic-ai/nomic-embed-text-v1.5"}>Familiar local RAG baseline, now behind newer small models.</Alt>
  <Alt icon={"/images/icons/seed.bytedance.com.png"} name={"Seed1.6 Embedding"} dev={"ByteDance"} url={"https://seed.bytedance.com/en/blog/built-on-seed1-6-flash-seed-1-6-embedding-launched"}>Strong on some benchmarks, weaker on retrieval-focused tests.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"Ingot 8B R3"} dev={"JCorners"} url={"https://huggingface.co/JCorners/Ingot-8B-R3"}>Tops some English benchmarks, but retrieval-focused results lag.</Alt>
  <Alt icon={"/images/icons/openai.com.png"} name={"OpenAI text-embedding-ada-002"} dev={"OpenAI"} url={"https://openai.com/index/new-and-improved-embedding-model/"}>The legacy default, replaced by the text-embedding-3 models.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"QZhou Embedding"} dev={"Kingsoft LLM"} url={"https://huggingface.co/Kingsoft-LLM/QZhou-Embedding"}>Benchmark-strong open weights, but low demand and thin retrieval coverage.</Alt>
</div>

***

## Frequently Asked Questions

<AccordionGroup>
  <Accordion title={"What is the best embedding model right now?"}>
    Voyage 4 Large is our top pick for general-purpose retrieval quality, and it's the one to beat. If you want open weights you can self-host, Octen-Embedding-8B leads that field.
  </Accordion>

  <Accordion title={"What is the best open-weight embedding model?"}>
    Octen-Embedding-8B leads on retrieval, with Qwen3-Embedding-8B close behind and far broader language coverage. Both need a high-end machine, so budget for the hardware or route them through an API.
  </Accordion>

  <Accordion title={"What is the best embedding model I can run locally?"}>
    On a typical machine, BGE-M3, Snowflake Arctic Embed L v2.0, Qwen3-Embedding-0.6B, and EmbeddingGemma 300M all run comfortably. EmbeddingGemma goes smallest for phones and edge devices; BGE-M3 gives you the most retrieval flexibility.
  </Accordion>

  <Accordion title={"Is Qwen3-Embedding better than BGE-M3?"}>
    For raw multilingual dense retrieval, Qwen3-Embedding-8B generally edges it, but BGE-M3 adds sparse and multi-vector retrieval in one model. Choose by whether you want hybrid retrieval or just the strongest dense vectors.
  </Accordion>

  <Accordion title={"What should I use instead of text-embedding-ada-002?"}>
    Move to text-embedding-3-small for a cheap upgrade or text-embedding-3-large for better quality. Both beat ada-002 and add dimension shortening, so migration is usually a straight swap.
  </Accordion>

  <Accordion title={"Do embedding benchmarks match real-world use?"}>
    Roughly. RTEB's private datasets make it harder to game than older benchmarks, but retrieval quality still depends on your own corpus. Shortlist the top two or three candidates by score, then test them on your data before committing.
  </Accordion>

  <Accordion title={"How many output dimensions do I actually need?"}>
    Usually fewer than the maximum. Many of these models support Matryoshka truncation, so you can cut dimensions to save storage and speed up search with little quality loss. Test at 512 or 768 before paying to store full-size vectors.
  </Accordion>
</AccordionGroup>
