Views
No views yet
voyageai/voyage-4-nano converted for MLX,
so it runs on Apple silicon. Near-lossless at roughly half the size.voyage-4-nano is not served by the Voyage API — the open checkpoint is the only
way to run it. Embeddings from this port land in the same space as the hosted
voyage-4 models, so you can index locally and query with those: same-text cosine
0.969 against voyage-4-lite, 0.952 against voyage-4, 0.894 against
voyage-4-large (12 texts, versus 0.32–0.36 for non-matching text).pip install voyage-4-nano-mlx1from voyage_4_nano_mlx import load
2
3emb = load("sanjay920/voyage-4-nano-mlx-8bit")
4
5q = emb.encode_query("Which planet is known as the Red Planet?")
6d = emb.encode_document([
7 "Venus is often called Earth's twin because of its similar size.",
8 "Mars, known for its reddish appearance, is called the Red Planet.",
9])
10emb.similarity(q, d) # [[0.4052 0.6514]]encode_query and
encode_document apply them. Use encode() for symmetric tasks.1emb.encode_document(docs, dims=256) # 256-d, unit norm
2emb.encode_document(docs, dims=512, output_dtype="int8") # 512 int8 values
3emb.encode_document(docs, output_dtype="ubinary") # 2048 bits = 256 bytesdims=256 + int8 over a smaller weight file — it
cuts the index 32x and leaves the encoder faithful.| repo | size | min cosine vs fp64 reference |
|---|---|---|
sanjay920/voyage-4-nano-mlx-bf16 | 672 MB | 0.99997 |
sanjay920/voyage-4-nano-mlx-8bit | 362 MB | 0.99966 |
sanjay920/voyage-4-nano-mlx-6bit | 280 MB | 0.99691 |
sanjay920/voyage-4-nano-mlx-4bit | 198 MB | 0.97465 |
| this variant, pooled cosine vs fp64 reference | 0.99966 |
| bf16 on MTEB SciFact / NFCorpus (nDCG@10) | 0.75262 / 0.39576 |
| PyTorch reference, same tasks | 0.75191 / 0.39568 |
Qwen3, 12 layers, d=1024, 16 heads / 8 KV heads, head_dim=128
RMSNorm, SwiGLU, RoPE theta=1e6, per-head q/k RMSNorm, bidirectional attention
-> final norm
-> linear 1024 -> 2048 (per token, before pooling)
-> mean pool over the attention mask
-> L2 normalize