A 5-bit, group-size-64 MLX quantization of Xiaomi's
MiLMMT-46-4B-v1.0, for on-device
translation on Apple Silicon. 46 languages.
The base checkpoint is a Gemma3ForConditionalGeneration with a SigLIP vision tower. This
conversion is text-only: vision_tower and multi_modal_projector are dropped, leaving the
language model. That is what mlx_lm's gemma3 loader does automatically, and it takes the
repository from 8.6 GB (bf16, with vision) to 2.5 GB.
The whole ladder was benched against the unquantized bf16 model on FLORES+ devtest, en→X,
45 languages × 100 sentences (4,500 segments per rung), chrF++ against the gold human references.
Significance is sacrebleu's paired bootstrap (2,000 resamples) over the pooled 4,500 sentences.
rung
size
mean chrF++
Δ vs bf16 (pooled)
p
languages below bf16
bf16 (reference)
7.3 GB
53.86
—
—
—
5-bit
2.70 GB
53.83
−0.04
0.20
23 / 45
4-bit
2.22 GB
53.06
−0.88
0.0005
40 / 45
5-bit is statistically indistinguishable from full precision — Δ −0.04, 95% CI ±0.43, and a
23/45 language split that is a coin flip. 4-bit costs a real ~0.9 chrF++, significant at
p=0.0005 with a 40/45 split, concentrated in the lower-resource tail (Turkish −1.98, Uzbek −1.36,
Tamil −1.33).
A blind Codex judge (different model family, scoring 450 items against the same gold references)
independently put 4-bit 1.00 points below bf16 on a 0–100 scale — agreeing with chrF++ to
within 0.12. A per-sentence scan of all 4,500 outputs per rung found no empty outputs,
truncations, or repetition loops at any precision.
Earlier reference-free pairwise judging of 4-bit against 5-bit and 8-bit found no difference.
That was a limitation of the method, not a property of the model: comparing two quantized rungs to
each other cannot locate a floor, and without a gold reference the judges could not resolve a
sub-point gap.
This is the recommended build. It is the lossless floor: the smallest rung that is
statistically indistinguishable from the unquantized model. 6-bit and 8-bit cost more storage for
no measurable gain; 4-bit is measurably behind.
Usage
python
1from mlx_lm import load, generate
2from mlx_lm.sample_utils import make_sampler
34model, tokenizer = load("translate-studio/MiLMMT-46-4B-v1.0-5bit-MLX")56src, tgt ="Chinese (Simplified)","English"7text ="我爱机器翻译"8prompt =f"Translate this from {src} to {tgt}:\n{src}: {text}\n{tgt}:"910print(generate(model, tokenizer, prompt=prompt, max_tokens=512,11 sampler=make_sampler(temp=0.0), verbose=False))
Prompt format
Use the base model's plain block, with no BOS token and no chat template — the checkpoint's
chat_template.jinja simply concatenates message contents, so there are no turn markers:
Translate this from <source language name> to <target language name>:
<source language name>: <source sentence>
<target language name>:
Language names must be written as the base model card lists them (e.g. Chinese (Simplified),
Chinese (Traditional), English).
Note on stop tokens
config.json carries only eos_token_id: 1, while generation_config.json lists [1, 106]
(106 is <end_of_turn>). Loaders that read the stop id from config.json alone can miss 106
and run on to max_tokens. Honour both.
Quality is not guaranteed outside these 46. In particular, spot checks of this quantization found
that prompts targeting Telugu, Marathi and Gujarati can return Hindi/Devanagari or mixed-script
output rather than the requested language.
License & attribution
Derived from Gemma and distributed under the Gemma Terms of Use.
Credit: Xiaomi Inc. (MiLMMT-46) and Google (Gemma 3 base architecture). This repository
only provides an MLX-quantized, text-only copy of the released weights, redistributed under the
same terms. Use restrictions in the Gemma Terms apply, including the prohibited-use policy.
Citation for the base model:
bibtex
1@misc{han2026referencefreeposttrainingopenlarge,
2 title={Reference-Free Post-Training of Open Large Language Models for Multilingual Machine Translation},
3 author={Chris Han and Pengzhi Gao and Pei Fu and Jian Luan},
4 year={2026},
5 eprint={2608.10812},
6 archivePrefix={arXiv},
7 primaryClass={cs.CL},
8 url={https://arxiv.org/abs/2608.10812}
9}