Xunzhuo/vsr-embeddings-v1-text-nano
VSR Embeddings v1 Text Nano
A compact multilingual encoder for semantic routing, matching, and local-evidence retrieval.
Xunzhuo/vsr-embeddings-v1-text-nano is the lowest-latency member of the VSR text embedding family. It is designed for always-on router paths where a bidirectional encoder, adjustable vector width, and predictable memory use are more valuable than decoder-scale capacity.
Why It Is Different
Router-sized bidirectional encoding
The model encodes both sides of every pair independently and uses the full left and right context of each token. This is a practical fit for high-QPS semantic cache lookup, model-card retrieval, request deduplication, clustering, and prototype classification.
Matryoshka dimensions
The native 768-dimensional vector can be truncated to 512, 256, 128, or 64 dimensions and re-normalized. Deployments can choose index memory and latency without maintaining unrelated model families.
Long-document local evidence
The encoder has a 32K positional architecture. For retrieval, VSR uses short overlapping chunks and query-to-chunk max-sim so a small decisive passage is not diluted by one global document vector. Direct encoding and long-document retrieval are intentionally separate contracts.
Signals stay auditable
This repository contains generic semantic geometry, not domain, jailbreak, fact-check, feedback, modality, or PII classifiers. Those fixed-label APIs live in Xunzhuo/vsr-detector-v1-text-nano, where each signal has an independent adapter, head, and calibration contract.
Quality
The private vector covers semantic similarity, relation boundaries, multilingual retrieval, long documents, generic linear classification, and clustering. No router signal labels are used as embedding objectives.
MI300X Profile
The frozen BF16 profile uses approximately 128-token inputs and batch size 64.
All five declared Matryoshka widths produced finite, unit-normalized vectors after truncation and re-normalization.
Usage
import torch
from sentence_transformers import SentenceTransformer
model = SentenceTransformer(
"Xunzhuo/vsr-embeddings-v1-text-nano",
trust_remote_code=True,
)
vectors = model.encode(
[
"Route this request to a multilingual reasoning model.",
"Choose a model that can reason across languages.",
],
normalize_embeddings=True,
)
# Matryoshka truncation for a smaller index.
vectors_128 = torch.nn.functional.normalize(
torch.as_tensor(vectors[:, :128]), p=2, dim=-1
).numpy()For long-document retrieval, split documents into fixed-size overlapping chunks, encode the query and chunks, and use the maximum query-to-chunk cosine score.
Family Guidance
Use nano when latency, CPU/GPU memory, or local deployment dominates. Use small or large when broad multilingual leaderboard quality is the primary constraint.
Limitations
- A 32K positional architecture does not make one pooled 32K vector the best retrieval representation. Prefer chunked max-sim for long documents.
- Vector similarity is not a calibrated safety or policy decision.
- Evaluate the chosen Matryoshka width on the target index before deployment.
License
Apache-2.0. The model is compatible with Sentence Transformers and standard Transformers feature-extraction workflows.
