{
  "model_id": "baobab-twi",
  "display_name": "Baobab Twi",
  "model_version": "2026.10.deferred",
  "family": "baobab",
  "status": "deferred_slice_shipped",
  "product_line": "National Twi speech + MT corridor (phrase + optional NC NLLB) with Phase D generative research slot — generative_inference_live false; trainingEligible locked.",
  "varieties": [
    {
      "variety_id": "ak-gh-asante",
      "pack_key": "asante",
      "name_en": "Asante Twi",
      "bcp47": "ak-GH",
      "echo_voice_id": "own:ak-gh-female",
      "english_accent": {
        "locale": "en-GH",
        "voice_id": "own:en-gh-female",
        "label": "Ama · Ghanaian English",
        "region": "ghana",
        "note": "Ghanaian English accent paired with Ghana L1 national models (Twi, Ga, Ewe, Fante, Hausa Zongo) and nearest West African English for Senegal / Côte d'Ivoire French nationals until dedicated en-SN / en-CI accents ship. Never substitutes for L1 French."
      },
      "mt_lang_key": "ak",
      "language_pack_version": "asante-pack-2026.10-b",
      "corridor_id": "en-ak-asante",
      "primary_use": "Everyday / CS / MeetingBridge Ghana",
      "domains": [
        "greetings",
        "public_services",
        "education",
        "health",
        "civic",
        "customer_support"
      ],
      "dataset_manifest": "apps/api/eval/baobab-twi/dataset-manifest.asante.json",
      "trainingEligible": false,
      "not_interchangeable_with": [
        "ak-gh-akuapem",
        "ak-gh-akuapem-twi",
        "ak-gh-fante"
      ],
      "mt": {
        "status": "phrase_table_only",
        "pairs": [
          "en↔ak"
        ],
        "phase_b_expanded": true,
        "note": "Phase B phrase + lexical pack. Fail-closed when uncovered. Neural NMT when BAOBAB_TWI_NMT_URL live."
      },
      "asr": {
        "status": "neural_offline",
        "checkpoint": "tiffany101/whisper-twi-v2",
        "license": "Apache-2.0",
        "env_gate": "Asante speech",
        "variety_exclusive_finetune": false
      },
      "tts": {
        "status": "neural_offline",
        "checkpoint": "onnx-community/mms-tts-aka-ONNX",
        "license": "CC-BY-NC-4.0",
        "env_gate": "Asante speech",
        "variety_exclusive_finetune": false
      },
      "s2s_corridor": {
        "status": "corridor_pass",
        "note": "Corridor scripts PASS (en-GH TTS ↔ Baobab ↔ Asante TTS/ASR). Broad domain deferred."
      },
      "speech_finetune_recipe": "docs/baobab/SPEECH_FINETUNE_RECIPE.md"
    },
    {
      "variety_id": "ak-gh-akuapem",
      "pack_key": "akuapem",
      "name_en": "Akuapem Twi",
      "bcp47": "ak-GH",
      "echo_voice_id": "own:ak-gh-akuapem-female",
      "english_accent": {
        "locale": "en-GH",
        "voice_id": "own:en-gh-female",
        "label": "Ama · Ghanaian English",
        "region": "ghana",
        "note": "Ghanaian English accent paired with Ghana L1 national models (Twi, Ga, Ewe, Fante, Hausa Zongo) and nearest West African English for Senegal / Côte d'Ivoire French nationals until dedicated en-SN / en-CI accents ship. Never substitutes for L1 French."
      },
      "mt_lang_key": "ak-akuapem",
      "language_pack_version": "akuapem-pack-2026.10-b",
      "corridor_id": "en-ak-akuapem",
      "primary_use": "Education, literary, broadcast orthography",
      "domains": [
        "greetings",
        "public_services",
        "education",
        "health",
        "civic",
        "customer_support"
      ],
      "dataset_manifest": "apps/api/eval/baobab-twi/dataset-manifest.akuapem.json",
      "trainingEligible": false,
      "not_interchangeable_with": [
        "ak-gh-asante",
        "ak-gh-asante-twi",
        "ak-gh-fante"
      ],
      "mt": {
        "status": "phrase_table_only",
        "pairs": [
          "en↔ak-akuapem"
        ],
        "phase_b_expanded": true,
        "note": "Separate Akuapem Phase B phrase table. Fail-closed when uncovered."
      },
      "asr": {
        "status": "neural_offline",
        "checkpoint": "tiffany101/whisper-twi-v2",
        "license": "Apache-2.0",
        "env_gate": "Akuapem / Asante speech",
        "variety_exclusive_finetune": false
      },
      "tts": {
        "status": "neural_offline",
        "checkpoint": "onnx-community/mms-tts-aka-ONNX",
        "license": "CC-BY-NC-4.0",
        "env_gate": "Akuapem / Asante speech",
        "variety_exclusive_finetune": false
      },
      "s2s_corridor": {
        "status": "corridor_pass",
        "note": "Corridor scripts PASS. Upstream speech is Akan/Twi-general; variety via orthography + rescoring."
      },
      "speech_finetune_recipe": "docs/baobab/SPEECH_FINETUNE_RECIPE.md"
    }
  ],
  "national_tiers": [
    {
      "id": "public_demo",
      "name": "Public demo",
      "who": "Citizens, press, students (unauthenticated demos)",
      "auth": "None — soft abuse controls on demo speech",
      "maps_to_plan": null,
      "endpoints": [
        "GET /v1/models/baobab-twi",
        "GET /v1/baobab/twi/national",
        "POST /v1/demo/speech"
      ],
      "limits": {
        "translate_chars_daily_hint": "Authenticated translate required for production MT",
        "demo_speech": "400 requests / 10 minutes / IP (demo controller)",
        "rate_limit_note": "Demo speech returns rate_limited when exceeded"
      },
      "controls": [
        "honest en-GH remap when speech URL offline (paired Ghanaian English accent)",
        "variety headers on Akan demos"
      ],
      "residency_preference": null,
      "audit": false,
      "commercial_nc_clean_tts_required": false
    },
    {
      "id": "education",
      "name": "Education / free",
      "who": "Students, KNUST labs, research orgs on Free/Pro plans",
      "auth": "Org API key (TranslateAuthGuard) — Free or Pro plan",
      "maps_to_plan": "free|pro",
      "endpoints": [
        "POST /v1/translate",
        "POST /v1/tts/synthesize",
        "POST /v1/audio/transcriptions (when ASR keyed)",
        "GET /v1/models/baobab-twi"
      ],
      "limits": {
        "translate_chars_daily_hint": "Free: BILLING_FREE_TRANSLATE_CHARS_QUOTA (default 50k); Pro: BILLING_PRO_TRANSLATE_CHARS_QUOTA",
        "demo_speech": null,
        "rate_limit_note": "RATE_LIMIT_FREE_PER_KEY / RATE_LIMIT_PRO_PER_KEY via existing RateLimitGuard"
      },
      "controls": [
        "UsageService metering",
        "BillingService.assertWithinQuota"
      ],
      "residency_preference": "GH",
      "audit": true,
      "commercial_nc_clean_tts_required": false
    },
    {
      "id": "ministry",
      "name": "Ministry production",
      "who": "Ghana government services",
      "auth": "Ministry-keyed org API key — Business plan mapping",
      "maps_to_plan": "business",
      "endpoints": [
        "POST /v1/translate",
        "POST /v1/tts/synthesize",
        "MeetingBridge Ghana corridor",
        "GET /v1/residency",
        "GET /v1/metrics/translate"
      ],
      "limits": {
        "translate_chars_daily_hint": "Business translate quota (BILLING_BUSINESS_TRANSLATE_CHARS_QUOTA)",
        "demo_speech": null,
        "rate_limit_note": "RATE_LIMIT_BUSINESS_PER_KEY / PER_ORG"
      },
      "controls": [
        "AuditService on translate.completed",
        "Org retention / vendor-training settings",
        "Residency preference GH (affinity, not hard geo-fence)"
      ],
      "residency_preference": "GH",
      "audit": true,
      "commercial_nc_clean_tts_required": false
    },
    {
      "id": "enterprise",
      "name": "Enterprise",
      "who": "Banks, telcos, NGOs",
      "auth": "Paid Enterprise keys",
      "maps_to_plan": "enterprise",
      "endpoints": [
        "POST /v1/translate (+ TM / quality)",
        "Speech + MeetingBridge",
        "Fine-tunes / marketplace where plan allows"
      ],
      "limits": {
        "translate_chars_daily_hint": "Enterprise translate quota",
        "demo_speech": null,
        "rate_limit_note": "RATE_LIMIT_ENTERPRISE_PER_KEY / PER_ORG"
      },
      "controls": [
        "SLA targets (documented; contractual SLA separate)",
        "Commercial TTS path must be NC-clean for redistribution of MMS weights",
        "Audit + retention"
      ],
      "residency_preference": "AF",
      "audit": true,
      "commercial_nc_clean_tts_required": true
    }
  ],
  "research": {
    "id": "baobab-twi-generative-lm",
    "status": "research_planned",
    "foundation_llm_weights": false,
    "generative_inference_live": false,
    "ships_trained_baobab_foundation": false,
    "separate_variety_checkpoints_required": true,
    "proposed_checkpoint_ids": {
      "asante": "baobab-twi-asante-lm-*",
      "akuapem": "baobab-twi-akuapem-lm-*",
      "never_one_blob": true
    },
    "prerequisites": [
      "Phases A–C corridor + national API surfaces remain the product wedge",
      "Mix / Fidelity / Live Twi–English evals and rights clear",
      "Consented parallel + speech data per variety with held-outs"
    ],
    "acceptance_gates": [
      {
        "id": "held_out_speakers",
        "required": true,
        "met": false,
        "description": "Held-out evaluation speakers must never appear in training exports; speaker lists remain empty until consented collection."
      },
      {
        "id": "community_consent_asante_and_akuapem",
        "required": true,
        "met": false,
        "description": "trainingEligible stays false until community Asante and Akuapem speakers re-confirm for training."
      },
      {
        "id": "separate_variety_adapters",
        "required": true,
        "met": false,
        "description": "Any future LM/adapters must ship as baobab-twi-asante-* and baobab-twi-akuapem-* — never one blob marketed as both."
      },
      {
        "id": "beat_phrase_mt_baselines",
        "required": true,
        "met": false,
        "description": "Generative claims require held-out gains vs corridor phrase-MT baselines on declared Twi-native tasks (Mix/Fidelity/Live gates)."
      },
      {
        "id": "commercial_rights_clear",
        "required": true,
        "met": false,
        "description": "Base model + data licenses must clear commercial ministry/enterprise redistribution before promotion."
      }
    ],
    "task_harness": {
      "goldens": "apps/api/eval/baobab-twi/goldens.phase-d-tasks.json",
      "runner": "apps/api/src/baobab/baobab-twi.research.ts#evaluateBaobabTwiNativeTasks",
      "generative_default": "unsupported"
    },
    "training_recipe": "docs/baobab/GENERATIVE_LM_RECIPE.md",
    "note": "Research slot + harness + training recipe only. Do not brand phrase/NLLB MT or speech corridors as a full national LLM. Generative inference unsupported until gates are met and Lugemi-owned weights exist."
  },
  "training_eligible_unlock": {
    "trainingEligible": false,
    "status": "locked",
    "unlock_doc": "docs/baobab/TRAINING_ELIGIBLE_UNLOCK.md",
    "gates": [
      {
        "id": "community_consent_asante",
        "required": true,
        "met": false,
        "evidence_required": "Signed Asante contributor agreements reconfirming training use",
        "description": "Asante community speakers must reconfirm training export consent."
      },
      {
        "id": "community_consent_akuapem",
        "required": true,
        "met": false,
        "evidence_required": "Signed Akuapem contributor agreements reconfirming training use",
        "description": "Akuapem community speakers must reconfirm training export consent."
      },
      {
        "id": "held_out_speaker_lists",
        "required": true,
        "met": false,
        "evidence_required": "Published held-out speaker IDs never present in train splits",
        "description": "Held-out evaluation speakers must never appear in training exports."
      },
      {
        "id": "dual_variety_native_review",
        "required": true,
        "met": false,
        "evidence_required": "Paid Asante + Akuapem native review records with trainingEligible fields",
        "description": "Native review must cover both varieties separately before any train export."
      },
      {
        "id": "rights_clear_for_export",
        "required": true,
        "met": false,
        "evidence_required": "Legal memo clearing commercial vs research split for export corpus",
        "description": "IP / commercial rights must clear before trainingEligible flips."
      }
    ],
    "note": "trainingEligible remains false until all gates are met with durable evidence. Do not invent consent."
  },
  "license_warnings": [
    "MMS TTS (mms-tts-aka) is CC-BY-NC-4.0 — unrestricted commercial redistribution of those weights is blocked.",
    "Whisper-twi-v2 is Apache-2.0; attribute and pin versions.",
    "NLLB-200 distilled (baobab-twi-mt) is CC-BY-NC — commercial_license_cleared false; fail-closed phrase MT remains available.",
    "Phrase/lexical Baobab MT covers reviewed domains; neural NMT when live is NC-restricted."
  ],
  "capabilities": {
    "phrase_mt": "phrase_table_only",
    "phrase_mt_phase_b_domains": true,
    "national_api_tiers": true,
    "generative_lm_research_slot": true,
    "generative_inference_live": false,
    "neural_nmt": false,
    "neural_asr": false,
    "neural_tts": false,
    "s2s_corridor": true,
    "foundation_llm_weights": false
  },
  "honesty": {
    "phrase_table_only": true,
    "phrase_coverage_expanded_phase_b": true,
    "national_api_tiers_phase_c": true,
    "phase_d_research_shipped": true,
    "post_d_national_readiness": true,
    "deferred_slice_shipped": true,
    "neural_speech_live": false,
    "neural_nmt": false,
    "generative_inference_live": false,
    "foundation_llm_weights": false,
    "ships_trained_baobab_foundation": false,
    "asante_akuapem_interchangeable": false,
    "variety_exclusive_speech_finetunes": false,
    "trainingEligible": false,
    "training_eligible_unlock": {
      "trainingEligible": false,
      "status": "locked",
      "unlock_doc": "docs/baobab/TRAINING_ELIGIBLE_UNLOCK.md",
      "gates": [
        {
          "id": "community_consent_asante",
          "required": true,
          "met": false,
          "evidence_required": "Signed Asante contributor agreements reconfirming training use",
          "description": "Asante community speakers must reconfirm training export consent."
        },
        {
          "id": "community_consent_akuapem",
          "required": true,
          "met": false,
          "evidence_required": "Signed Akuapem contributor agreements reconfirming training use",
          "description": "Akuapem community speakers must reconfirm training export consent."
        },
        {
          "id": "held_out_speaker_lists",
          "required": true,
          "met": false,
          "evidence_required": "Published held-out speaker IDs never present in train splits",
          "description": "Held-out evaluation speakers must never appear in training exports."
        },
        {
          "id": "dual_variety_native_review",
          "required": true,
          "met": false,
          "evidence_required": "Paid Asante + Akuapem native review records with trainingEligible fields",
          "description": "Native review must cover both varieties separately before any train export."
        },
        {
          "id": "rights_clear_for_export",
          "required": true,
          "met": false,
          "evidence_required": "Legal memo clearing commercial vs research split for export corpus",
          "description": "IP / commercial rights must clear before trainingEligible flips."
        }
      ],
      "note": "trainingEligible remains false until all gates are met with durable evidence. Do not invent consent."
    },
    "bare_ak_defaults_to": "ak-gh-asante",
    "bare_ak_warning": "Bare `ak` / `tw` / `twi` resolves to Asante (`ak-gh-asante`). Pass `ak-gh-akuapem` or `ak-akuapem` for Akuapem. Varieties are never interchangeable. Shared Akan checkpoints + orthography — not exclusive finetunes.",
    "nmt": {
      "neural_nmt": false,
      "disclosed_base_named": "nllb-200-distilled-600M",
      "disclosed_base_weights_in_repo": false,
      "commercial_license_cleared": false,
      "nllb_license": "CC-BY-NC",
      "adapter_status": "disabled_until_checkpoint",
      "checkpoint_shipped": false,
      "remote_mt_configured": false,
      "remote_mt_env": null,
      "baobab_twi_nmt_url_configured": false,
      "baobab_twi_nmt_env": null,
      "baobab_twi_nmt_live": false,
      "separate_variety_adapters": false,
      "note": "Baobab Twi NMT remote not live. Phrase/lexical packs remain the fail-closed default. Optional BAOBAB_TWI_NMT_URL / LUGEMI_MT_URL when set. NLLB base is CC-BY-NC."
    },
    "residency": {
      "serving_today": "jnb",
      "serving_today_label": "Africa-primary Fly region Johannesburg (jnb)",
      "affinity_target": "af-west-1",
      "affinity_city": "Accra",
      "affinity_country": "GH",
      "accra_gpu_island": false,
      "accra_gpu_island_status": "deferred",
      "hard_geo_fence": false,
      "preference_model": "affinity_not_hard_fence",
      "ministry_affinity_pin": "af-west-1",
      "affinity_enforcement": "soft_preference_recorded",
      "accra_island_runbook": "docs/baobab/ACCRA_RESIDENCY.md",
      "note": "Inference prefers matching person/org residency to nearby model hosting when ready — affinity, not a hard geo-fence. Accra (af-west-1) is the Ghana affinity target; live serving for verbalab + lugemi-asante + baobab-twi-mt is jnb today. No Accra GPU island is deployed. Ministry requests record X-Lugemi-Residency-Affinity soft pin."
    },
    "licenses": {
      "mms_tts_aka": "CC-BY-NC-4.0",
      "whisper_twi_v2": "Apache-2.0",
      "nllb_200_distilled": "CC-BY-NC",
      "mms_commercial_redistribution": "restricted_nc",
      "nllb_commercial_redistribution": "restricted_nc",
      "note": "MMS TTS and NLLB distilled are CC-BY-NC — commercial redistribution restricted. Whisper-twi-v2 is Apache-2.0. neural_nmt true only when NMT health probe succeeds."
    },
    "deferred": [
      "Commercially cleared NMT + variety-exclusive adapters (NLLB NC live path ≠ commercial clear)",
      "Accra GPU island / hard Ghana geo-fence (affinity af-west-1; serving jnb)",
      "Contractual ministry SLA signature (operational targets shipped)",
      "Generative Twi LM weights + inference (recipe + gates only)",
      "Variety-exclusive ASR/TTS finetunes (recipe shipped; shared checkpoints live)",
      "trainingEligible unlock evidence (checklist shipped; flag locked false)"
    ]
  },
  "endpoints": {
    "model_card": "GET /v1/models/baobab-twi",
    "national": "GET /v1/baobab/twi/national",
    "research": "GET /v1/baobab/twi/research",
    "unlock": "GET /v1/baobab/twi/unlock",
    "slo": "GET /v1/baobab/twi/slo",
    "translate": "POST /v1/translate",
    "demo_speech": "POST /v1/demo/speech",
    "tts": "POST /v1/tts/synthesize",
    "meetingbridge_ghana": "MeetingBridge Ghana corridor",
    "dataset_manifests": "apps/api/eval/baobab-twi/dataset-manifest.*.json",
    "residency": "GET /v1/residency",
    "translate_metrics": "GET /v1/metrics/translate"
  },
  "docs": {
    "national_model": "docs/baobab/TWI_NATIONAL_MODEL.md",
    "model_card": "docs/baobab/baobab-twi.MODEL_CARD.md",
    "partnership_open_eval": "docs/baobab/PARTNERSHIP_OPEN_EVAL.md",
    "ministry_sla": "docs/baobab/MINISTRY_SLA.md",
    "training_eligible_unlock": "docs/baobab/TRAINING_ELIGIBLE_UNLOCK.md",
    "speech_finetune_recipe": "docs/baobab/SPEECH_FINETUNE_RECIPE.md",
    "generative_lm_recipe": "docs/baobab/GENERATIVE_LM_RECIPE.md",
    "accra_residency": "docs/baobab/ACCRA_RESIDENCY.md",
    "asante_corridor": "en-ak-asante",
    "akuapem_corridor": "en-ak-akuapem",
    "language_kit": "docs/models/05_LANGUAGE_KIT.md",
    "residency": "docs/residency.md"
  },
  "as_of": "2026-10-23T10:16:02.781Z"
}