Skip to content

Fix(audio): le bootstrap d'import de v4 diverge dans la serie 04 -- echec mesure quand le cwd n'est pas 04-Applications #23179

Open

Description

@jsboige

Constat (mesure, pas lecture)

Le bootstrap d'import de v4/narration.py est recopie dans deux carnets de la serie, et il ne resout que si le repertoire courant est 04-Applications (ou un descendant qui contient v4/).

Reproducteur, depuis MyIA.AI.Notebooks/GenAI/Audio/ :

import sys
from pathlib import Path
_here = Path.cwd()
for _parent in [_here, *_here.parents]:
    if (_parent / "v4" / "narration.py").exists():
        sys.path.insert(0, str(_parent)); break
from v4.narration import parse_narration_script

Rend ModuleNotFoundError: No module named 'v4'. Depuis 04-Applications/, le meme code passe.

Cellules concernees, mesurees sur la tete f506b2192 :

Carnet Cellule Bootstrap
04-1-Educational-Audio-Content.ipynb 14 remontee depuis Path.cwd()
04-6-Audiobook-Pipeline.ipynb 12 remontee depuis Path.cwd(), identique

04-13 resout autrement (GENAI_ROOT / 'Audio' / '04-Applications' / 'v4'), d'ou la divergence relevee par Hermes le 2026-10-27T12:21Z sur #22905.

Pourquoi ce n'est pas corrige dans #22905

La correction doit tomber sur les deux cellules en un seul commit : corriger une seule reintroduit exactement la divergence que #22905 existe pour supprimer. Or chacune exige une re-execution complete du carnet (04-1 : 6 appels TTS + 5 appels LLM ; 04-6 : 4 TTS + 3 LLM), donc deux passes payantes dont le diff de sorties noierait la reponse a la revue. Le defaut est par ailleurs legible : il echoue sur un ModuleNotFoundError explicite, pas sur une sortie fausse.

Forme de la correction attendue

Un seul helper, appele par les deux cellules (et par 04-13, pour supprimer la troisieme variante), avec des candidats ordonnes :

  1. remontee depuis Path.cwd() -- cas papermill --cwd 04-Applications et noyau Jupyter lance dans le dossier du carnet ;
  2. ancre GenAI : remonter jusqu'a un ancetre nomme GenAI, puis Audio/04-Applications -- couvre un cwd en Audio/ ou GenAI/ ;
  3. descente : <cwd>/GenAI/Audio/04-Applications -- couvre un cwd a la racine du depot.

Si aucun candidat n'aboutit, echouer en nommant le chemin attendu plutot que de laisser un ModuleNotFoundError nu.

Acceptance

  • une re-execution de chaque carnet depuis MyIA.AI.Notebooks/GenAI/Audio/ reussit (le reproducteur ci-dessus passe) ;
  • les deux cellules appellent le meme helper, aucune copie du bootstrap ne subsiste ;
  • sorties commitees, 0 erreur, execution_count non nul (C.2/H.3).

Part of #22905

Activity

  1. jsboige commented on Oct 29, 2026

    @jsboige
    OwnerAuthor

    Grain: MED/notebook-python — lane myia-po-2028:CoursIA — prev: MED/guard #23197

    [INFO] Prémisse fausse sur main — le grain est bloqué, pas libre.

    L'issue suppose que v4/narration.py existe et que les carnets doivent l'importer. Mesuré le
    2026-10-29 contre origin/main (2f1291f01) :

    • git ls-tree -r --name-only origin/main -- MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/
      → le module narration.py n'y est pas (ni narration.py ni aucun équivalent) ;
    • git grep -n "def parse_narration_script" origin/main → la fonction est définie en ligne
      dans 04-1-Educational-Audio-Content.ipynb:911 et 04-6-Audiobook-Pipeline.ipynb:738, donc
      deux fois, sans import commun ;
    • git grep -c "from v4" origin/main → seulement 04-12 (2) et 04-13 (6) ; aucun dans
      04-1, ni 04-6, ni 04-13 pour cette fonction.

    Le module n'existe que dans la PR #22905 (ouverte, MERGEABLE, tête c87955a7e), qui attend
    une levée ai-01. Prendre ce grain maintenant produirait une seconde implémentation concurrente de
    la même fonction, sur les mêmes deux carnets, et une collision directe avec #22905.

    Déclencheur de reprise : le merge de #22905. À ce moment-là seulement, les deux définitions
    en ligne deviennent supprimables au profit de l'import — et ce sera un grain de suivi réel.

    Je rends la main : rien n'est édité par cette lane sur ce sujet.

  2. jsboige commented on Oct 29, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] lane myia-po-2028:CoursIA -- PR #23411 -- paths: MyIA.AI.Notebooks/GenAI/shared/helpers/audio_v4.py, MyIA.AI.Notebooks/GenAI/shared/helpers/test_audio_v4.py, MyIA.AI.Notebooks/GenAI/shared/helpers/README.md, MyIA.AI.Notebooks/GenAI/Audio/04-Applications/04-1-Educational-Audio-Content.ipynb, MyIA.AI.Notebooks/GenAI/Audio/04-Applications/04-6-Audiobook-Pipeline.ipynb

    Livraison partielle, en PR empilee sur feature/22901-narration-organ (PR #22905) : les deux cellules visees n'existent que sur cette branche, main ne chargeant pas v4 du tout. La PR se retargettera sur main quand #22905 sera mergee.

    Couvert par #23411 :

    • point unique de resolution du paquet v4 : shared/helpers/audio_v4.py, trois candidats ordonnes, erreur qui nomme les chemins essayes ;
    • 6 tests, dont le cas mesure (depart dans GenAI/Audio) et la descente depuis la racine du depot ;
    • 04-1 cellule 14 et 04-6 cellule 12 branchees sur le helper, plus aucune copie du bootstrap ;
    • cellule neutre en sortie : meme sys.path, meme parse, meme audio, sorties byte-identiques a la base.

    Non couvert, avec motif mesure :

    • re-execution complete des deux carnets : l'endpoint LLM de la serie (http://192.168.0.47:5002/v1) ne repond pas depuis cette machine (curl -m 20 sur /v1/models : http=000, 20,0 s), et la premiere cellule qui l'appelle leve APITimeoutError. Une execution forcee remplacerait des sorties reelles par des cellules vides, ce que C.2 interdit de commiter. Sorties de la base restaurees et conservees ; re-execution inscrite au registre des verifications en attente de la lane.
    • 04-13-Audiobook-FishAudio-S2Pro.ipynb : troisieme variante du bootstrap, fonctionnelle mais divergente. La brancher demande une re-execution complete du pipeline FishAudio, meme blocage d'endpoint. Reste dans le perimetre de cette issue, pas traitee ici.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions