{
  "model_id": "baobab-fr-ci",
  "display_name": "Baobab Ivorian French",
  "model_version": "2026.10.national",
  "family": "baobab",
  "status": "national_shipped",
  "product_line": "National Abidjan Ivorian French speech + phrase MT corridor — generative_inference_live false; neural_nmt false; trainingEligible locked. Product default fr-CI / own:fr-ci-female. France French (fr-FR) and Senegalese French are not interchangeable.",
  "varieties": [
    {
      "variety_id": "fr-ci",
      "pack_key": "abidjan",
      "name_en": "Ivorian French (Abidjan)",
      "bcp47": "fr-CI",
      "iso6393": "fra",
      "echo_voice_id": "own:fr-ci-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": "fr",
      "language_pack_version": "fr-ci-pack-2026.10",
      "corridor_id": "en-fr-ci",
      "primary_use": "Abidjan / Côte d'Ivoire citizen services / education / MeetingBridge Côte d'Ivoire French",
      "domains": [
        "greetings",
        "everyday",
        "airtime",
        "health",
        "civic",
        "market"
      ],
      "dataset_manifest": "apps/api/eval/corridors/en-fr-ci/test-scripts.json",
      "trainingEligible": false,
      "not_interchangeable_with": [
        "fr-fr",
        "fr-sn",
        "fr-cm"
      ],
      "audio_clean": "spectral_gate_v2",
      "mt": {
        "status": "phrase_table_only",
        "pairs": [
          "en↔fr"
        ],
        "note": "Deterministic phrase + lexical Baobab pack in lugemi-mt.engine. Fail-closed when uncovered. No dedicated neural NMT service."
      },
      "asr": {
        "status": "neural_offline",
        "checkpoint": "openai/whisper-small (Ivorian French + Abidjan phrase rescoring)",
        "license": "see_model_card",
        "env_gate": "Ivorian French speech",
        "variety_exclusive_finetune": false
      },
      "tts": {
        "status": "neural_offline",
        "checkpoint": "facebook/mms-tts-fra ONNX + Abidjan prosody",
        "license": "CC-BY-NC-4.0",
        "env_gate": "Ivorian French speech",
        "variety_exclusive_finetune": false
      },
      "s2s_corridor": {
        "status": "corridor_pass",
        "note": "en-fr-ci corridor scripts PASS when speech URL points at shared Echo speech worker. Broad domain deferred. Clarity: spectral_gate_v2."
      },
      "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-fr-ci",
        "GET /v1/baobab/fr-ci/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": [
        "regional French offline path (no English remap); paired en-GH for EN listen channels only",
        "spectral_gate_v2 clarity on live neural WAV",
        "variety headers — fr-ci"
      ],
      "residency_preference": null,
      "audit": false,
      "commercial_nc_clean_tts_required": false
    },
    {
      "id": "education",
      "name": "Education / free",
      "who": "Students, UFHB / INPHB 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-fr-ci"
      ],
      "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": "CI",
      "audit": true,
      "commercial_nc_clean_tts_required": false
    },
    {
      "id": "ministry",
      "name": "Ministry production",
      "who": "Côte d'Ivoire government services (Abidjan / Côte d'Ivoire citizen channels)",
      "auth": "Ministry-keyed org API key — Business plan mapping",
      "maps_to_plan": "business",
      "endpoints": [
        "POST /v1/translate",
        "POST /v1/tts/synthesize",
        "MeetingBridge Côte d'Ivoire French corridor (en-fr-ci)",
        "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 IN (affinity, not hard geo-fence)"
      ],
      "residency_preference": "CI",
      "audit": true,
      "commercial_nc_clean_tts_required": false
    },
    {
      "id": "enterprise",
      "name": "Enterprise",
      "who": "Banks, telcos, NGOs serving Abidjan / Côte d'Ivoire",
      "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 TTS assets",
        "Audit + retention"
      ],
      "residency_preference": "AF",
      "audit": true,
      "commercial_nc_clean_tts_required": true
    }
  ],
  "research": {
    "id": "baobab-fr-ci-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": {
      "primary": "baobab-fr-ci-abidjan-lm-*"
    },
    "prerequisites": [
      "en-fr-ci corridor + national API surfaces remain the product wedge",
      "Mix / Fidelity / Live evals and rights clear",
      "Consented parallel + speech data 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",
        "required": true,
        "met": false,
        "description": "trainingEligible stays false until Abidjan / Côte d'Ivoire community speakers re-confirm for training."
      },
      {
        "id": "variety_separation",
        "required": true,
        "met": false,
        "description": "Any future LM/adapters must ship as baobab-fr-ci-abidjan-* — never one blob marketed as interchangeable varieties."
      },
      {
        "id": "beat_phrase_mt_baselines",
        "required": true,
        "met": false,
        "description": "Generative claims require held-out gains vs corridor phrase-MT baselines on declared native tasks."
      },
      {
        "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/src/baobab/baobab-fr-ci.research.ts#RESEARCH_GOLDENS",
      "runner": "apps/api/src/baobab/baobab-fr-ci.research.ts#evaluateBaobabFrCiNativeTasks",
      "generative_default": "unsupported"
    },
    "training_recipe": "docs/baobab/GENERATIVE_LM_RECIPE.md",
    "note": "Research slot + harness + training recipe only. Do not brand phrase MT or speech corridors as a full national LLM. Generative inference unsupported until gates are met."
  },
  "training_eligible_unlock": {
    "trainingEligible": false,
    "status": "locked",
    "unlock_doc": "docs/baobab/TRAINING_ELIGIBLE_UNLOCK.md",
    "gates": [
      {
        "id": "community_consent_yo",
        "required": true,
        "met": false,
        "evidence_required": "Signed Abidjan / Côte d'Ivoire contributor agreements reconfirming training use",
        "description": "Abidjan / Côte d'Ivoire 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": "yo_native_review",
        "required": true,
        "met": false,
        "evidence_required": "Paid Ivorian French (Abidjan / Ivorian French) native review records with trainingEligible fields",
        "description": "Native review must cover Ivorian French (Abidjan / Ivorian French) before any train export."
      },
      {
        "id": "variety_not_conflated",
        "required": true,
        "met": false,
        "evidence_required": "Corpus metadata proving non-interchangeable varieties excluded from train exports",
        "description": "France French (fr-FR) and Senegalese French (fr-SN) are not interchangeable with Abidjan Ivorian French — not the national default."
      },
      {
        "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": [
    "Ivorian French MMS-TTS (facebook/mms-tts-fra) is CC-BY-NC-4.0 — unrestricted commercial redistribution of those assets is blocked.",
    "Whisper ASR for Ivorian French corridor — pin versions and attribute per model card.",
    "Abidjan is the product default via prosody + labels on shared Ivorian French-general weights — not a Côte d'Ivoire-wide exclusive speech finetune, and not interchangeable with France French (fr-FR) or Senegalese French (fr-SN).",
    "Phrase/lexical Baobab MT covers reviewed corridor domains; neural_nmt is false (no dedicated Ivorian French NLLB national service shipped)."
  ],
  "capabilities": {
    "phrase_mt": "phrase_table_only",
    "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,
    "audio_clean": "spectral_gate_v2"
  },
  "honesty": {
    "phrase_table_only": true,
    "national_api_tiers": true,
    "research_slot_shipped": true,
    "neural_speech_live": false,
    "neural_nmt": false,
    "generative_inference_live": false,
    "foundation_llm_weights": false,
    "ships_trained_baobab_foundation": 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_yo",
          "required": true,
          "met": false,
          "evidence_required": "Signed Abidjan / Côte d'Ivoire contributor agreements reconfirming training use",
          "description": "Abidjan / Côte d'Ivoire 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": "yo_native_review",
          "required": true,
          "met": false,
          "evidence_required": "Paid Ivorian French (Abidjan / Ivorian French) native review records with trainingEligible fields",
          "description": "Native review must cover Ivorian French (Abidjan / Ivorian French) before any train export."
        },
        {
          "id": "variety_not_conflated",
          "required": true,
          "met": false,
          "evidence_required": "Corpus metadata proving non-interchangeable varieties excluded from train exports",
          "description": "France French (fr-FR) and Senegalese French (fr-SN) are not interchangeable with Abidjan Ivorian French — not the national default."
        },
        {
          "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."
    },
    "iso_code": "fr",
    "audio_clean": "spectral_gate_v2",
    "nmt": {
      "neural_nmt": false,
      "disclosed_base_named": null,
      "disclosed_base_weights_in_repo": false,
      "commercial_license_cleared": false,
      "adapter_status": "phrase_table_only",
      "checkpoint_shipped": false,
      "phrase_table_live": true,
      "phrase_table_pairs": [
        "en↔fr"
      ],
      "remote_mt_configured": false,
      "remote_mt_env": null,
      "baobab_fr_ci_nmt_url_configured": false,
      "baobab_fr_ci_nmt_env": null,
      "separate_variety_adapters": false,
      "note": "Baobab Ivorian French MT is phrase/lexical only (en↔fr). Fail-closed when uncovered. neural_nmt false."
    },
    "residency": {
      "serving_today": "jnb",
      "serving_today_label": "Africa-primary Fly region Johannesburg (jnb)",
      "affinity_target": "af-west-1",
      "affinity_city": "Abidjan",
      "affinity_country": "CI",
      "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. Abidjan is the Côte d'Ivoire residency preference; Africa-west affinity pin remains af-west-1. Live serving for verbalab is jnb today; Ivorian French neural speech uses the optional shared Echo worker (no dedicated always-on Fly app). No Accra GPU island is deployed."
    },
    "licenses": {
      "tts": "CC-BY-NC-4.0",
      "asr": "see_model_card",
      "note": "TTS is CC-BY-NC-4.0. neural_nmt stays false — no dedicated NLLB remote shipped. Clarity path: spectral_gate_v2."
    },
    "deferred": [
      "Commercially cleared neural NMT (phrase MT is the live fail-closed path)",
      "Accra GPU island / hard Ghana geo-fence (affinity af-west-1; serving jnb)",
      "Contractual ministry SLA signature (operational targets shipped)",
      "Generative LM weights + inference (recipe + gates only)",
      "Variety-exclusive ASR/TTS finetunes beyond shared checkpoints",
      "trainingEligible unlock evidence (checklist shipped; flag locked false)"
    ]
  },
  "endpoints": {
    "model_card": "GET /v1/models/baobab-fr-ci",
    "national": "GET /v1/baobab/fr-ci/national",
    "research": "GET /v1/baobab/fr-ci/research",
    "unlock": "GET /v1/baobab/fr-ci/unlock",
    "slo": "GET /v1/baobab/fr-ci/slo",
    "translate": "POST /v1/translate",
    "demo_speech": "POST /v1/demo/speech",
    "tts": "POST /v1/tts/synthesize",
    "meetingbridge_cote_divoire": "MeetingBridge Côte d'Ivoire French corridor (en-fr-ci)",
    "corridor": "en-fr-ci",
    "residency": "GET /v1/residency",
    "translate_metrics": "GET /v1/metrics/translate"
  },
  "docs": {
    "national_model": "docs/baobab/FR_CI_NATIONAL_MODEL.md",
    "model_card": "docs/baobab/baobab-fr-ci.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",
    "corridor": "en-fr-ci",
    "language_kit": "docs/models/05_LANGUAGE_KIT.md",
    "residency": "docs/residency.md"
  },
  "as_of": "2026-10-23T10:27:02.976Z"
}