Repository navigation
Fix(genai,#19454): narrateur par defaut repasse FishAudio S2-Pro (WER mesure 0.52 vs 0.02) - #21379
Conversation
… 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>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[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é (ValueErrorsi 2 engines actifs) et no-silent-swap (#15002 acceptance 6) intacts. - Cap S2-Pro :
_compose_tts_textborne toujours le texte du narrateur sur le chemin par défaut (assertlen(composed) <= _MAX_TTS_CHARSavec speaker narrateur, test présent au head). - Tests :
test_routes_narrator_to_qwen_when_flag_onforce le flag avec restaurationtry/finally✓ ; nouveautest_qwen_off_by_default_fish_narrator(défautFalse,_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 🟡 :
- 🟡 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.
- 🟡 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]
Path-collision (organ #13359/#13615)Cette PR #21379 (
|
|
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
left a comment
There was a problem hiding this comment.
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.
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)
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
p5_tts.py: défaut du flag"0"; bloc F6 et docstring_synthesize_segmentdocumentent la mesure Qualite TTS : le modele Qwen3-TTS-12Hz-1.7B degrade le WER narrateur (0,52 vs baseline 0,097) #19454 ; le commentaire phase 1 ([Audiobook #1028] Substituer Qwen3-TTS-1.7B par CosyVoice3 (audio.cpp) sur le narrateur : fr documenté + zero-shot cloning + Apache-2.0 #19692) qui gelait « Qwen = défaut » est mis à jour._selected_narrator_engine→ValueErrorsi 2 actifs) et le no-silent-swap ([Audiobook #1028] Router le narrateur v4 vers Qwen VoiceDesign et prouver le gain mélodique #15002 acceptance 6) sont inchangés. Avec les 3 flags à"0",_selected_narrator_engine()rendNone= narrateur FishAudio legacy._compose_tts_texts'applique de nouveau au narrateur par défaut (limite réelle du moteur) — test mis à jour en ce sens.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_onforce désormais le flag (ne repose plus sur le défaut) ;test_qwen_off_by_default_fish_narrator: défaut = aucun engine, narrateur FishAudio ;py_compileOK. 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