translate-windy-nano
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
import ctranslate2
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("WindstormLabs/translate-windy-nano") # tokenizer ships in this repo
tr = ctranslate2.Translator("WindstormLabs/translate-windy-nano", device="cpu", compute_type="int8")
tok.src_lang = "en"
src = tok.convert_ids_to_tokens(tok.encode("Where can I find a pharmacy?"))
res = tr.translate_batch([src], target_prefix=[[tok.lang_code_to_token["es"]]], beam_size=4)
print(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.
Provenance chain
facebook/m2m100_418M β CTranslate2 INT8 β LoRA fine-tune (above) β this repo.
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.
- Downloads last month
- 69
Model tree for WindyWordApp/translate-windy-nano
Base model
facebook/m2m100_418M