Jina Reranker
Jina’s 2026 flagship is jina-reranker-v3: a 0.6B listwise reranker built on Qwen3-0.6B that scores up to 64 documents inside one 131K-token context and reaches 61.94 nDCG@10 on BEIR — ahead of Qwen3-Reranker-4B at roughly a sixth of the size. Older v2 pairwise models remain useful; v1-tiny is still what runs in our browser demo.
Model variants
| Model | Size | Languages | Notes |
|---|---|---|---|
jina-reranker-v3 | 0.6B | 100+ langs | Flagship 2026 — listwise, 64 docs in 131K ctx, 61.94 BEIR |
jina-reranker-v2-base-multilingual | ~278 MB | 100+ langs | Prior multilingual pair-wise flagship |
jina-reranker-v1-base-en | ~278 MB | English | English baseline |
jina-reranker-v1-tiny-en | ~33 MB | English | Browser / edge; powers our demo |
What listwise v3 changes
Classic cross-encoders score each (query, doc) independently. Listwise models see a slate of candidates at once, which can improve relative ordering when many passages share vocabulary. The trade-off is higher memory and a different serving path than MiniLM-style pair scoring.
v3 reports 61.94 nDCG@10 on BEIR — level with the strongest cross-encoders in our table while being small enough to serve on a single GPU, and ahead of Qwen3-Reranker-4B despite being 6× smaller. Architecturally it takes contextual embeddings from each document’s final token after causal attention across the whole slate, rather than scoring pairs late. Details in the v3 paper; confirm model IDs and limits on jina.ai/reranker.
Pricing
| Tier | Price |
|---|---|
| Free tier | 1 M tokens/month free — no credit card |
| Pay-as-you-go | ~$0.018 / 1M tokens |
Token-based pricing is friendlier for long documents than per-call pricing. Check the Jina AI website for current rates.
Quick start
Hosted API (Python)
import requests
def rerank(query: str, documents: list[str], top_n: int = 5) -> list[str]:
resp = requests.post(
"https://api.jina.ai/v1/rerank",
headers={"Authorization": "Bearer YOUR_KEY", "Content-Type": "application/json"},
json={
"model": "jina-reranker-v3", # or jina-reranker-v2-base-multilingual
"query": query,
"documents": documents,
"top_n": top_n,
},
).json()
return [documents[r["index"]] for r in resp["results"]]
Self-hosted (sentence-transformers)
from sentence_transformers import CrossEncoder
# Open weights — same model, self-hosted
model = CrossEncoder("jinaai/jina-reranker-v2-base-multilingual",
trust_remote_code=True, max_length=1024)
scores = model.predict([(query, doc) for doc in documents])
ranked = sorted(zip(scores, documents), reverse=True)
Browser / edge use
The v1-tiny model (33 MB quantised) loads via transformers.js in under 10 seconds on a typical broadband connection and runs scoring at ~200 ms for a 10-candidate batch. This is what powers our demo:
// transformers.js (ES module in the browser)
import { AutoTokenizer, AutoModelForSequenceClassification }
from "https://cdn.jsdelivr.net/npm/@huggingface/transformers@3";
const tokenizer = await AutoTokenizer.from_pretrained(
"jinaai/jina-reranker-v1-tiny-en", { dtype: "q8" }
);
const model = await AutoModelForSequenceClassification.from_pretrained(
"jinaai/jina-reranker-v1-tiny-en", { dtype: "q8" }
);
const inputs = tokenizer([query, query], {
text_pair: [doc1, doc2],
padding: true, truncation: true,
});
const { logits } = await model(inputs);
const scores = logits.sigmoid().tolist();
Pros and cons
Pros
- 61.94 BEIR nDCG@10 from only 0.6B parameters
- Dual-mode: hosted API + open weights
- Tiny variant still runs in the browser (our demo)
- Generous free tier (1M tokens/month, no card needed)
- Token-based pricing suits long documents
Cons
- v1-tiny is English-only and lower quality
- Smaller company than Cohere — less ecosystem tooling
- Self-hosted requires
trust_remote_code=True - Token pricing can be opaque for short passages
jina-reranker-v1-tiny powers this demo
See it score your own passages live in the browser — no API key, no data leaving the page.
Open the demo →