{
  "schema": "fc-lang-mt-models/v1",
  "product": "lang.ugrad.ai",
  "title": "Translation models · engines · per-language strengths · links · offline pack",
  "updated": "2026-08-10T20:00:00Z",
  "note": "Strength H/M/L = routing. Links open docs/HF/Ollama/CF. offline_pack = what to pull. CF router: POST /api/ai + GET /api/models.",
  "zen_targets": ["fr","es","de","it","pt","nl","sv","pl","cs","ro","hu","ru","uk","el","tr","ar","he","fa","hi","zh","ja","ko","vi"],
  "catalog": "/data/language/lang-catalog.json",
  "api": {
    "models": "GET https://lang.ugrad.ai/api/models",
    "languages": "GET https://lang.ugrad.ai/api/languages",
    "translate": "POST https://lang.ugrad.ai/api/ai",
    "translate_body": {
      "action": "translate",
      "text": "hello",
      "source": "en",
      "target": "fr",
      "model": "m2m100 | llama | auto | kimi",
      "provider": "edge | offline | auto"
    }
  },
  "strength_scale": {
    "H": "High · preferred for that language",
    "M": "Medium · usable · spot-check hard nouns",
    "L": "Low · weak / glossary / human preferred",
    "N": "Not recommended for MT"
  },
  "engines": [
    {
      "id": "qwen3:8b",
      "name": "Qwen3 8B",
      "class": "instruct-llm",
      "where": "Ollama local",
      "provider": ["offline", "ollama"],
      "route": "offline",
      "cf_model": null,
      "size": "5.2 GB",
      "status": "ready",
      "mt_role": "Best general offline MT · default zen offline",
      "overall_mt_score": 92,
      "rank": 1,
      "need_offline": false,
      "offline_have": true,
      "strengths": "Multilingual instruct · CJK strong · EU strong · one model all seats",
      "weaknesses": "Not dedicated NMT · morphology-heavy (hu/ar/he) softer",
      "links": {
        "docs": "https://ollama.com/library/qwen3",
        "ollama": "https://ollama.com/library/qwen3:8b",
        "hf": "https://huggingface.co/Qwen/Qwen3-8B",
        "pull": "ollama pull qwen3:8b"
      },
      "langs": {
        "fr":"H","es":"H","de":"H","it":"H","pt":"H","nl":"H","sv":"H",
        "pl":"H","cs":"H","ro":"H","hu":"M","ru":"H","uk":"H",
        "el":"M","tr":"M","ar":"M","he":"M","fa":"M","hi":"M",
        "zh":"H","ja":"H","ko":"H","vi":"M"
      },
      "zen": "provider=offline | ollama",
      "cli": "./cli/lang-pipe ai --provider ollama --action translate"
    },
    {
      "id": "m2m100-1.2b",
      "name": "M2M100 1.2B",
      "class": "nmt",
      "where": "Cloudflare Workers AI · edge",
      "provider": ["edge"],
      "route": "edge-nmt",
      "cf_model": "@cf/meta/m2m100-1.2b",
      "size": "cloud · offline slot empty",
      "status": "ready_edge",
      "mt_role": "Dedicated many-to-many NMT · bulk fanout · CF default",
      "overall_mt_score": 90,
      "rank": 2,
      "need_offline": true,
      "offline_have": false,
      "offline_priority": "P0",
      "offline_path": "/Volumes/qbitOS/03.models/07-lang-ugrad/m2m100-1.2b/",
      "strengths": "True MT · 100-lang family · fast edge · classical needs LLM fallback",
      "weaknesses": "Online only until local weights · not for dead langs",
      "links": {
        "docs": "https://developers.cloudflare.com/workers-ai/models/m2m100-1.2b/",
        "hf": "https://huggingface.co/facebook/m2m100_1.2B",
        "paper": "https://arxiv.org/abs/2010.11125",
        "cf": "https://developers.cloudflare.com/workers-ai/models/",
        "pull": "hf download facebook/m2m100_1.2B --local-dir /Volumes/qbitOS/03.models/07-lang-ugrad/m2m100-1.2b"
      },
      "langs": {
        "fr":"H","es":"H","de":"H","it":"H","pt":"H","nl":"H","sv":"H",
        "pl":"H","cs":"H","ro":"H","hu":"M","ru":"H","uk":"H",
        "el":"M","tr":"H","ar":"H","he":"M","fa":"M","hi":"H",
        "zh":"H","ja":"H","ko":"H","vi":"H"
      },
      "zen": "provider=edge · model=m2m100",
      "cli": "./cli/lang-pipe ai --provider edge --action translate"
    },
    {
      "id": "nllb-200",
      "name": "NLLB-200 (distilled)",
      "class": "nmt",
      "where": "not installed · P0 offline",
      "provider": [],
      "route": "offline-nmt",
      "cf_model": null,
      "size": "~1–3 GB distilled",
      "status": "need_offline",
      "mt_role": "Best dedicated offline NMT upgrade · ar/fa/el/hi",
      "overall_mt_score": null,
      "rank": 2.5,
      "need_offline": true,
      "offline_have": false,
      "offline_priority": "P0",
      "strengths": "200 languages · strong low-resource",
      "weaknesses": "Must pull · not on CF Workers AI binding yet",
      "links": {
        "docs": "https://github.com/facebookresearch/fairseq/tree/nllb",
        "hf": "https://huggingface.co/facebook/nllb-200-distilled-600M",
        "hf_1_3b": "https://huggingface.co/facebook/nllb-200-distilled-1.3B",
        "pull": "hf download facebook/nllb-200-distilled-600M --local-dir /Volumes/qbitOS/03.models/07-lang-ugrad/nllb-200-distilled-600M"
      },
      "langs": {
        "fr":"H","es":"H","de":"H","it":"H","pt":"H","nl":"H","sv":"H",
        "pl":"H","cs":"H","ro":"H","hu":"H","ru":"H","uk":"H",
        "el":"H","tr":"H","ar":"H","he":"H","fa":"H","hi":"H",
        "zh":"H","ja":"H","ko":"H","vi":"H"
      },
      "zen": "after install · provider=offline-nmt",
      "cli": "ctranslate2 / local server (after pull)"
    },
    {
      "id": "llama-3.1-8b-instruct-fp8",
      "name": "Llama 3.1 8B Instruct FP8",
      "class": "instruct-llm",
      "where": "Cloudflare Workers AI · edge chat/LLM-MT",
      "provider": ["edge"],
      "route": "edge-llm",
      "cf_model": "@cf/meta/llama-3.1-8b-instruct-fp8",
      "size": "cloud",
      "status": "ready_edge_chat",
      "mt_role": "LLM translate for classical/honor + hard pairs · CF router fallback",
      "overall_mt_score": 72,
      "rank": 3,
      "need_offline": false,
      "offline_have": false,
      "strengths": "Prompt-MT for dead langs · EN polish",
      "weaknesses": "Not bulk NMT · weaker than m2m100 on live pairs",
      "links": {
        "docs": "https://developers.cloudflare.com/workers-ai/models/llama-3.1-8b-instruct-fp8/",
        "hf": "https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct",
        "meta": "https://www.llama.com/",
        "cf": "https://developers.cloudflare.com/workers-ai/models/llama-3.1-8b-instruct-fp8/"
      },
      "langs": {
        "fr":"M","es":"M","de":"M","it":"M","pt":"M","nl":"M","sv":"M",
        "pl":"M","cs":"M","ro":"M","hu":"L","ru":"M","uk":"M",
        "el":"L","tr":"L","ar":"L","he":"L","fa":"L","hi":"L",
        "zh":"M","ja":"M","ko":"M","vi":"L"
      },
      "zen": "provider=edge · model=llama",
      "cli": "POST /api/ai model=llama"
    },
    {
      "id": "mistral:latest",
      "name": "Mistral 7B",
      "class": "instruct-llm",
      "where": "Ollama local",
      "provider": ["ollama"],
      "route": "offline",
      "cf_model": null,
      "size": "4.4 GB",
      "status": "ready",
      "mt_role": "EU / Romance+Germanic alt offline",
      "overall_mt_score": 78,
      "rank": 4,
      "need_offline": false,
      "offline_have": true,
      "strengths": "fr es de it pt nl competitive",
      "weaknesses": "CJK/Indic/Semitic weaker",
      "links": {
        "docs": "https://docs.mistral.ai/",
        "ollama": "https://ollama.com/library/mistral",
        "hf": "https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3",
        "pull": "ollama pull mistral"
      },
      "langs": {
        "fr":"H","es":"H","de":"H","it":"H","pt":"H","nl":"H","sv":"M",
        "pl":"M","cs":"M","ro":"H","hu":"L","ru":"M","uk":"M",
        "el":"L","tr":"L","ar":"L","he":"L","fa":"L","hi":"L",
        "zh":"L","ja":"L","ko":"L","vi":"L"
      },
      "zen": "CLI model swap",
      "cli": "ollama run mistral"
    },
    {
      "id": "indictrans2",
      "name": "IndicTrans2",
      "class": "nmt",
      "where": "not installed · P2 offline",
      "provider": [],
      "route": "offline-nmt",
      "cf_model": null,
      "size": "~1–4 GB",
      "status": "need_offline",
      "mt_role": "Indic specialist (hi + family)",
      "overall_mt_score": null,
      "rank": 5,
      "need_offline": true,
      "offline_have": false,
      "offline_priority": "P2",
      "strengths": "hi and related Indic",
      "weaknesses": "Not general world MT",
      "links": {
        "docs": "https://github.com/AI4Bharat/IndicTrans2",
        "hf": "https://huggingface.co/ai4bharat/indictrans2-en-indic-1B",
        "pull": "hf download ai4bharat/indictrans2-en-indic-1B --local-dir /Volumes/qbitOS/03.models/07-lang-ugrad/indictrans2"
      },
      "langs": {
        "hi":"H","bn":"H","ta":"H","te":"H","mr":"H","gu":"H","pa":"H","ur":"M"
      },
      "zen": "after install",
      "cli": "local IndicTrans2 server"
    },
    {
      "id": "mymemory",
      "name": "MyMemory free API",
      "class": "mt-api",
      "where": "api.mymemory.translated.net",
      "provider": ["mymemory"],
      "route": "mymemory",
      "cf_model": null,
      "size": "cloud free",
      "status": "quota_limited",
      "mt_role": "Free fallback · exhausts quickly",
      "overall_mt_score": 55,
      "rank": 6,
      "need_offline": false,
      "offline_have": false,
      "strengths": "No key light use",
      "weaknesses": "Quota · garble · not soak",
      "links": {
        "docs": "https://mymemory.translated.net/doc/spec.php",
        "api": "https://api.mymemory.translated.net/"
      },
      "langs": {
        "fr":"M","es":"M","de":"M","it":"M","pt":"M","nl":"M","sv":"M",
        "pl":"M","cs":"M","ro":"M","hu":"M","ru":"M","uk":"M",
        "el":"M","tr":"M","ar":"M","he":"M","fa":"M","hi":"M",
        "zh":"M","ja":"M","ko":"M","vi":"M"
      },
      "zen": "provider=mymemory",
      "cli": "./cli/lang-pipe ai --provider mymemory"
    },
    {
      "id": "kimi-k2",
      "name": "Kimi K2 / K2.6 (Moonshot)",
      "class": "frontier-llm",
      "where": "CF Workers AI optional · not default",
      "provider": ["edge"],
      "route": "edge-llm",
      "cf_model": "@cf/moonshotai/kimi-k2.5",
      "size": "cloud frontier",
      "status": "available_optional",
      "mt_role": "Teacher / hard classical pairs · expensive",
      "overall_mt_score": null,
      "rank": 7,
      "need_offline": false,
      "offline_have": false,
      "strengths": "Long context · high quality single-shot · classical help",
      "weaknesses": "Not offline · cost · bulk fanout wrong tool",
      "links": {
        "docs": "https://platform.moonshot.ai/docs",
        "blog": "https://www.kimi.com/blog/kimi-k2-6",
        "cf": "https://developers.cloudflare.com/workers-ai/models/"
      },
      "langs": {
        "fr":"H","es":"H","de":"H","it":"H","pt":"H","nl":"H","sv":"H",
        "pl":"H","cs":"H","ro":"H","hu":"H","ru":"H","uk":"H",
        "el":"H","tr":"H","ar":"H","he":"H","fa":"H","hi":"H",
        "zh":"H","ja":"H","ko":"H","vi":"H"
      },
      "zen": "model=kimi when CF enabled",
      "cli": "POST /api/ai model=kimi"
    },
    {
      "id": "granite3.2:latest",
      "name": "Granite 3.2",
      "class": "instruct-llm",
      "where": "Ollama local",
      "provider": ["ollama"],
      "route": "offline",
      "cf_model": null,
      "size": "4.9 GB",
      "status": "ready",
      "mt_role": "EN-heavy rewrite · mid multilingual",
      "overall_mt_score": 62,
      "rank": 8,
      "need_offline": false,
      "offline_have": true,
      "links": {
        "ollama": "https://ollama.com/library/granite3.2",
        "hf": "https://huggingface.co/ibm-granite",
        "pull": "ollama pull granite3.2"
      },
      "langs": {
        "fr":"M","es":"M","de":"M","it":"M","pt":"M","nl":"M","sv":"M",
        "pl":"L","cs":"L","ro":"M","hu":"L","ru":"L","uk":"L",
        "el":"L","tr":"L","ar":"L","he":"L","fa":"L","hi":"L",
        "zh":"L","ja":"L","ko":"L","vi":"L"
      },
      "zen": "not default",
      "cli": "ollama run granite3.2"
    },
    {
      "id": "deepseek-r1:7b",
      "name": "DeepSeek R1 7B",
      "class": "reasoning-llm",
      "where": "Ollama local",
      "provider": ["ollama"],
      "route": "offline",
      "cf_model": null,
      "size": "4.7 GB",
      "status": "ready_not_mt",
      "mt_role": "Reasoning QA · not bulk MT",
      "overall_mt_score": 40,
      "rank": 9,
      "need_offline": false,
      "offline_have": true,
      "links": {
        "ollama": "https://ollama.com/library/deepseek-r1",
        "hf": "https://huggingface.co/deepseek-ai",
        "pull": "ollama pull deepseek-r1:7b"
      },
      "langs": {},
      "zen": "avoid fanout",
      "cli": "ollama run deepseek-r1:7b"
    },
    {
      "id": "llama3.2:1b",
      "name": "Llama 3.2 1B",
      "class": "tiny-llm",
      "where": "Ollama local",
      "provider": ["ollama"],
      "route": "offline",
      "cf_model": null,
      "size": "1.3 GB",
      "status": "smoke_only",
      "mt_role": "Smoke only",
      "overall_mt_score": 25,
      "rank": 10,
      "need_offline": false,
      "offline_have": true,
      "links": {
        "ollama": "https://ollama.com/library/llama3.2",
        "hf": "https://huggingface.co/meta-llama/Llama-3.2-1B",
        "pull": "ollama pull llama3.2:1b"
      },
      "langs": {},
      "zen": "never default",
      "cli": "ollama run llama3.2:1b"
    }
  ],
  "not_mt": [
    { "id": "codestral:latest", "reason": "Code model", "link": "https://ollama.com/library/codestral" },
    { "id": "liquidai-lfm2-transcript", "reason": "Caption/transcript", "link": "https://ollama.com/library" },
    { "id": "nomic-embed-text", "reason": "Embeddings only", "link": "https://ollama.com/library/nomic-embed-text" }
  ],
  "offline_pack": {
    "title": "What we need offline",
    "have": [
      { "id": "qwen3:8b", "role": "default offline MT", "action": "keep" },
      { "id": "mistral:latest", "role": "EU alt", "action": "keep" }
    ],
    "need": [
      {
        "priority": "P0",
        "id": "nllb-200-distilled-600M",
        "why": "Dedicated offline NMT · ar/he/fa/el/hi",
        "path": "/Volumes/qbitOS/03.models/07-lang-ugrad/nllb-200-distilled-600M/",
        "pull": "hf download facebook/nllb-200-distilled-600M --local-dir /Volumes/qbitOS/03.models/07-lang-ugrad/nllb-200-distilled-600M",
        "link": "https://huggingface.co/facebook/nllb-200-distilled-600M"
      },
      {
        "priority": "P0",
        "id": "m2m100-1.2b-local",
        "why": "Edge-parity offline bulk fanout",
        "path": "/Volumes/qbitOS/03.models/07-lang-ugrad/m2m100-1.2b/",
        "pull": "hf download facebook/m2m100_1.2B --local-dir /Volumes/qbitOS/03.models/07-lang-ugrad/m2m100-1.2b",
        "link": "https://huggingface.co/facebook/m2m100_1.2B"
      },
      {
        "priority": "P1",
        "id": "qwen3:14b",
        "why": "Accuracy jump if VRAM allows",
        "pull": "ollama pull qwen3:14b",
        "link": "https://ollama.com/library/qwen3"
      },
      {
        "priority": "P2",
        "id": "indictrans2",
        "why": "hi + Indic family",
        "pull": "hf download ai4bharat/indictrans2-en-indic-1B --local-dir /Volumes/qbitOS/03.models/07-lang-ugrad/indictrans2",
        "link": "https://huggingface.co/ai4bharat/indictrans2-en-indic-1B"
      }
    ],
    "skip": ["kimi offline", "codestral for MT", "duplicate llama3.1-8b local if qwen kept"]
  },
  "routing": {
    "default_offline": "qwen3:8b",
    "default_edge": "m2m100-1.2b",
    "classical_edge": "llama-3.1-8b-instruct-fp8",
    "eu_alt_offline": "mistral:latest",
    "cjk": "qwen3:8b",
    "bulk_fanout_cloud": "m2m100-1.2b",
    "avoid_fanout": ["deepseek-r1:7b", "llama3.2:1b", "codestral:latest"],
    "cf_handler": "POST /api/ai · GET /api/models · GET /api/languages"
  },
  "per_lang_best": {
    "fr": ["qwen3:8b", "m2m100-1.2b", "mistral:latest"],
    "es": ["qwen3:8b", "m2m100-1.2b", "mistral:latest"],
    "de": ["qwen3:8b", "m2m100-1.2b", "mistral:latest"],
    "it": ["qwen3:8b", "m2m100-1.2b", "mistral:latest"],
    "pt": ["qwen3:8b", "m2m100-1.2b", "mistral:latest"],
    "nl": ["qwen3:8b", "m2m100-1.2b", "mistral:latest"],
    "sv": ["qwen3:8b", "m2m100-1.2b"],
    "pl": ["qwen3:8b", "m2m100-1.2b"],
    "cs": ["qwen3:8b", "m2m100-1.2b"],
    "ro": ["qwen3:8b", "m2m100-1.2b", "mistral:latest"],
    "hu": ["qwen3:8b", "m2m100-1.2b"],
    "ru": ["qwen3:8b", "m2m100-1.2b"],
    "uk": ["qwen3:8b", "m2m100-1.2b"],
    "el": ["m2m100-1.2b", "qwen3:8b"],
    "tr": ["m2m100-1.2b", "qwen3:8b"],
    "ar": ["m2m100-1.2b", "qwen3:8b"],
    "he": ["m2m100-1.2b", "qwen3:8b"],
    "fa": ["m2m100-1.2b", "qwen3:8b"],
    "hi": ["m2m100-1.2b", "qwen3:8b"],
    "zh": ["qwen3:8b", "m2m100-1.2b"],
    "ja": ["qwen3:8b", "m2m100-1.2b"],
    "ko": ["qwen3:8b", "m2m100-1.2b"],
    "vi": ["m2m100-1.2b", "qwen3:8b"],
    "la": ["llama-3.1-8b-instruct-fp8", "qwen3:8b"],
    "grc": ["llama-3.1-8b-instruct-fp8", "qwen3:8b"],
    "ang": ["llama-3.1-8b-instruct-fp8", "qwen3:8b"],
    "sa": ["qwen3:8b", "llama-3.1-8b-instruct-fp8"]
  },
  "links": {
    "models_page": "https://lang.ugrad.ai/models.html",
    "charts": "https://lang.ugrad.ai/charts/",
    "catalog": "https://lang.ugrad.ai/data/language/lang-catalog.json",
    "board": "https://lang.ugrad.ai/data/language/mt-models.json",
    "api_models": "https://lang.ugrad.ai/api/models",
    "zen": "https://lang.ugrad.ai/zen.html"
  }
}
