> ## 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 Reranker Models for RAG in 2026

export const models = [{
  rank: 1,
  name: "Zerank 2",
  dev: "ZeroEntropy",
  icon: "/images/icons/zeroentropy.dev.png",
  url: "https://huggingface.co/zeroentropy/zerank-2-reranker",
  bestFor: "Top-accuracy multilingual RAG",
  score: "100%",
  price: "$0.025 / 1M",
  license: "Open weight",
  custom: "265 ms",
  customLabel: "Latency"
}, {
  rank: 2,
  name: "Cohere Rerank 4 Pro",
  dev: "Cohere",
  icon: "/images/icons/cohere.com.png",
  url: "https://docs.cohere.com/v2/docs/rerank",
  bestFor: "Quality-first enterprise RAG",
  score: "97%",
  price: "$0.05 / 1M",
  license: "Proprietary",
  custom: "614 ms",
  customLabel: "Latency"
}, {
  rank: 3,
  name: "Voyage Rerank 2.5",
  dev: "Voyage AI",
  icon: "/images/icons/voyageai.com.png",
  url: "https://docs.voyageai.com/docs/reranker",
  bestFor: "Balanced instruction-following RAG",
  score: "70%",
  price: "$0.05 / 1M",
  license: "Proprietary",
  custom: "613 ms",
  customLabel: "Latency"
}, {
  rank: 4,
  name: "Zerank 1 Small",
  dev: "ZeroEntropy",
  icon: "/images/icons/zeroentropy.dev.png",
  url: "https://huggingface.co/zeroentropy/zerank-1-small-reranker",
  bestFor: "Self-hostable lightweight reranker",
  score: "68%",
  price: "$0.025 / 1M",
  license: "Open weight",
  custom: "248 ms",
  customLabel: "Latency"
}, {
  rank: 5,
  name: "Voyage Rerank 2.5 Lite",
  dev: "Voyage AI",
  icon: "/images/icons/voyageai.com.png",
  url: "https://docs.voyageai.com/docs/reranker",
  bestFor: "Cost-efficient high-volume reranking",
  score: "62%",
  price: "$0.02 / 1M",
  license: "Proprietary",
  custom: "616 ms",
  customLabel: "Latency"
}, {
  rank: 6,
  name: "Cohere Rerank 4 Fast",
  dev: "Cohere",
  icon: "/images/icons/cohere.com.png",
  url: "https://docs.cohere.com/v2/docs/rerank",
  bestFor: "Low-latency enterprise reranking",
  score: "59%",
  price: "$0.05 / 1M",
  license: "Proprietary",
  custom: "447 ms",
  customLabel: "Latency"
}, {
  rank: 7,
  name: "Qwen3 Reranker 8B",
  dev: "Qwen",
  icon: "/images/icons/qwen.ai.png",
  url: "https://huggingface.co/Qwen/Qwen3-Reranker-8B",
  bestFor: "Top-quality open-weight reranking",
  score: "47%",
  price: "$0.05 / 1M",
  license: "Open weight",
  custom: "4,687 ms",
  customLabel: "Latency"
}, {
  rank: 8,
  name: "Contextual AI Reranker v2 Instruct Multilingual",
  dev: "Contextual AI",
  icon: "/images/icons/contextual.ai.png",
  url: "https://docs.contextual.ai/api-reference/rerank/rerank",
  bestFor: "Instruction-steered enterprise RAG",
  score: "46%",
  price: "$0.05 / 1M",
  license: "Open weight",
  custom: "3,333 ms",
  customLabel: "Latency"
}, {
  rank: 9,
  name: "BGE Reranker v2 M3",
  dev: "BAAI",
  icon: "/images/icons/baai.ac.cn.png",
  url: "https://huggingface.co/BAAI/bge-reranker-v2-m3",
  bestFor: "Permissive open-weight baseline",
  score: "0%",
  price: "$0.02 / 1M",
  license: "Open weight",
  custom: "2,383 ms",
  customLabel: "Latency"
}, {
  rank: 10,
  name: "Jina Reranker v3",
  dev: "Jina AI",
  icon: "/images/icons/jina.ai.png",
  url: "https://huggingface.co/jinaai/jina-reranker-v3",
  bestFor: "Fast long-context reranking",
  score: "Not ranked",
  price: "$0.045 / 1M",
  license: "Open weight",
  custom: "167 ms",
  customLabel: "Latency"
}, {
  rank: 11,
  name: "Qwen3 Reranker 0.6B",
  dev: "Qwen",
  icon: "/images/icons/qwen.ai.png",
  url: "https://huggingface.co/Qwen/Qwen3-Reranker-0.6B",
  bestFor: "Cheap fast local reranking",
  score: "Not ranked",
  price: "$0.01 / 1M",
  license: "Open weight",
  custom: "445 ms",
  customLabel: "Latency"
}, {
  rank: 12,
  name: "Llama Nemotron Rerank 1B v2",
  dev: "NVIDIA",
  icon: "/images/icons/nvidia.com.png",
  url: "https://huggingface.co/nvidia/llama-nemotron-rerank-1b-v2",
  bestFor: "Cross-lingual retrieval reranking",
  score: "Not ranked",
  price: "Not published",
  license: "Open weight",
  custom: "223 ms",
  customLabel: "Latency"
}];

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>

A reranker reorders the chunks your retriever returns so the best ones land on top - the cheapest upgrade to RAG accuracy. But the highest-scoring models often ship noncommercial weights, so "open" rarely means self-hostable. We ranked 12 on quality, price, speed, and license.

## Best Reranker 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 12 reranking 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 reranking score is normalized from Agentset Rerankers Leaderboard Elo. Higher is better."} />
          </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={"Comparable USD per 1M reranked input tokens. Search-unit assumptions, free tiers, discounts, and self-hosting are excluded."} />
          </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={"Latency"} tip={"Published reranking latency for the represented workload. Lower is faster; hardware and test conditions vary."} />
          </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">Latency: </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>

*Scores are the Agentset Rerankers Leaderboard Elo, min-max normalized across all 12 models. A 0% is the floor of the measured range, not zero ability, and "Not ranked" means the model isn't on the board yet. Latency figures come from more than one benchmark (see [How to Choose](#how-to-choose)), so treat them as directional, not a photo finish. Prices are normalized to USD per 1M reranked tokens.*

***

<ModelCard model={models[0]}>
  <Take>The most accurate reranker in the current benchmark, and among the fastest and cheapest too - if you can live with weights you can't ship commercially.</Take>

  <ST label="Strengths:">
    <div>It leads on ranking quality while staying near the front on speed, a rare combination. Its relevance scores are well calibrated, so you can set real cutoff thresholds instead of guessing.</div>
    <div>Instruction-following and genuine 100+ language coverage make it the strongest pick for multilingual or domain-specialized retrieval.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>The weights are noncommercial, so self-hosting in a product needs a paid ZeroEntropy license, and most teams land on the metered API anyway.</div>
    <div>Local runs also need a high-end GPU. For weights you can actually ship, Zerank 1 Small or Qwen3 are the alternatives.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.zeroentropy.dev/api-reference/models/rerank" target="_blank" rel="noreferrer" className="underline underline-offset-2">ZeroEntropy API</a> and <a href="https://docs.zeroentropy.dev/models" target="_blank" rel="noreferrer" className="underline underline-offset-2">AWS Marketplace / SageMaker</a>.</span>],
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://www.sbert.net/docs/cross_encoder/usage/usage.html" target="_blank" rel="noreferrer" className="underline underline-offset-2">Sentence Transformers</a> after downloading weights from <a href="https://huggingface.co/zeroentropy/zerank-2-reranker" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[1]}>
  <Take>Cohere's v4 flagship is the strongest proprietary reranker here, a real jump over 3.5 that shines on long, entity-heavy enterprise documents.</Take>

  <ST label="Strengths:">
    <div>It covers 100+ languages and jumped to roughly 32K context, so long filings and reports rerank without the pre-chunking dance.</div>
    <div>Quality is consistent across domains with the biggest gains on finance, business, and entity-heavy content, and it sits near the very top on preference-based evaluation.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>Closed weights mean no self-hosting, though Cohere does offer private managed deployment if data residency is the concern.</div>
    <div>Latency is middle-of-the-pack, slower than Zerank 2 and its own Fast tier, and there's no instruction-based steering - if you want that, Voyage 2.5 is the closer fit.</div>
  </ST>

  <AccessBullets
    rows={[
["App", <span>Available in <a href="https://cohere.com/north" target="_blank" rel="noreferrer" className="underline underline-offset-2">Cohere North</a> and <a href="https://cohere.com/compass" target="_blank" rel="noreferrer" className="underline underline-offset-2">Compass</a>.</span>],
["API", <span>Accessible via <a href="https://docs.cohere.com/docs/reranking-quickstart" target="_blank" rel="noreferrer" className="underline underline-offset-2">Cohere API</a> and <a href="https://ai.azure.com/catalog/models/Cohere-rerank-v4.0-pro" target="_blank" rel="noreferrer" className="underline underline-offset-2">Microsoft Foundry</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[2]}>
  <Take>Voyage's generalist reranker is the balanced pick, and the only strong proprietary option here you can steer with plain-language instructions.</Take>

  <ST label="Strengths:">
    <div>Natural-language instructions let you steer ranking - emphasize a field, prefer a document type, disambiguate a query - a real edge for agentic and conversational retrieval.</div>
    <div>It also leads the proprietary set on pure retrieval-accuracy metrics and handles 32K context, so it's a safe balanced default.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It's API-only from a single vendor, with no local or private-deployment route, unlike Cohere. Language coverage is narrower than Cohere's, and on preference-based ranking it sits below Cohere Pro and Zerank 2.</div>
    <div>It wins on balance, not on any single number.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.voyageai.com/reference/reranker-api" target="_blank" rel="noreferrer" className="underline underline-offset-2">Voyage AI API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[3]}>
  <Take>The previous-generation ZeroEntropy small model earns its spot on this list for one reason: permissive weights you can actually deploy.</Take>

  <ST label="Strengths:">
    <div>Apache 2.0 weights and a small footprint mean it drops into a commercial product with no licensing conversation and runs on ordinary hardware.</div>
    <div>It's the fastest model in the Zerank line, cheap to self-host, and punches above its size on quality - exactly what Zerank 2's license won't let you do.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It's clearly below Zerank 2, Cohere 4, and Voyage 2.5 on ranking quality - this is the "good enough and yours" option, not the accuracy leader.</div>
    <div>It's English-centric with no instruction-following, so for multilingual or steerable ranking you want Zerank 2 or an open Qwen3.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.zeroentropy.dev/api-reference/models/rerank" target="_blank" rel="noreferrer" className="underline underline-offset-2">ZeroEntropy API</a>, <a href="https://docs.zeroentropy.dev/models" target="_blank" rel="noreferrer" className="underline underline-offset-2">AWS Marketplace / SageMaker</a>, and <a href="https://www.baseten.co/library/zerank-1-small/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Baseten</a>.</span>],
["Run locally", <span>You can run it locally with <a href="https://www.sbert.net/docs/cross_encoder/usage/usage.html" target="_blank" rel="noreferrer" className="underline underline-offset-2">Sentence Transformers</a> after downloading weights from <a href="https://huggingface.co/zeroentropy/zerank-1-small-reranker" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[4]}>
  <Take>The cheaper Voyage tier keeps the instruction-following and long context of 2.5, giving up a little quality for a much lower price.</Take>

  <ST label="Strengths:">
    <div>It carries the full 2.5 feature set - instruction-following, 32K context, multilingual - into a much cheaper tier, which makes it the value pick when query volume is high.</div>
    <div>Quality holds up better than the price suggests, landing above Cohere's v4 variants on pure retrieval accuracy.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>There's a real if small quality step-down from full 2.5, so skip it when ranking quality is the priority. And despite the "Lite" name it isn't faster; latency matches 2.5, so the only reason to choose it over 2.5 is cost.</div>
    <div>Same API-only, single-vendor limits.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.voyageai.com/reference/reranker-api" target="_blank" rel="noreferrer" className="underline underline-offset-2">Voyage AI API</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[5]}>
  <Take>The speed-tuned v4 tier is faster than Pro and keeps the same context and languages, but it's a specialized tool, not a universal upgrade.</Take>

  <ST label="Strengths:">
    <div>It's meaningfully faster than Pro with higher throughput, the one to reach for when your latency budget is tight.</div>
    <div>You keep the same 100+ language coverage and 32K context, and on enterprise content - finance, business, entity-heavy queries - it still improves on the older 3.5.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>The catch is uneven quality: on argumentation-heavy and general web-style questions it can fall behind the older 3.5. It ranks below both Voyage 2.5 tiers, and like all Cohere models it's closed-weight.</div>
    <div>Pick it for speed on enterprise content, not as a blanket upgrade.</div>
  </ST>

  <AccessBullets
    rows={[
["App", <span>Available in <a href="https://cohere.com/north" target="_blank" rel="noreferrer" className="underline underline-offset-2">Cohere North</a> and <a href="https://cohere.com/compass" target="_blank" rel="noreferrer" className="underline underline-offset-2">Compass</a>.</span>],
["API", <span>Accessible via <a href="https://docs.cohere.com/docs/reranking-quickstart" target="_blank" rel="noreferrer" className="underline underline-offset-2">Cohere API</a> and <a href="https://ai.azure.com/catalog/models/Cohere-rerank-v4.0-fast" target="_blank" rel="noreferrer" className="underline underline-offset-2">Microsoft Foundry</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[6]}>
  <Take>The largest open Qwen3 reranker offers frontier-adjacent quality under a truly permissive license, but its latency makes it a batch tool, not a live one.</Take>

  <ST label="Strengths:">
    <div>Apache 2.0 gives you unrestricted commercial use at a quality tier where that's rare, plus full on-prem control. It covers 100+ languages including code, takes task instructions, handles 32K context, and tops academic multilingual retrieval benchmarks.</div>
    <div>If sovereignty and commercial freedom both matter, it has few peers.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>The dealbreaker is speed - the slowest model here, pushing it to offline or batch reranking.</div>
    <div>Self-hosting needs a high-end GPU, and its quality edge is benchmark-dependent: it tops academic multilingual tests but trails Zerank 2 and Cohere on preference ranking.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://deepinfra.com/Qwen/Qwen3-Reranker-8B/api" target="_blank" rel="noreferrer" className="underline underline-offset-2">DeepInfra</a>.</span>],
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://www.sbert.net/docs/cross_encoder/usage/usage.html" target="_blank" rel="noreferrer" className="underline underline-offset-2">Sentence Transformers</a> after downloading weights from <a href="https://huggingface.co/Qwen/Qwen3-Reranker-8B" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[7]}>
  <Take>This is the reranker to reach for when your corpus has conflicting sources and you need to steer ranking by recency, authority, or document type.</Take>

  <ST label="Strengths:">
    <div>It's purpose-built for instruction steering: a plain-language instruction can prioritize recent documents, trusted internal sources, or a specific document type - useful when relevance alone can't settle contradictions between sources.</div>
    <div>Multilingual coverage spans 100+ languages, context runs to 32K, and it does this in a compact 2B model.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>The weights are noncommercial with share-alike terms, so commercial use routes you to the paid API, and self-hosting is slow on high-end hardware.</div>
    <div>Instruction steering only earns its keep if you need cross-source arbitration - for plain relevance reranking, Voyage 2.5 is faster and less restricted.</div>
  </ST>

  <AccessBullets
    rows={[
["App", <span>Available in the <a href="https://docs.contextual.ai/quickstarts/getting-started" target="_blank" rel="noreferrer" className="underline underline-offset-2">Contextual AI Platform</a>.</span>],
["API", <span>Accessible via <a href="https://docs.contextual.ai/api-reference/rerank/rerank" target="_blank" rel="noreferrer" className="underline underline-offset-2">Contextual AI API</a>.</span>],
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://www.sbert.net/docs/cross_encoder/usage/usage.html" target="_blank" rel="noreferrer" className="underline underline-offset-2">Sentence Transformers</a> after downloading weights from <a href="https://huggingface.co/ContextualAI/ctxl-rerank-v2-instruct-multilingual-2b" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[8]}>
  <Take>The reranker most RAG stacks ship by default - free, permissive, and multilingual - now an aging baseline that newer open models beat on quality.</Take>

  <ST label="Strengths:">
    <div>Apache 2.0 makes it free to self-host commercially with no asterisks, and it's small enough to run on a typical machine, even CPU.</div>
    <div>Multilingual coverage is proven across 100+ languages, and it's integrated into nearly every RAG framework, so it's the safe, known-quantity starting point.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>It's an older baseline, not a frontier model, and Qwen3's open rerankers beat it on accuracy while staying just as permissive. Long documents are a weak spot: it was tuned for short passages and quietly truncates long chunks unless you raise the limit.</div>
    <div>It's also slow.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://ai.azure.com/catalog/models/baai-bge-reranker-v2-m3" target="_blank" rel="noreferrer" className="underline underline-offset-2">Microsoft Foundry</a> and self-hosted <a href="https://huggingface.co/docs/text-embeddings-inference/index" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face Text Embeddings Inference</a>.</span>],
["Run locally", <span>You can run it locally with <a href="https://www.sbert.net/docs/cross_encoder/usage/usage.html" target="_blank" rel="noreferrer" className="underline underline-offset-2">Sentence Transformers</a> after downloading weights from <a href="https://huggingface.co/BAAI/bge-reranker-v2-m3" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[9]}>
  <Take>The newest Jina reranker is the fastest here and handles the longest documents, thanks to a new listwise design, if you can accept noncommercial weights.</Take>

  <ST label="Strengths:">
    <div>Its listwise design reranks the whole candidate set in one pass instead of scoring documents one by one - the reason it's the fastest model here and a clear step up from v2.</div>
    <div>It also handles the longest context in this list and runs on a typical machine.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>The weights are noncommercial, so shipping it in a commercial product means Jina's paid API - the same catch as Zerank 2 and Contextual.</div>
    <div>It also sits outside our leaderboard, so its quality case rests on Jina's own benchmarks rather than head-to-head results.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://api.jina.ai/docs" target="_blank" rel="noreferrer" className="underline underline-offset-2">Jina AI API</a>, <a href="https://jina.ai/en-US/reranker/" target="_blank" rel="noreferrer" className="underline underline-offset-2">AWS SageMaker</a>, <a href="https://jina.ai/en-US/reranker/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Microsoft Azure</a>, and <a href="https://jina.ai/en-US/reranker/" target="_blank" rel="noreferrer" className="underline underline-offset-2">Google Cloud</a>.</span>],
["Run locally", <span>You can run it locally with <a href="https://huggingface.co/docs/transformers/index" target="_blank" rel="noreferrer" className="underline underline-offset-2">Transformers</a> after downloading weights from <a href="https://huggingface.co/jinaai/jina-reranker-v3" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[10]}>
  <Take>The smallest Qwen3 reranker is the cheapest, most deployable option here - permissive weights that run fast on ordinary hardware, with a lower quality ceiling.</Take>

  <ST label="Strengths:">
    <div>It inherits the Apache 2.0 license, 100+ languages, and 32K context of the larger Qwen3 rerankers, but runs on a typical machine and reranks fast enough for live use.</div>
    <div>It's the cheapest hosted option and a sensible default when cost, latency, and commodity hardware matter more than peak accuracy.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>The ceiling is real: on hard multi-hop questions or nuanced relevance it noticeably trails the 8B and proprietary leaders. This isn't a quality play - it competes on price, speed, and license.</div>
    <div>If accuracy is the bottleneck, step up to Qwen3 4B or a paid API.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://deepinfra.com/Qwen/Qwen3-Reranker-0.6B/api" target="_blank" rel="noreferrer" className="underline underline-offset-2">DeepInfra</a>.</span>],
["Run locally", <span>You can run it locally with <a href="https://www.sbert.net/docs/cross_encoder/usage/usage.html" target="_blank" rel="noreferrer" className="underline underline-offset-2">Sentence Transformers</a> after downloading weights from <a href="https://huggingface.co/Qwen/Qwen3-Reranker-0.6B" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

<ModelCard model={models[11]}>
  <Take>NVIDIA's 1B reranker is fast and strong cross-lingually, but it's built to run as a GPU microservice, which narrows who can realistically use it.</Take>

  <ST label="Strengths:">
    <div>Its standout is cross-lingual retrieval - evaluated across 26 languages with strong results when query and document languages differ, plus solid long-document recall.</div>
    <div>It's genuinely fast, and unlike the noncommercial open models here its weights carry commercial-friendly terms, so you can actually ship it.</div>
  </ST>

  <ST label="Tradeoffs:">
    <div>The supported path needs recent NVIDIA GPUs, so it's a non-starter on CPU or other hardware - the raw weights run elsewhere but unoptimized.</div>
    <div>There's no public per-token price, so cost is infrastructure-based and hard to compare, and context tops out at 8K, the shortest here.</div>
  </ST>

  <AccessBullets
    rows={[
["API", <span>Accessible via <a href="https://docs.nvidia.com/nim/nemo-retriever/text-reranking/latest/" target="_blank" rel="noreferrer" className="underline underline-offset-2">NVIDIA NeMo Retriever Reranking NIM</a>.</span>],
["Run locally", <span>If you have a high-end machine, you can run it with <a href="https://docs.nvidia.com/nim/nemo-retriever/text-reranking/latest/" target="_blank" rel="noreferrer" className="underline underline-offset-2">NVIDIA NIM</a> after downloading weights from <a href="https://huggingface.co/nvidia/llama-nemotron-rerank-1b-v2" target="_blank" rel="noreferrer" className="underline underline-offset-2">Hugging Face</a>.</span>],
]}
  />
</ModelCard>

***

## How to Choose

When choosing between these models, consider:

* **Access:** Decide first whether you'll call a hosted API, use a managed platform, or self-host. Most of the strongest models are API-first; only some open-weight options are realistic to run yourself, and a few of those need a high-end GPU. That one choice drives cost, privacy, latency, and setup work.
* **Quality:** We use the Agentset Rerankers Leaderboard as the score, normalized to 0-100%. It ranks rerankers by head-to-head Elo from preference judgments on real retrieval tasks - a better proxy for "did it put the right chunk on top" than a single accuracy metric. A 0% is the bottom of the measured range, not a broken model, and three highlighted picks (Jina v3, Qwen3 0.6B, Nemotron) aren't on the board yet.
* **Price:** We normalize to USD per 1M reranked tokens for one clean axis. Watch the fine print: Cohere and Voyage bill per search or request natively, so their per-token figures are conversions, and NVIDIA's Nemotron has no public token price at all.
* **Reranking Latency:** Treat the millisecond figures as directional. Most come from Agentset's hosted top-50 benchmark, but Jina v3, Qwen3 0.6B, and Nemotron use a different exact-model GPU benchmark, so they aren't strictly comparable. Use latency mainly to separate "fast enough for live chat" from "batch only" - Qwen3 8B and Contextual v2 are firmly in the second group.

***

## 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/zeroentropy.dev.png"} name={"Zerank 1"} dev={"ZeroEntropy"} url={"https://huggingface.co/zeroentropy/zerank-1-reranker"}>Still-strong prior flagship, but Zerank 2 wins at the same price.</Alt>
  <Alt icon={"/images/icons/cohere.com.png"} name={"Cohere Rerank 3.5"} dev={"Cohere"} url={"https://docs.cohere.com/v2/docs/rerank"}>A common production baseline; Rerank 4 adds much longer context.</Alt>
  <Alt icon={"/images/icons/jina.ai.png"} name={"Jina Reranker v2 Base Multilingual"} dev={"Jina AI"} url={"https://huggingface.co/jinaai/jina-reranker-v2-base-multilingual"}>Compact multilingual predecessor, now superseded by the faster v3.</Alt>
  <Alt icon={"/images/icons/qwen.ai.png"} name={"Qwen3 Reranker 4B"} dev={"Qwen"} url={"https://huggingface.co/Qwen/Qwen3-Reranker-4B"}>The middle size, a quality-speed compromise between 0.6B and 8B.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"mxbai-rerank-large-v2"} dev={"Mixedbread"} url={"https://huggingface.co/mixedbread-ai/mxbai-rerank-large-v2"}>Permissive multilingual model with code retrieval, worth testing for coding RAG.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"GTE Reranker ModernBERT Base"} dev={"Alibaba-NLP"} url={"https://huggingface.co/Alibaba-NLP/gte-reranker-modernbert-base"}>Tiny English reranker with long context and permissive weights.</Alt>
  <Alt icon={"/images/icons/huggingface.co.png"} name={"MS MARCO MiniLM L6 v2"} dev={"Sentence Transformers"} url={"https://huggingface.co/cross-encoder/ms-marco-MiniLM-L6-v2"}>The classic tiny English baseline older RAG tutorials default to.</Alt>
</div>

***

## Frequently Asked Questions

<AccordionGroup>
  <Accordion title={"What's the best reranker for RAG right now?"}>
    Zerank 2. It tops our leaderboard on ranking quality while staying among the fastest and cheapest hosted options. The catch is licensing: its open weights are noncommercial, so most teams use its metered API rather than self-hosting. If you want a fully commercial, closed managed service instead, Cohere Rerank 4 Pro is the closest rival.
  </Accordion>

  <Accordion title={"What's the best reranker for most people?"}>
    For most RAG pipelines, Voyage Rerank 2.5 or Cohere Rerank 4 Pro are the safe managed defaults - high quality, long context, and no infrastructure to run. If cost matters more than the last few points of accuracy, Voyage 2.5 Lite and Qwen3 Reranker 0.6B are strong value picks.
  </Accordion>

  <Accordion title={"What's the best open-source reranker I can self-host?"}>
    For permissive, ship-it-anywhere weights, Qwen3 Reranker (0.6B on typical hardware, 8B if you have a GPU and can accept high latency) and BGE Reranker v2 M3 are the cleanest choices, all Apache 2.0. Zerank 1 Small is the fast, small option under the same terms. Watch out: several "open" rerankers, including Zerank 2, Jina v3, and Contextual v2, are noncommercial.
  </Accordion>

  <Accordion title={"Do I even need a reranker?"}>
    Usually, yes - reranking is often the cheapest way to lift answer quality, because it fixes the order of what you already retrieved. But it only helps when the right chunk is somewhere in your top results and just ranked too low. If recall is bad and the right chunk isn't retrieved at all, fix retrieval first; a reranker can't surface what isn't there.
  </Accordion>

  <Accordion title={"Is Cohere Rerank 4 better than Voyage Rerank 2.5?"}>
    It depends on the metric. Cohere Rerank 4 Pro leads on preference-based ranking and covers more languages; Voyage 2.5 leads on pure retrieval-accuracy metrics and adds instruction-following, which Cohere lacks. Pick Cohere for broad multilingual enterprise content, Voyage when you want to steer ranking with instructions. They're close enough to test both on your data.
  </Accordion>

  <Accordion title={"Does \"open weight\" mean I can use it commercially?"}>
    No, and this is the biggest trap in the category. Several top open-weight rerankers - Zerank 2, Jina Reranker v3, Contextual v2 - ship under noncommercial licenses, so using the weights in a product needs a paid agreement. For unrestricted commercial self-hosting, stick to Apache 2.0 models like Qwen3, BGE v2 M3, and Zerank 1 Small.
  </Accordion>

  <Accordion title={"Do reranker benchmarks match real-world use?"}>
    Roughly, but not perfectly. Leaderboard rank tells you which models are contenders, yet the order shifts with your domain, language, and document length - and a model that tops academic tests, like Qwen3 8B, can land mid-pack on preference-based ranking. Treat the score as a shortlist filter, then measure your top two or three on your own queries.
  </Accordion>
</AccordionGroup>
