TranslatePsy-EuroNano
TranslatePsy-EuroNano is a collection compact multilingual machine translation models (only ~17M to 43M parameters) for European↔English translation optimized for browser, mobile, desktop, and edge-device deployment.
This repository contains multilingual translation models supporting 9 European languages and English in both directions:
- English → European Languages (
en-xx) - European Languages → English (
xx-en)
The models are built using the Marian/Bergamot framework and are designed to provide an efficient balance between translation quality, model size, memory usage, and inference speed. Compared to Nllb-200-Distilled-600M translation model:
- TranslatePsy-EuroNano models retains upto 98.4% of NLLB-200 translation accuracy.
- Single checkpoint deployment size is smaller by 56.7×.
- Reduces peak RAM usage by 3.53× on CPU deployment
- Developed by: Tether AI Research (referred to Tether Data, S.A. de C.V.)
- Full blog post: Compact Multilingual Machine Translation for Resource-Constrained Edge Deployment
Supported Languages
| Language | Code | Tag for inference |
|---|---|---|
| English | en | - |
| German | de | ##DE |
| Spanish | es | ##ES |
| French | fr | ##FR |
| Italian | it | ##IT |
| Portuguese | pt | ##PT |
| Finnish | fi | ##FI |
| Czech | cs | ##CS |
| Dutch | nl | ##NL |
| Swedish | sv | ##SV |
Quick Start (QVAC SDK)
The INTGEMM packs run out of the box with the QVAC SDK using its built-in Bergamot NMT engine. The SDK runs on Node.js, Bare, and Expo, with native backends (Metal on macOS, Vulkan on Windows/Linux).
Requirements: Node.js >= 22.17.
1. Download the model
Grab the Base INTGEMM packs (both directions) with the HuggingFace CLI:
pip install -U "huggingface_hub[cli]"
huggingface-cli download qvac/TranslatePsy-EuroNano \
--include "en-xx/Base/intgemm/*" "xx-en/Base/intgemm/*" \
--local-dir ./TranslatePsy-EuroNano
This gives you:
TranslatePsy-EuroNano/
en-xx/Base/intgemm/{model.intgemm.alphas.bin, vocab.spm} # English -> European
xx-en/Base/intgemm/{model.intgemm.alphas.bin, vocab.spm} # European -> English
Swap Base for BaseMemory or Tiny to trade quality for size, or drop --include to fetch every variant.
2. Install the SDK
npm init -y && npm pkg set type=module
npm install @qvac/sdk
3. Translate
Save as quickstart.mjs:
import path from "node:path";
import { loadModel, translate, unloadModel } from "@qvac/sdk";
const ROOT = "./TranslatePsy-EuroNano";
// direction: "en-xx" (English -> European) or "xx-en" (European -> English)
function load(direction, from, to) {
const dir = path.join(ROOT, direction, "Base", "intgemm");
return loadModel({
modelSrc: path.join(dir, "model.intgemm.alphas.bin"),
modelType: "nmt",
modelConfig: {
engine: "Bergamot",
from,
to,
srcVocabSrc: path.join(dir, "vocab.spm"),
dstVocabSrc: path.join(dir, "vocab.spm"),
},
});
}
async function translateText(modelId, text) {
const { text: out } = translate({ modelId, text, modelType: "nmt", stream: false });
return (await out).trim();
}
// English -> German: prepend the ##DE target tag (see Translation Directions).
const ende = await load("en-xx", "en", "de");
console.log(await translateText(ende, "##DE Good morning, how are you today?"));
await unloadModel({ modelId: ende });
// German -> English: no tag needed.
const deen = await load("xx-en", "de", "en");
console.log(await translateText(deen, "Guten Morgen, wie geht es Ihnen heute?"));
await unloadModel({ modelId: deen });
node quickstart.mjs
Output:
Guten Morgen, wie geht es dir heute?
Good morning. How are you doing today?
Notes
- English → European (
en-xx): prepend the target tag (##DE,##FR,##ES, …) to the source text, as listed under "Supported Languages" section. - European → English (
xx-en): no tag required. - European → European: pivot through English — run
xx-enfirst, then feed the English output (with the target tag) intoen-xx. - Load a pack once and reuse the returned
modelIdfor many translations; callunloadModelto free the memory when you're done. - For token-by-token streaming, pass
stream: trueand iteratetranslate(...).tokenStreaminstead.
Model Details
Architecture
The models are based on Marian/Bergamot's deployment-oriented neural machine translation architecture.
Key characteristics:
- 6-layer Transformer encoder
- SSRU decoder
- Multi-head attention
- Shared multilingual SentencePiece vocabulary (32k)
- Language-tag controlled multilingual decoding
- CPU-optimized inference
Training Setup
Tokenization & Model
| Setting | Value |
|---|---|
| Subword model | SentencePiece (32k, shared src/trg) |
| Tied embeddings | Yes |
Training
| Setting | Value |
|---|---|
| Hardware | 8 GPUs, synchronous data-parallel SGD |
| Optimizer | Adam (β₁=0.9, β₂=0.98, ε=1e-9) |
| Learning rate | 3×10⁻⁴; 8k warmup; inv.-sqrt decay |
| Label smoothing / clip | 0.1 / 5 |
| Max length | 120 tokens (train) |
| Mini-batch | 1,000 words (dynamic fit) |
| Early stopping | 15 validations (every 5k updates) |
Validation
| Setting | Value |
|---|---|
| Validation set | FLORES-200 dev (997 sents/lang) |
| Decode | beam 12; metrics: chrF, CE, BLEU-detok |
Test evaluation
| Setting | Value |
|---|---|
| Test set | FLORES-200 devtest (1,012 sents/lang) |
| Decoder | marian-decoder; beam 12; batch 64 |
| Metrics | SacreBLEU, COMET (WMT22-DA) |
| Checkpoint | best-bleu_detok |
Model Variants
We train three model varinats:
| Hyperparameter | Base | Base_Memory | Tiny |
|---|---|---|---|
| Encoder depth | 6 | 6 | 6 |
| Decoder depth | 2 | 4 | 2 |
| Embedding dim | 512 | 384 | 256 |
| FFN dim | 2048 | 1536 | 1024 |
| Attention heads | 8 | 6 | 4 |
| Parameters | 42.68M | 31.25M | 16.90M |
| FP32 size | 165 MB | 120 MB | 65 MB |
| INT8 size (intgemm) | 42 MB | 31 MB | 17 MB |
| Intended Deployment | Best translation quality | Balanced memory and quality | Browser, mobile, low-memory devices |
Each trained model variant has FP32 and INTGEMM (INT8) versions for inference.
FP32 Models
The FP32 variants contain the original full-precision Marian model checkpoints (.npz) used during training and evaluation. These models provide the highest numerical precision and are primarily intended for research, fine-tuning, and framework-level inference using Marian.
Located under:
fp32/
Contains:
model.npz.best-chrf.npz
model.npz.best-chrf.npz.decoder.yml
vocab.spm
Advantages
- Full training precision
- Suitable for continued training and fine-tuning
- Reference checkpoints for reproducibility
Considerations
- Larger storage footprint
- Higher memory consumption during inference
- Not optimized for resource-constrained deployments
INTGEMM (INT8) Models
The INTGEMM variants are quantized inference models generated using Marian/Bergamot quantization tools. These models are optimized for CPU-based deployment and are compatible with Bergamot-style translation pipelines.
Located under:
intgemm/
Contains:
model.intgemm.alphas.bin
lex.50.50.*.s2t.bin
vocab.spm
Advantages
- Significantly smaller model size
- Reduced memory usage
- Faster CPU inference
- Well suited for browser, desktop, mobile, and edge-device deployment
Considerations
- Intended for inference only
- Minor translation quality differences may occur compared to FP32 models due to quantization
Across our evaluations, INTGEMM models retained translation quality close to their FP32 counterparts while substantially reducing deployment footprint and runtime memory requirements.
Translation Directions
English → European (en-xx)
Target language is selected using language tags prepended to the source sentence.
Examples:
##DE This is a multilingual translation model.
##FR This is a multilingual translation model.
##ES This is a multilingual translation model.
European → English (xx-en)
No language tags are required.
Input sentences may be written in any supported European language and are translated into English.
Repository Structure
TranslatePsy-EuroNano
├── en-xx
│ ├── Tiny
│ │ ├── fp32
│ │ └── intgemm
│ ├── BaseMemory
│ │ ├── fp32
│ │ └── intgemm
│ └── Base
│ ├── fp32
│ └── intgemm
│
└── xx-en
├── Tiny
│ ├── fp32
│ └── intgemm
├── BaseMemory
│ ├── fp32
│ └── intgemm
└── Base
├── fp32
└── intgemm
Training Data
The models were trained on multilingual parallel corpora collected from publicly available resources including:
- EuroParl
- Tatoeba
- ParaCrawl
- WikiMedia
- OPUS-100
- TED2020
- News-commentary
- Gobal voices
Preprocessing
We filter parallel sample using:
- Length based filtering
- Token count ratio
- case/punctuation normalization
- language identification
- Adequacy score to see correctness of translation pairs
After filtering and deduplication, the final training corpus contains approximately:
| Statistic | Value |
|---|---|
| Languages | 9 |
| Sentence Pairs | 25M |
| Tokens | 1.02B |
Evaluation
Average COMET scores:
| System | xx→en | en→xx |
|---|---|---|
| Firefox Translations | 0.878 | 0.875 |
| NLLB-200-600M | 0.874 | 0.857 |
| TranslatePsy-EuroNano | 0.860 | 0.826 |
Our best model retains approximately 98.4% of NLLB-200 translation quality while requiring a fraction of the deployment footprint.
Performance on CPU
| Model | Q | s/s | tok/s | T1 (s) | Mem (MB) | Bundle (MB) |
|---|---|---|---|---|---|---|
| Tiny | intgemm | 212 | 3683 | 4.2 | 666 | 36 |
| Base-Memory | intgemm | 102 | 1980 | 9.3 | 939 | 65 |
| Base | intgemm | 139 | 2559 | 6.8 | 1256 | 89 |
| Tiny | F32 | 7 | 132 | 127.5 | 1417 | 137 |
| Base-Memory | F32 | 2 | 36 | 530.5 | 1850 | 252 |
| Base | F32 | 7 | 144 | 124.2 | 2039 | 343 |
| Firefox (Bilingual) | intgemm | 88 | 1952 | 10.8 | 1080 | 633 |
| OPUS-MT | F32 | 8 | 183 | 7.1 | 1868 | 620 |
| NLLB-600M | F32 | 0.7 | 16 | 19.4 | 4438 | 2382 |
s/s: sentence per second, tok/s: token per second, T1: time to first sentence, Mem: RAM usage, Bundle: Size of en-xx and xx-en checkpoints pair for all 18 translation directions
Performance on Android device
| Model | Route | sentences/s | word tok/s | ms/sent |
|---|---|---|---|---|
| Firefox | es→en | 3.81 ± 0.09 | 92 ± 2 | 188.9 ± 3.2 |
| Firefox | en→it | 4.17 ± 0.47 | 105 ± 12 | 177.3 ± 22.8 |
| Firefox | es→it | 2.73 ± 0.09 | 71 ± 2 | 302.8 ± 3.5 |
| Tiny | es→en | 4.12 ± 0.64 | 95 ± 15 | 171.2 ± 25.0 |
| Tiny | en→it | 4.09 ± 0.11 | 75 ± 9 | 161.1 ± 3.9 |
| Tiny | es→it | 1.32 ± 0.81 | 31 ± 3 | 498.6 ± 14.2 |
| Base-Memory | es→en | 2.88 ± 0.11 | 64 ± 2 | 276.7 ± 1.3 |
| Base-Memory | en→it | 2.68 ± 0.25 | 85 ± 8 | 313.0 ± 9.6 |
| Base-Memory | es→it | 0.97 ± 0.08 | 25 ± 2 | 734.0 ± 8.2 |
| Base | es→en | 2.80 ± 0.24 | 63 ± 5 | 293.6 ± 30.3 |
| Base | en→it | 2.70 ± 0.33 | 70 ± 9 | 313.9 ± 55.2 |
| Base | es→it | 0.90 ± 0.08 | 19 ± 2 | 819.8 ± 43.2 |
Intended Use
These models are particularly suitable for:
- Browser translation
- Offline translation
- Mobile applications
- Desktop applications
- Edge devices
- CPU-only deployment
- Privacy-preserving local translation
Citation
@misc{translatepsyeuronano2026,
title = {TranslatePsy-EuroNano: Compact Multilingual Machine Translation for Resource-Constrained Edge Deployment},
author = {Gupta, Kamal and Nambiar, Akshay and Nurman, Amril}
institution = {Tether Data, S.A. de C.V. d.b.a. Tether AI Research},
year = {2026},
note = {Hugging Face model card}
}
Copyright
We will take appropriate actions in response to notices of copyright infringement. If you believe your work has been used or copied in a manner that infringes upon your intellectual property rights, please email data-apps@tether.io identifying and describing both the copyrighted work and alleged infringing content.