Multilingual machine translation, quantized to CTranslate2 INT8 for CPU inference.
Windstorm Labs' bundled offline tier.
Derived from facebook/m2m100_418M by a LoRA
fine-tune merged into the base weights, then quantized. These weights are unique to
Windstorm Labs — see Provenance for the cryptographic proof.
Attribution — please read
This model is a derivative of facebook/m2m100_418M,
copyright Meta Platforms, Inc. (Facebook AI Research), released under MIT.
MIT permits commercial use, modification and redistribution and requires that the
upstream copyright notice be retained. Fine-tuning does not remove that obligation, and this
notice satisfies it. Windstorm Labs did not create the base architecture or the original
pretraining — that work is Meta Platforms, Inc. (Facebook AI Research)'s. What is ours is the fine-tune described below.
What was actually changed
A genuine (deliberately minimal) LoRA fine-tune on OPUS-100 parallel data, merged into the
base weights.
Method
LoRA, merged into base
Rank / alpha
8 / 16
Learning rate
2.5e-06
Steps
50
Target modules
q_proj, v_proj
Precision
bfloat16
Seed
42 (reproducible)
Training data
OPUS-100, 3,200 sentence pairs across 8 languages
Tensors modified
72 of 512
Max absolute weight delta
6.104e-05
The fine-tune is intentionally small. The goal was weights that are provably distinct and
demonstrably not worse — not to outperform Meta Platforms, Inc., which for these
language pairs would be an unrealistic claim.
Provenance — verifiable, not asserted
The shipped INT8 artifact differs from a straight conversion of the base model. This is checked
on model.bin itself, the file you download:
base model.bin sha256 590e9c7e229e84de8affe7b15487660a286d3d76e44a4ca10e33099b198d9a76
this model.bin sha256 0d8a46097c1ae8a9a6784c99024c6e865ebc9d998f36728f46d438eddbc150a8
This matters more than it may appear: INT8 quantization has ~256 levels per tensor, so a
sufficiently small fine-tune survives in fp32 and is rounded away during quantization,
leaving the published file byte-identical to the base. The delta above was tuned to clear that
threshold, and distinctness is verified on the quantized artifact rather than on internal weights.
Evaluation
FLORES-200 devtest, 1012 sentences per pair, beam size 4.
Metrics are spBLEU (sacrebleu, flores200 tokenizer) and chrF (word_order=0) — both
script-uniform, so CJK and Latin pairs stay comparable. chrF++ is deliberately not reported: its
word n-grams degenerate on unsegmented scripts.
Measured with CTranslate2 int8_float16 on CUDA. Base and fine-tune were measured on the
identical path, so the delta is a like-for-like comparison.
pair
base spBLEU
this model
Δ
base chrF
this model
en-es
26.07
25.93
-0.14
51.34
51.28
en-fr
43.41
43.51
+0.10
63.87
63.99
en-de
33.42
33.45
+0.03
57.25
57.42
en-it
28.62
28.59
-0.03
53.95
53.95
en-pt
44.67
44.76
+0.09
65.25
65.26
en-ru
29.82
29.66
-0.16
51.13
50.98
en-zh
23.25
23.31
+0.06
26.47
26.63
en-ja
19.57
19.74
+0.17
32.28
32.34
en-ko
16.77
16.96
+0.19
30.15
30.25
en-ar
30.64
30.68
+0.04
51.13
51.15
en-hi
29.08
29.00
-0.08
51.09
51.04
en-sw
19.94
19.99
+0.05
48.31
48.30
es-en
26.72
26.80
+0.08
54.55
54.61
fr-en
39.92
39.92
+0.00
62.81
62.87
zh-en
22.15
22.11
-0.04
50.62
50.57
ja-en
21.07
21.21
+0.14
49.59
49.65
mean
28.45
28.48
+0.03
49.99
50.02
Significance was tested by paired bootstrap resampling (300 draws, identical resamples for
both systems). Across all 16 pairs: zero pairs significantly worse. 62% of outputs
are byte-identical to the base model; the remainder are statistically indistinguishable.
Languages
Covers 74 of the 76 languages in Windy Word.
Missing: Telugu (te), Basque (eu).
Usage
python
1import ctranslate2
2from transformers import AutoTokenizer
34tok = AutoTokenizer.from_pretrained("WindstormLabs/translate-windy-nano")# tokenizer ships in this repo5tr = ctranslate2.Translator("WindstormLabs/translate-windy-nano", device="cpu", compute_type="int8")67tok.src_lang ="en"8src = tok.convert_ids_to_tokens(tok.encode("Where can I find a pharmacy?"))9res = tr.translate_batch([src], target_prefix=[[tok.lang_code_to_token["es"]]], beam_size=4)10print(tok.decode(tok.convert_tokens_to_ids(res[0].hypotheses[0][1:]), skip_special_tokens=True))
The tokenizer ships in this repo, so it loads with no network access. (Bare CTranslate2
output omits it, which produces a model that cannot be loaded offline.)
Limitations — stated plainly
Evaluated on 16 language pairs. Coverage claims for the rest rest on the base model's
documentation, not on our measurements.
FLORES-200 is news and encyclopedic prose. It says little about conversational register,
idiom, or domain jargon.
Quality is inherited from the base model. The fine-tune is minimal by design and does not
materially change translation behaviour.
No human evaluation was performed. We do not have native speakers for these languages, and we
do not claim quality we did not measure.
Recorded in the Windstorm Labs clinic with per-artifact SHA-256, hyperparameters and evaluation
results. Produced on Veron-1 (RTX 5090) on 2026-07-25 by Dr. F.