Model reference · open weights
jina-embeddings-text-small-clustering is an open-weight embedding model from jinaai. jina-embeddings-v5-text-small-clustering-GGUF (GGUF) weighs 397 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 jinaai/jina-embeddings-v5-text-small-clustering model card, 2026-10-01. The estimate below is for another build of the family.
What it is
| Released by | jinaai |
|---|---|
| Released | 2026-02-10 |
| Parameters | 596M |
| VRAM | 397 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 |
|---|---|---|---|---|
| jina-embeddings-v5-text-small-clustering ↗ 14 builds: IQ1_S 208 MB … F16 1.2 GB |
596M | BF16 | 397 MB | RTX 3060 12 GB |
| jina-embeddings-v5-text-small-clustering-GGUF (above) ↗ 14 builds: IQ1_S 208 MB … F16 1.2 GB |
GGUF | 397 MB | RTX 3060 12 GB |
From the model card
Elastic Inference Service | ArXiv | Release Note | Blog
jina-embeddings-v5-text-small-clustering is a compact, high-performance text embedding model designed for clustering.
It is part of the jina-embeddings-v5-text model family, which also includes jina-embeddings-v5-text-nano, a smaller model for more resource-constrained use cases.
Trained using a novel approach that combines distillation with task-specific contrastive losses, jina-embeddings-v5-text-small-clustering outperforms existing state-of-the-art models of similar size across diverse embedding benchmarks.
| Feature | Value |
|---|---|
| Parameters | 677M |
| Supported Tasks | clustering |
| Max Sequence Length | 32768 |
| Embedding Dimension | 1024 |
| Matryoshka Dimensions | 32, 64, 128, 256, 512, 768, 1024 |
| Pooling Strategy | Last-token pooling |
| Base Model | jinaai/jina-embeddings-v5-text-small |
For training details and evaluation results, see our technical report.
The following Python packages are required:
transformers>=5.1.0torch>=2.8.0peft>=0.15.2vllm>=0.15.1sentence-transformers interface, install this package as well.The fastest way to use v5-text in production. Elastic Inference Service (EIS) provides managed embedding inference with built-in scaling, so you can generate embeddings directly within your Elastic deployment.
PUT _inference/text_embedding/jina-v5
{
"service": "elastic",
"service_settings": {
"model_id": "jina-embeddings-v5-text-small"
}
}
See the Elastic Inference Service documentation for setup details.
from sentence_transformers import SentenceTransformer
import torch
model = SentenceTransformer(
"jinaai/jina-embeddings-v5-text-small-clustering",
model_kwargs={"dtype": torch.bfloat16}, # Recommended for GPUs
config_kwargs={"_attn_implementation": "flash_attention_2"}, # Recommended but optional
)
# Optional: set truncate_dim in encode() to control embedding size
texts = [
"We propose a novel neural network architecture for image segmentation.",
"This paper analyzes the effects of monetary policy on inflation.",
"Our method achieves state-of-the-art results on object detection benchmarks.",
"We study the relationship between interest rates and housing prices.",
"A new attention mechanism is introduced for visual recognition tasks.",
]
# Encode texts
embeddings = model.encode(texts)
print(embeddings.shape)
# (5, 1024)
similarity = model.similarity(embeddings, embeddings)
print(similarity)
# tensor([[1.0000, 0.2983, 0.8631, 0.3098, 0.9106],
# [0.2983, 1.0000, 0.3257, 0.8041, 0.3201],
# [0.8631, 0.3257, 1.0000, 0.3263, 0.9007],
# [0.3098, 0.8041, 0.3263, 1.0000, 0.3122],
# [0.9106, 0.3201, 0.9007, 0.3122, 1.0000]])
from vllm import LLM#
from vllm.config.pooler import PoolerConfig
# Initialize model
name = "jinaai/jina-embeddings-v5-text-small-clustering"
model = LLM(
model=name,
dtype="float16",
runner="pooling",
pooler_config=PoolerConfig(seq_pooling_type="LAST", normalize=True)
)
# Create text prompts
document1 = "Overview of climate change impacts on coastal cities"
document1_prompt = f"Document: {document1}"
document2 = "The impacts of climate change on large cities"
document2_prompt = f"Document: {document2}"
# Encode all prompts
prompts = [document1_prompt, document2_prompt]
outputs = model.encode(prompts, pooling_task="embed")
embed_document1 = outputs[0].outputs.data
embed_document2 = outputs[1].outputs.data
docker run -p 8080:80 \
ghcr.io/huggingface/text-embeddings-inference:cpu-1.9 \
--model-id jinaai/jina-embeddings-v5-text-small-clustering \
--dtype float32 --pooling last-token
docker run --gpus all --shm-size 1g -p 8080:80 \
ghcr.io/huggingface/text-embeddings-inference:cuda-1.9 \
--model-id jinaai/jina-embeddings-v5-text-small-clustering \
--dtype float16 --pooling last-token
Alternatively, you can also run with
cargo, more information can be found in the Text Embeddings Inference documentation.
Send a request to /v1/embeddings to generate embeddings via the OpenAI Embeddings API:
curl -X POST http://127.0.0.1:8080/v1/embeddings \
-H "Content-Type: application/json" \
-d '{
"model": "jinaai/jina-embeddings-v5-text-small-clustering",
"input": [
"Document: The impacts of climate change on coastal cities are significant...",
]
}'
Or rather via the Text Embeddings Inference API specification instead, to prevent from manually formatting the inputs:
curl -X POST http://127.0.0.1:8080/embed \
-H "Content-Type: application/json" \
-d '{
"inputs": "Overview of climate change impacts on coastal cities",
"prompt_name": "document",
}'
After installing llam
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.