Model reference · open weights
mxbai-edge-colbert is an open-weight embedding model from mixedbread-ai. mxbai-edge-colbert-v0-32m (FP32) weighs 64 MB; the smallest configuration that runs it is RTX 3060 12 GB.
Summary of the mixedbread-ai/mxbai-edge-colbert-v0-32m model card, 2026-10-01
What it is
| Released by | mixedbread-ai |
|---|---|
| Released | 2025-10-13 |
| Parameters | 32M |
| VRAM | 64 MB for the weights |
What it runs on
| Card | Runs | Memory |
|---|---|---|
| RTX 3060 12 GB | fits | 11.6 GB |
| RTX 4060 Ti 16 GB | fits | 15.4 GB |
| RTX 3090 24 GB | fits | 23.4 GB |
| RTX 4090 24 GB | fits | 23.4 GB |
| RTX 5090 32 GB | fits | 31.0 GB |
| L40S 48 GB | fits | 44.0 GB |
| A100 80 GB | fits | 78.2 GB |
| H100 80 GB | fits | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | fits | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | fits | 107 GB |
| H200 141 GB | fits | 138 GB |
| B200 180 GB | fits | 176 GB |
Builds
| Build | Params | Precision | Weights | Smallest setup |
|---|---|---|---|---|
| mxbai-edge-colbert-v0-32m (above) ↗ | 32M | FP32 | 64 MB | RTX 3060 12 GB |
| mxbai-edge-colbert-v0-17m ↗ | 17M | FP32 | 34 MB | RTX 3060 12 GB |
From the model card
This model is a lightweight, 32 million parameter ColBERT with a projection dimension of 64. It is built on top of Ettin-32M, meaning it benefits from all of ModernBERT's architectural efficiencies. Despite this extreme efficiency, it is the best-performer "edge-sized" retriever, outperforming ColBERTv2 and many models with over 10 times more parameters. It can create multi-vector representations for documents of up to 32,000 tokens and is fully compatible with the PyLate library.
This model can be used with Sentence Transformers as a multi-vector (ColBERT-style late interaction) retriever via the MultiVectorEncoder:
pip install "sentence-transformers>=6.0.0"
from sentence_transformers import MultiVectorEncoder
model = MultiVectorEncoder("mixedbread-ai/mxbai-edge-colbert-v0-32m")
query = "Which planet is known as the Red Planet?"
documents = [
"Venus is often called Earth's twin because of its similar size and proximity.",
"Mars, known for its reddish appearance, is often referred to as the Red Planet.",
"Jupiter, the largest planet in our solar system, has a prominent red spot.",
"Saturn, famous for its rings, is sometimes mistaken for the Red Planet.",
]
query_embeddings = model.encode_query(query)
document_embeddings = model.encode_document(documents)
print(query_embeddings.shape, document_embeddings[0].shape)
# (12, 64) (18, 64)
# MaxSim late-interaction scoring (higher is more relevant)
scores = model.similarity(query_embeddings, document_embeddings)
print(scores)
# tensor([[11.2081, 11.5308, 11.4104, 11.4756]])
To use this model, you first need to install PyLate:
via uv
# uv
uv add pylate
# uv + pip
uv pip install pylate
or pip
# pip
pip install -U pylate
Once installed, the model is immediately ready to use to generate representations and index documents:
from pylate import indexes, models, retrieve
# Step 1: Load the model
model = models.ColBERT(
model_name_or_path="mixedbread-ai/mxbai-edge-colbert-v0-32m",
)
# Step 2: Initialize an index (here, PLAID, for larger document collections)
index = indexes.PLAID(
index_folder="pylate-index",
index_name="index",
override=True, # This overwrites the existing index if any
)
# Step 3: Encode your documents
documents_ids = ["1", "2", "3"]
documents = ["document 1 text", "document 2 text", "document 3 text"]
documents_embeddings = model.encode(
documents,
batch_size=32,
is_query=False, # Ensure that it is set to False to indicate that these are documents, not queries
show_progress_bar=True,
)
# Step 4: Add document embeddings to the index by providing embeddings and corresponding ids
index.add_documents(
documents_ids=documents_ids,
documents_embeddings=documents_embeddings,
)
That's all you need to do to encode a full collection! Your documents are indexed and ready to be queried:
# Step 5.1: Initialize the ColBERT retriever
retriever = retrieve.ColBERT(index=index)
# Step 2: Encode the queries
queries_embeddings = model.encode(
["query for document 3", "query for document 1"],
batch_size=32,
is_query=True, # # Ensure that it is set to False to indicate that these are queries
show_progress_bar=True,
)
# Step 3: Retrieve top-k documents
scores = retriever.retrieve(
queries_embeddings=queries_embeddings,
k=10, # Retrieve the top 10 matches for each query
)
Thanks to its extreme parameter efficiency, this model is particularly well-suited to being used as a re-ranker following an even more lightweight first stage retrieval, such as static embeding models. Re-ranking is just as straigthforward:
from pylate import rank, models
# Load the model
model = models.ColBERT(
model_name_or_path="mixedbread-ai/mxbai-edge-colbert-v0-32m",
)
# Define queries and documents
queries = [
"query A",
"query B",
]
documents = [
["document A", "document B"],
["document 1", "document C", "document B"],
]
documents_ids = [
[1, 2],
[1, 3, 2],
]
# Embed them
queries_embeddings = model.encode(
queries,
is_query=True,
)
documents_embeddings = model.encode(
documents,
is_query=False,
)
# Perform reranking
reranked_documents = rank.rerank(
documents_ids=documents_ids,
queries_embeddings=queries_embeddings,
documents_embeddings=documents_embeddings,
)
| Model | AVG | MS MARCO | SciFact | Touche | FiQA | TREC-COVID | NQ | DBPedia |
|---|---|---|---|---|---|---|---|---|
| Large Models (>100M) | ||||||||
| GTE-ModernColBERT-v1 | 0.547 | 0.453 | 0.763 | 0.312 | 0.453 | 0.836 | 0.618 | 0.480 |
| ColBERTv2 | 0.488 | 0.456 | 0.693 | 0.263 | 0.356 | 0.733 | 0.562 | 0.446 |
| Medium Models (<35M) | ||||||||
| mxbai-edge-colbert-v0-32m | 0.521 | 0.450 | 0.740 | 0.313 | 0.390 | 0.775 | 0.600 | 0.455 |
| answerai-colbert-small-v1 | 0.534 | 0.434 | 0.740 | 0.250 | 0.410 | 0.831 | 0.594 | 0.464 |
| bge-small-en-v1.5 | 0.517 | 0.408 | 0.713 | 0.260 | 0.403 | 0.759 | 0.502 | 0.400 |
| snowflake-s | 0.519 | 0.402 | 0.722 | 0.235 | 0.407 | 0.801 | 0.509 | 0.410 |
| Small Models (<25M) |
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.
Benchmarks
As published on the model card: the maker's own numbers, not measured by AxForge.
| Task | Dataset | Metric | Score |
|---|---|---|---|
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Accuracy@1 | 0.280 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Accuracy@3 | 0.400 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Accuracy@5 | 0.520 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Accuracy@10 | 0.760 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Precision@1 | 0.280 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Precision@3 | 0.153 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Precision@5 | 0.132 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Precision@10 | 0.114 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Recall@1 | 0.132 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Recall@3 | 0.196 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Recall@5 | 0.269 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Recall@10 | 0.432 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Ndcg@10 | 0.321 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Mrr@10 | 0.387 |
| Py Late Information Retrieval | NanoClimateFEVER | Maxsim Map@100 | 0.244 |
| Py Late Information Retrieval | NanoDBPedia | Maxsim Accuracy@1 | 0.780 |
| Py Late Information Retrieval | NanoDBPedia | Maxsim Accuracy@3 | 0.920 |
| Py Late Information Retrieval | NanoDBPedia | Maxsim Accuracy@5 | 0.940 |
| Py Late Information Retrieval | NanoDBPedia | Maxsim Accuracy@10 | 0.980 |
| Py Late Information Retrieval | NanoDBPedia | Maxsim Precision@1 | 0.780 |
| Py Late Information Retrieval | NanoDBPedia | Maxsim Precision@3 | 0.647 |
| Py Late Information Retrieval | NanoDBPedia | Maxsim Precision@5 | 0.600 |
| Py Late Information Retrieval | NanoDBPedia | Maxsim Precision@10 | 0.530 |
| Py Late Information Retrieval | NanoDBPedia | Maxsim Recall@1 | 0.112 |