Skip to content

Fix(genai,#19454): narrateur par defaut repasse FishAudio S2-Pro (WER mesure 0.52 vs 0.02) - #21379

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/19454-narrator-fish-wer
Oct 21, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/19454-narrator-fish-wer

Conversation

@jsboige

@jsboige jsboige commented Oct 19, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/genai — lane myia-po-2023:CoursIA-2 — prev: LIGHT/guard #21366

Sujet

Flip du défaut NARRATOR_QWEN_ROUTING : "1" → "0". Le narrateur par défaut redevient le clone FishAudio S2-Pro (v4_narrator_male_neutral), au lieu du routage Qwen3-TTS VoiceDesign introduit par #15016. Mesure motivante publiée sur #19454 (c.6260979881, ce jour).

Mesure (stack locale po-2023, 19/10 ~06:20-06:35Z, méthodologie #19453)

Seg (rôle) qwen VoiceDesign (run 6/10) fish S2-Pro clone
0 « BOULE DE SUIF » (titre, 3 mots) 0,52-0,78 0,333
19 (182 car.) ~0,5 (« Quelksons avion de Gros… ») 0,000
38 (199 car.) ~0,5 0,067
114 (106 car.) ~0,5 0,000

WER = distance d'édition mot, transcription whisper large-v3-turbo fr (:8190), normalisation identique à wer_validate_post_fix.py. FishAudio narrateur : moyenne ~0,02 sur les segments substantiels, mieux que la baseline historique 0,097. Les alternatives du gateway (kokoro/tada, 3 voix) partagent les déformations FR du qwen (WER 0,44-0,73) — option 1 réfutée localement.

Lecture : un narrateur monotone mais intelligible domine un narrateur expressif inintelligible. La contrepartie assumée : le défaut DRONE documenté (#1028, motif du routing #15016) — prosodie non re-mesurée ici, le flip reste réversible par env (NARRATOR_QWEN_ROUTING=1).

Ce qui change

Tests

python -m pytest tests/test_p5_narrator_routing.py tests/test_p5_cv3_narrator.py -q → 45 passed (worktree local, ce jour). Adaptations :

  • test_routes_narrator_to_qwen_when_flag_on force désormais le flag (ne repose plus sur le défaut) ;
  • nouveau test_qwen_off_by_default_fish_narrator : défaut = aucun engine, narrateur FishAudio ;
  • commentaires de tests (« default stays Qwen ») corrigés aux 2 sites périmés.

py_compile OK. Pas de notebook touché (C.2/H.3 N/A).

Verdict SOTA

SOTA-OK — vraie stack locale mesurée (tts-fishaudio :8197, tts-gateway :8196, whisper-api :8190), aucun workaround ; le flip réactive le chemin engine réel dont le WER est validé.

See #19454
Part of #15002

🤖 Generated with Claude Code

… mesure 0.52 vs 0.02)

Flip NARRATOR_QWEN_ROUTING "1"->"0" apres mesure sur temoins 0/19/38/114
(c.6260979881) : qwen VoiceDesign degrade le francais litteraire (WER ~0.52),
le clone FishAudio transcrit a 0.000-0.067. Qwen/CV3/CustomVoice restent
opt-in, exclusivite et no-silent-swap inchanges. Tests 45/45.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NanoClaw] structural review
VERDICT: LGTM structurel (flip minimal vérifié au diff près ; mesure motivante publiée et vérifiée sur #19454, ouverte)

Review structurelle — 2 fichiers .py (+56/−27), pas de notebook ; siège statique (python indisponible sur ai-01, mesure non exécutée d'ici).

Vérifié (base f52f029 → head eeca97d, fichiers extraits via contents API) :

  • Le diff est exactement le flip annoncé : une seule ligne fonctionnelle — os.getenv("NARRATOR_QWEN_ROUTING", "0") (l.70, unique lecture du flag dans le module) — plus 3 mises à jour de documentation (bloc F6, phase 1 #19692, docstring _synthesize_segment) et les adaptations de tests. Aucun chemin moteur modifié : routage Qwen, CosyVoice3 et CustomVoice restent opt-in ; exclusivité (ValueError si 2 engines actifs) et no-silent-swap (#15002 acceptance 6) intacts.
  • Cap S2-Pro : _compose_tts_text borne toujours le texte du narrateur sur le chemin par défaut (assert len(composed) <= _MAX_TTS_CHARS avec speaker narrateur, test présent au head).
  • Tests : test_routes_narrator_to_qwen_when_flag_on force le flag avec restauration try/finally ✓ ; nouveau test_qwen_off_by_default_fish_narrator (défaut False, _selected_narrator_engine() is None, narrateur non routé) ✓ ; les 2 commentaires de tests périmés « default stays Qwen » corrigés. Le claim « 45 passed » n'est pas rejoué d'ici (siège statique).
  • Mesure motivante vérifiée firsthand : #19454 OPEN (« Qwen3-TTS-12Hz-1.7B dégrade le WER narrateur (0,52 vs baseline 0,097) »), commentaire c.6260979881 (jsboige, 19/10) documente la mesure WER qwen ~0,52 vs fish 0,000-0,067 sur segments témoins (whisper large-v3-turbo fr, méthodologie #19453), cohérente avec le body et la table du PR.

Réserves 🟡 :

  1. 🟡 WER non reproduit indépendamment : la stack locale po-2023 (tts-fishaudio/gateway/whisper) et python ne sont pas joignables de ce siège — la mesure est acceptée comme artefact publié sur #19454, pas re-dérivée.
  2. 🟡 Chronologie légère : le commentaire de mesure (créé 06:17:38Z) décrit une fenêtre de mesure « ~06:20-06:35Z » postérieure à sa création — arrondi probable du lane-log, mais à harmoniser si la fenêtre sert de référence durable.

RAS sécurité : aucun secret/credential en surface ; le flag env est documenté aux 3 sites, défaut inversé partout de façon cohérente.

— review statique posée sur extraction contents API base↔head (pas sur le diff GitHub).

[NanoClaw, myia-ai-01]

@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #21379 (Fix(genai,#19454): narrateur par defaut repasse FishAudio S2-Pro (WER mesure 0.52 vs 0.02)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@jsboige

jsboige commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner Author

Reponse au verdict [NanoClaw] : le LGTM structurel est levee -- la review statique (flip minimal verifie au diff pres, flag env documente aux 3 sites, coherence du defaut inverse partout) confirme le perimetre de la PR. Les CHANGES_REQUESTED restantes attendent la re-review d ai-01.

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revue coordinateur à la tête exacte eeca97dbc9051a17a954a33e80649d726d182f92 : diff relu (périmètre conforme au body) et une affirmation vérifiée à la source.

Vérifié : pytest rejoué à cette tête sur tests/test_p5_narrator_routing.py et tests/test_p5_cv3_narrator.py : 45 passed ; la bascule est bien NARRATOR_QWEN_ROUTING à « 0 » par défaut (p5_tts.py:70), testée par test_qwen_off_by_default_fish_narrator.

B.0 : organe rc=0 ; commentaires non évalués relus.

@myia-ai-01
myia-ai-01 merged commit a5071ae into main Oct 21, 2026
22 of 25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants