Model reference · open weights
NeoMME-Retriever-ST-dense is an open-weight embedding model from Hcompany. NeoMME-260M-Retriever-ST-dense (BF16) weighs 526 MB; the smallest configuration that runs it is RTX 3060 12 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the Hcompany/NeoMME-260M-Retriever-ST-dense model card, 2026-10-01
What it is
| Released by | Hcompany |
|---|---|
| Released | 2026-08-14 |
| Parameters | 263M |
| VRAM | 526 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 |
From the model card
[!IMPORTANT] NeoMME-Retriever (260M) variants:
- Default (
transformers): Returns dense and multi-vector embeddings together with a single forward pass. Recommended for most use cases and inference.- ST dense [current]: Supports independent dense fine-tuning with Sentence Transformers.
- ST late-interaction: Supports independent multi-vector fine-tuning with Sentence Transformers.
NeoMME-260M-Retriever-ST-dense is a model for multimodal document retrieval. Fine-tuned from NeoMME-260M, it encodes text queries and documents (text or page screenshots) using one shared bidirectional Transformer encoder.
This model can be used with Sentence Transformers, but can only generate dense embeddings.
Dense embeddings are L2-normalized and use cosine similarity. They match NeoMMEForRetrieval.dense_embeddings.
All scores use the metric shown at the full trained dimensions. Higher is better. ViDoRe v3, v2, and v1 measure visual document retrieval, while BEIR-15 measures text retrieval.
pip install -U "sentence-transformers[image]"
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Hcompany/NeoMME-260M-Retriever-ST-dense")
queries = [
"Quelle partie de la production pétrolière du Kazakhstan provient de champs en mer ?",
"Which hour of the day had the highest overall electricity generation in 2019?",
]
documents = [
"https://github.com/tonywu71/colpali-cookbooks/blob/main/examples/data/shift_kazakhstan.jpg?raw=true",
"https://github.com/tonywu71/colpali-cookbooks/blob/main/examples/data/energy_electricity_generation.jpg?raw=true",
]
query_embeddings = model.encode_query(queries, convert_to_tensor=True)
document_embeddings = model.encode_document(documents, convert_to_tensor=True)
scores = model.similarity(query_embeddings, document_embeddings)
# Expected: scores[0, 0] > scores[0, 1] and scores[1, 1] > scores[1, 0].
print(scores)
The score tensor has shape (num_queries, num_documents) and scores[i, j] is the score between query i and document j. A larger value indicates a closer match.
NeoMME-260M-Retriever was fine-tuned from NeoMME-260M on text retrieval and document-page images. Training uses a joint late-interaction and Matryoshka dense contrastive objective.
The NeoMME technical report describes the full fine-tuning recipe.
With Sentence Transformers, only one of the two retrieval heads can be used at a time.
Model weights are released under the Apache 2.0 license.
@misc{lac2026neommesingletowermultimodalnativemultilingual,
title={NeoMME: A Single-Tower Multimodal-Native Multilingual Foundation Encoder for Efficient Fine-Tuning and Inference},
author={Aurélien Lac and Tony Wu},
year={2026},
eprint={2609.01657},
archivePrefix={arXiv},
primaryClass={cs.IR},
url={https://arxiv.org/abs/2609.01657},
}
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.