Pretrained Models
The sentence-transformers tag
on the Hugging Face Hub is the list that stays current, and we are working to get it onto every model that works
with MultiVectorEncoder. The tables below are what we test against directly, so
treat them as a starting point rather than the full set. For text retrieval in particular, any PyLate or
Stanford-NLP ColBERT checkpoint loads whether or not it carries the tag yet.
Models integrate seamlessly with this simple interface:
from sentence_transformers import MultiVectorEncoder
# Download from the 🤗 Hub
model = MultiVectorEncoder("lightonai/LateOn")
# Run inference
queries = ["What is the capital of France?"]
documents = [
"Paris is the capital of France.",
"Berlin is the capital of Germany.",
]
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings[0].shape, document_embeddings[0].shape)
# (10, 128) (9, 128) - one 128-dimensional vector per token
# Get the late-interaction (MaxSim) similarity scores for the embeddings
similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
# tensor([[9.1129, 8.8769]])
Text Retrieval Models
These load with their trained prefix tokens, query expansion, and punctuation skiplist recovered from the saved configuration. Where a revision is listed, pass it until the pull request on that repository is merged, after which the plain model name is enough.
The NanoBEIR column reports the mean NDCG@10 (higher is better) across the 13 NanoBEIR datasets, each a 50-query subsample of a BEIR dataset, as a fast proxy for English text retrieval quality. We used the MultiVectorNanoBEIREvaluator to compute the scores for the primarily-English models. A - means the model was not evaluated on it. Note that NanoBEIR is a small benchmark, and its scores aren’t a substitute for evaluating on your own data, which is always the right way to pick a model.
Visual Document Retrieval Models
ColPali-style models embed page images as documents and text as queries.
The NanoViDoRe column reports the mean NDCG@10 (higher is better) across NanoViDoRe v3, a compact visual document retrieval benchmark spanning 8 subsets (computer science, energy, finance in English and French, HR, industrial, pharmaceuticals, and physics). Like with NanoBEIR, NanoViDoRe is a small benchmark which shouldn’t replace evaluation on your own data.
| Model | Parameters | Dimensionality | NanoViDoRe | Notes |
|---|---|---|---|---|
| webAI-Official/webAI-ColVec1.1-8b | 8.4B | 640 | 0.6580 | needs trust_remote_code=True |
| webAI-Official/webAI-ColVec1.1-4b | 4.5B | 640 | 0.6520 | needs trust_remote_code=True |
| tencent/EVIE-Preview-4.5B | 4.54B | 128 | 0.6405 | - |
| TomoroAI/tomoro-colqwen3-embed-8b | 8.8B | 320 | 0.6206 | needs trust_remote_code=True |
| TomoroAI/tomoro-colqwen3-embed-4b | 4.4B | 320 | 0.6019 | needs trust_remote_code=True |
| vidore/colqwen2.5-v0.2 | 3.8B | 128 | 0.5402 | - |
| vidore/colqwen2.5-v0.1 | 3.8B | 128 | 0.5395 | - |
| vidore/colqwen-omni-v0.1 | 4.4B | 128 | 0.5309 | - |
| vidore/colpali-v1.3 | 2.9B | 128 | 0.4802 | - |
| vidore/colpali-v1.3-hf | 2.9B | 128 | 0.4793 | - |
| vidore/colpali-v1.2 | 2.9B | 128 | 0.4691 | - |
| vidore/colqwen2-v1.0 | 2.2B | 128 | 0.4685 | - |
| vidore/colqwen2-v0.1 | 2.2B | 128 | 0.4526 | - |
| vidore/colpali | 2.9B | 128 | 0.4516 | - |
| vidore/colpali-v1.1 | 2.9B | 128 | 0.4314 | - |
| vidore/colsmolvlm-v0.1 | 2.1B | 128 | 0.4054 | - |
| vidore/colpali-hard-v1.1 | 2.9B | 128 | 0.3949 | - |
| vidore/colSmol-500M | 507M | 128 | 0.3459 | - |
| vidore/colSmol-256M | 256M | 128 | 0.2673 | - |
| ModernVBERT/colmodernvbert | 252M | 128 | 0.2632 | - |
| vidore/colpali-v1.2-hf | 2.9B | 128 | - | - |
| vidore/colqwen2-v1.0-hf | 2.2B | 128 | - | - |
Most of these are LoRA adapter repositories, with the adapter applied directly onto its base at load time. Some also have a -merged sibling on the Hub (e.g. vidore/colpali-v1.3-merged) with the adapter already folded into the weights.
The three -hf entries are the transformers-native *ForRetrieval ports. They load without any configuration, but use more modeling from transformers and less from sentence_transformers. Generally, it’s preferable to use the original models instead, as the ports score approximately the same.