Instructions to use jinaai/jina-embeddings-v5-text-small-clustering with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- sentence-transformers
How to use jinaai/jina-embeddings-v5-text-small-clustering with sentence-transformers:
from sentence_transformers import SentenceTransformer model = SentenceTransformer("jinaai/jina-embeddings-v5-text-small-clustering") sentences = [ "The weather is lovely today.", "It's so sunny outside!", "He drove to the stadium." ] embeddings = model.encode(sentences) similarities = model.similarity(embeddings, embeddings) print(similarities.shape) # [3, 3] - llama-cpp-python
How to use jinaai/jina-embeddings-v5-text-small-clustering with llama-cpp-python:
# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="jinaai/jina-embeddings-v5-text-small-clustering", filename="v5-small-clustering-F16.gguf", )
llm.create_chat_completion( messages = "\"Today is a sunny day and I will get some ice cream.\"" )
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use jinaai/jina-embeddings-v5-text-small-clustering with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M # Run inference directly in the terminal: llama cli -hf jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M # Run inference directly in the terminal: llama cli -hf jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M
Use Docker
docker model run hf.co/jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M
- LM Studio
- Jan
- Ollama
How to use jinaai/jina-embeddings-v5-text-small-clustering with Ollama:
ollama run hf.co/jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M
- Unsloth Studio
How to use jinaai/jina-embeddings-v5-text-small-clustering with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for jinaai/jina-embeddings-v5-text-small-clustering to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for jinaai/jina-embeddings-v5-text-small-clustering to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for jinaai/jina-embeddings-v5-text-small-clustering to start chatting
- Pi
How to use jinaai/jina-embeddings-v5-text-small-clustering with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M
Configure the model in Pi
# Install Pi: npm install -g @mariozechner/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent new
How to use jinaai/jina-embeddings-v5-text-small-clustering with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M
Run Hermes
hermes
- Atomic Chat new
- OpenClaw new
How to use jinaai/jina-embeddings-v5-text-small-clustering with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
- Docker Model Runner
How to use jinaai/jina-embeddings-v5-text-small-clustering with Docker Model Runner:
docker model run hf.co/jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M
- Lemonade
How to use jinaai/jina-embeddings-v5-text-small-clustering with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull jinaai/jina-embeddings-v5-text-small-clustering:Q4_K_M
Run and chat with the model
lemonade run user.jina-embeddings-v5-text-small-clustering-Q4_K_M
List all available models
lemonade list
Add Sentence Transformers compatibility
Hello!
Pull Request overview
- Add Sentence Transformers compatibility
- Add ST snippet to README
Details
I noticed that because this model doesn't use the adapter work like the main model, this model can actually be implemented without any trust_remote_code in Sentence Transformers. That might be pretty valuable for users. I just loaded the model with SentenceTransformer, saved it with save_pretrained("tmp"), updated the default pooling config with lasttoken pooling instead, and added a Normalize to the modules.json.
Try it out
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
revision="refs/pr/1",
)
# 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 query and documents
embeddings = model.encode(texts)
print(embeddings.shape)
# (5, 1024)
similarity = model.similarity(embeddings, embeddings)
print(similarity)
# tensor([[1.0000, 0.2303, 0.8060, 0.2309, 0.8487],
# [0.2303, 1.0000, 0.2552, 0.7400, 0.2543],
# [0.8060, 0.2552, 1.0000, 0.2344, 0.8542],
# [0.2309, 0.7400, 0.2344, 1.0000, 0.2279],
# [0.8487, 0.2543, 0.8542, 0.2279, 1.0000]])
Note the revision argument. I got this result with the script:
# tensor([[1.0000, 0.2303, 0.8060, 0.2309, 0.8487],
# [0.2303, 1.0000, 0.2552, 0.7400, 0.2543],
# [0.8060, 0.2552, 1.0000, 0.2344, 0.8542],
# [0.2309, 0.7400, 0.2344, 1.0000, 0.2279],
# [0.8487, 0.2543, 0.8542, 0.2279, 1.0000]])
Compared to this output when using the original model with the clustering task:
tensor([[1.0000, 0.2291, 0.8063, 0.2307, 0.8483],
[0.2291, 1.0000, 0.2551, 0.7410, 0.2542],
[0.8063, 0.2551, 1.0000, 0.2353, 0.8544],
[0.2307, 0.7410, 0.2353, 1.0000, 0.2286],
[0.8483, 0.2542, 0.8544, 0.2286, 1.0000]])
I believe the small difference is likely due to the adapter loading vs already being merged into the model.
- Tom Aarsen
I ran some more tests following my findings from https://huggingface.co/jinaai/jina-embeddings-v5-text-small/discussions/7. Here are the new results using fp32:
Main model using Transformers (fp32):
tensor([[1.0000, 0.2975, 0.8637, 0.3093, 0.9112],
[0.2975, 1.0000, 0.3258, 0.8044, 0.3199],
[0.8637, 0.3258, 1.0000, 0.3261, 0.9011],
[0.3093, 0.8044, 0.3261, 1.0000, 0.3119],
[0.9112, 0.3199, 0.9011, 0.3119, 1.0000]])
Main model using Sentence Transformers (fp32, after https://huggingface.co/jinaai/jina-embeddings-v5-text-small/discussions/7):
tensor([[1.0000, 0.2975, 0.8637, 0.3093, 0.9112],
[0.2975, 1.0000, 0.3258, 0.8044, 0.3199],
[0.8637, 0.3258, 1.0000, 0.3261, 0.9011],
[0.3093, 0.8044, 0.3261, 1.0000, 0.3119],
[0.9112, 0.3199, 0.9011, 0.3119, 1.0000]])
This PR (fp32, before updating default_prompt_name)
tensor([[1.0000, 0.2293, 0.8060, 0.2306, 0.8497],
[0.2293, 1.0000, 0.2544, 0.7417, 0.2549],
[0.8060, 0.2544, 1.0000, 0.2343, 0.8543],
[0.2306, 0.7417, 0.2343, 1.0000, 0.2292],
[0.8497, 0.2549, 0.8543, 0.2292, 1.0000]])
This PR (fp32, after updating default_prompt_name)
tensor([[1.0000, 0.2974, 0.8636, 0.3091, 0.9111],
[0.2974, 1.0000, 0.3257, 0.8043, 0.3199],
[0.8636, 0.3257, 1.0000, 0.3260, 0.9009],
[0.3091, 0.8043, 0.3260, 1.0000, 0.3119],
[0.9111, 0.3199, 0.9009, 0.3119, 1.0000]])
In short, the results after updating the default_prompt_name are very close, and I think this PR is now correct & ready.
- Tom Aarsen