Skip to content

feat(audio,#17586): CustomVoice HTTP call (chunked, WAV->MP3, gap-inject) sur endpoint publie #21145

Open

Description

@jsboige

Suivi de #20925 (PR CustomVoice routing skeleton) — appel reel sur la route custom-voice du gateway TTS.

Contexte : PR #20925 ships la wiring (flag opt-in, sentinelle de reference_id, exception typee, squelette qui leve tant que endpoint pas publie). Au moment ou ops publie la route /audio/speech shape sur tts-api.myia.io/v1, le squelette est a remplacer par l'appel HTTP reel (chunked POST, WAV->MP3 via pydub, silence injection entre chunks -- parallel a _synthesize_narrator_cosyvoice3).

Verdict SOTA : RECOVERABLE-MACHINE -- le modele 1.7B CustomVoice tourne deja sur le RTX 3090 (24 GB VRAM) de po-2023 qui a produit les rendus du banc mesures dans A0C-qwen3tts-customvoice-neutral-metrics.json (GDrive BibliothequesSonores). Voix de reference : speaker=serena, language=French, instruct=None (rendu valide par l'association).

Acceptance :

Perimetre : paths: MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/p5_tts.py (methode _synthesize_narrator_customvoice).

Liens :

Grain: LIGHT/coord -- lane myia-po-2027:CoursIA-2 -- prev: DEEP/notebook-python #20925-c1668

Activity

  1. added a commit that references this issue on Oct 16, 2026
  2. jsboige commented on Oct 19, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2025:CoursIA -- paths: MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/p5_tts.py, MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/prosody_lab/qwen_tts_client.py, MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/tests/test_p5_narrator_routing.py, MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/tests/test_qwen_tts_client.py -- implementation de l'appel HTTP reel CustomVoice chunked (#21145), validation contre l'endpoint publie tts-api.myia.io/v1 (sonde /health faite : healthy, models kokoro/tada/qwen)

    Grain: DEEP/genai — lane myia-po-2025:CoursIA — prev: DEEP/notebook-python #21430

  3. added a commit that references this issue on Oct 19, 2026
  4. jsboige commented on Oct 19, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] lane myia-po-2025:CoursIA -- PR #21451 (Closes #21145).

    Appel HTTP CustomVoice reel implemente sur l'endpoint publie, valide par DEUX appels reels contre le gateway live :

    • client chunked direct : WAV 433 000 octets / 9,02 s mono 24 kHz, MP3 181 965 octets ;
    • chemin production p5 complet : status=generated, sentinelle qwen3tts-customvoice-narrator-fr-B-v1, 9,18 s, attempts=1, MP3 220 365 octets.

    Modele servi mesure via GET /v1/models : [kokoro, tada, qwen3] -- CustomVoice est servi sous l'id qwen3, override _CUSTOMVOICE_SERVED_MODEL (le defaut client VoiceDesign 404 sinon). Flag NARRATOR_CUSTOMVOICE_ROUTING reste 0 (acceptation 4 : validation d'un chapitre echantillon par user/ai-01 avant activation). No-silent-swap partout : endpoint indefini / gateway None / short-audio -> NarratorCustomVoiceUnavailable. Suite v4 190/190.

  5. added a commit that references this issue on Oct 19, 2026
  6. added a commit that references this issue on Oct 24, 2026
  7. jsboige commented on Oct 25, 2026

    @jsboige
    OwnerAuthor

    [INFO] candidate-delivered — lane myia-po-2024:CoursIA

    Rend la main : la substance de cette issue est deja sur main, livree par une autre PR que celle citee par le marqueur de ce fil. Cloture au coordinateur ou a l'adjoint, pas a cette lane.

    Ce que dit le fil, verifie et corrige

    Le marqueur [DELIVERED] du 2026-10-19 pointe la PR #21451. Mesure : PR 21451 state=CLOSED merged=null (closedAt 2026-10-19T18:31:20Z) — elle n'a pas ete fusionnee.

    Ce qui est reellement sur main (mesure git a origin/main = 2e24acaffd42)

    Critere d'acceptation Preuve sur main
    Appel HTTP CustomVoice reel (pas le squelette #20925) p5_tts.py:229 importe qwen_tts_customvoice_chunked, implemente a prosody_lab/qwen_tts_client.py:236 ; la fonction _synthesize_narrator_customvoice (p5_tts.py:190) l'appelle avec voice, instructions, language, speed, max_chars, gap_ms=120, base_url, model
    Chunking WAV puis MP3, silence entre segments gap_ms=120 passe au client ; WAV decode puis audio.export(format="mp3", bitrate="192k") (p5_tts.py, bloc _synthesize_narrator_customvoice)
    NarratorCustomVoiceUnavailable sur endpoint non defini, 4xx/5xx, chunk en echec, audio court classe a p5_tts.py:167 ; quatre raise dans la fonction : endpoint vide, texte vide, wav_bytes None, duree sous le plancher derive des caracteres ; tests tests/test_p5_customvoice_narrator.py:117,132,159 et tests/test_p5_narrator_routing.py:466,471
    Flag de routage laisse a "0" p5_tts.py:128 — os.getenv("NARRATOR_CUSTOMVOICE_ROUTING", "0") == "1"

    Attribution

    Commit daa5451df8d6452fac1bc009f8181c587b2960a2 — « feat(audio,#17586): narrateur Qwen3-TTS CustomVoice neutre, route opt-in », PR #20841 fusionnee le 2026-10-24T00:31:46Z. Le -S sur _CUSTOMVOICE_SERVED_MODEL ne trouve que ce commit : la valeur de cette issue est entree par #20841, pas par #21451.

    Portee de ce que je n'ai pas mesure

    Je n'ai pas rejoue la suite v4 ni refait d'appel live au gateway ; le [DELIVERED] du 2026-10-19 porte ses propres mesures d'execution (WAV 433 000 o / 9,02 s, MP3 181 965 o, p5 status generated). Ce commentaire etablit que le code est sur main et qu'il couvre les quatre criteres, pas que le gateway repond aujourd'hui.

    Un [INFO] candidate-delivered ne ferme pas l'issue : la decision de cloture revient au coordinateur ou a l'adjoint.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions