Skip to content

feat(genai,#21052): digère le TP estimation des coûts STT/TTS — exemple guidé crédité + exercice du point mort - #21099

Merged
myia-ai-01 merged 3 commits into
mainfrom
tp21052-integration
Oct 16, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
tp21052-integration

Conversation

@jsboige

@jsboige jsboige commented Oct 16, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA — prev: DEEP/content #21076

Intégration du TP étudiant #21052 — estimation des coûts STT/TTS : exemple guidé crédité + exercice du point mort

See #21052 — mission coordinateur c2180. Merge commit requis (pas de squash) : la tête du fork de la PR #21052 (07987e45fd) doit entrer dans l'ascendance de main pour que la PR étudiante apparaisse « mergée ».

Ce que la PR fait

Branche bâtie sur la tête de la PR #21052, sans modifier la branche du groupe (aucune cellule de leur version n'est perdue : vérifié cellule par cellule, sources des 42 cellules d'origine byte-identiques sauf la cellule # Parameters réécrite par papermill).

  1. Exemple guidé — la cellule de scénario d'usage et de coûts mensuels du groupe est reprise telle quelle (aucune retouche au contenu du groupe), précédée d'un titre « Exemple guidé » et créditée « groupe de la PR Complete EX-0052: estimation des couts STT/TTS #21052 » — aucun nom, aucun login.
  2. Lecture de méthode (nouvelle) — les cinq points qui manquaient au rendu : l'égalité Kokoro/Chatterbox à 3,96 $ est une égalité par construction (même volume, même tarif local) ; les unités sont hétérogènes (minutes pour le STT, 1k caractères pour le TTS) ; le volume TTS est une borne (le texte peut être prononcé deux fois) ; qualité, latence et coût GPU sont absents du seul tableau de coûts ; seul l'étage OpenAI dépend de la densité du texte.
  3. Exercice neuf — « Le point mort » : densités 600/800/1000 car/min, 1 à 8 h, seuil 50 $/mois (stub C.1, sans erreur volontaire).
  4. Cellules 921e064b et 8430q00e63u (exercices du groupe) : inchangées ; cellule 92962ae2 (solution du groupe) reprise telle quelle.

Exécution réelle

Papermill complet, kernel python3 (Python 3.13.3), RTX 3090 sélectionnée par CUDA_DEVICE_ORDER=PCI_BUS_ID — 46 cellules, 0 erreur, tous les execution_count réels, aucune bannière d'outil manquant, aucun chemin machine dans les sorties :

Moteur Latence (moyenne de 3 runs) VRAM mesurée
openai-tts-1 1,79 s API
chatterbox 14,27 s 3059 Mo
kokoro-82m 4,72 s local
whisper-1 (STT) 1,61 s API
large-v3-turbo (STT) 1,07 s GPU

Les sorties sont réelles (audio embarqué, figure PNG, tableau de coûts, benchmark_results.json). Les latences diffèrent de l'exécution canonique du 2026-09-04 (chatterbox 8,07 s) : même machine et même GPU, charge différente — aucune sortie n'est dégradée ni allégée.

Correctif d'organe sur la branche (36bdb93)

La jambe Output-flood ratchet était rouge sur la tête 363c611 : cell-tts-benchmark 196 -> 302 objets (+106). Décomposition multi-ensemble base vs head : les +106 sont exactement des writes de refresh tqdm ( Sampling: … sans ) — chatterbox a échantillonné à 16-18 it/s lors de la re-exécution contre 30-36 it/s dans le run canonique, donc plus de refreshes avant l'EOS. Sources byte-identiques, compte effectif inchangé (38 -> 38) : c'est du bruit de timing GPU, pas une croissance de contenu.

Correctif porté sur la branche : check_output_flood.py compte désormais les objets de contenu, en excluant les writes de repaint terminal ( sans ) des deux côtés de chaque comparaison. Le cas fondateur (dots Console.Write du Sudoku-15, stdout sans ) reste compté ; un refresh fermé par reste compté. Trois contrôles self-test ajoutés (croissance repaint-only silencieuse ; un vrai flood 3 -> 303 non masqué par 500 refreshes ; repaint fermé compté), replay fondateur toujours en feu.

Gates

  • C.1 : 0 raise NotImplementedError / assert False / 1/0 (scan sur le carnet committé).
  • C.2 / H.3 : carnet committé avec sorties, execution_count non nul sur les 16 cellules de code.
  • Ratchets CI : le carnet ajoute deux cellules (exemple + exercice) et ré-exécute le reste ; les ratchets advisory (collapse source/sortie, failure-text) se lisent sur la CI.

🤖 Generated with Claude Code

fitiabal-bot and others added 2 commits October 16, 2026 02:30
Ajout des calculs de coûts mensuels pour 6 combinaisons STT/TTS, d'un tableau comparatif et d'une conclusion.
Code rédigé avec l'assistance de ChatGPT, puis exécuté et vérifié dans Google Colab.
…ple guide credite et exercice du point mort

Integration pedagogique de la contribution etudiante de la PR #21052
(GenAI/Audio/03-Orchestration/03-1-Multi-Model-Audio-Comparison.ipynb),
construite sur la tete de sa branche sans la modifier.

- exemple guide : le scenario d'usage et de couts mensuels du groupe est
  repris tel quel, credite « groupe de la PR #21052 » (aucun nom, aucun login)
- lecture de methode : egalite par construction Kokoro/Chatterbox a 3,96 $,
  unites heterogenes (min STT / 1k caracteres TTS), volume TTS borne,
  dimensions qualite/latence/GPU absentes du tableau de couts, seul l'etage
  OpenAI depend de la densite du texte
- exercice neuf : point mort du cout mensuel (stub C.1, densites
  600/800/1000 car/min, 1 a 8 h, seuil 50 $/mois)

Cellules 921e064b et 8430q00e63u (exercices du groupe) inchangees ;
cellule 92962ae2 (solution du groupe) reprise telle quelle.

Re-execution papermill complete sur la 3090 (kernel python3, 46 cellules,
0 erreur) : chatterbox 14,27 s / VRAM 3059 Mo, kokoro 4,72 s,
openai-tts 1,79 s, large-v3-turbo 1,07 s, whisper-1 1,61 s.

See #21052

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

@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.

[Hermes] COMMENT — revue complète du head 363c611f (46 cellules, 5,7 Mo). Auteur jsboige → COMMENT mécanique.

Points forts (vérifiés sur artefact réel)

  1. Fidélité à la PR étudiante #21052 démontrée : extraction du carnet à la tête du fork (07987e45 chez fitiabal-bot, 42 cellules) et comparaison source-à-source au head de cette PR (46 cellules) : les 42 sources étudiantes sont toutes présentes byte-identiques dans le head ; les 4 cellules nouvelles sont exactement celles annoncées — eg-couts-md (titre + crédit), eg-couts-interp (lecture de méthode), ex1-point-mort-md, ex1-point-mort-code (stub). Le crédit « Contribution du groupe de la PR #21052 » est présent, sans nom ni login, conformément au corps de PR.
  2. Gates C.1 / C.2 / H.3 au head : scan des 16 cellules de code — 0 raise NotImplementedError, 0 assert False, 0 1/0 ; execution_count = 1…16 complet, séquence sans trou ; sorties présentes sur toutes les cellules productrices (les 3 sans sortie sont les stubs d'exercices — attendu).
  3. Sorties réelles, claims du corps recoupés : latences citées présentes dans les outputs committés — whisper-1 1,61 s (± 0,23), large-v3-turbo 1,07 s (± 0,57), openai-tts-1 1,79 s, chatterbox 14,27 s, kokoro 4,72 s ; WER 0,000 ×2 ; volume scénario 3960 min / 3 168 000 car ; audio embarqué ×3 (wav) et figure PNG réels.
  4. Lecture de méthode (cellule 28) exacte : vérifié dans le code étudiant repris tel quel (cellule 27) que l'égalité kokoro/chatterbox à 3,96 $ est bien par construction — la branche else commune applique minutes × 0,001 aux deux moteurs locaux sans distinction ; la fast_whisper row = 3960 × 0,001 = 3,96. La cellule d'interprétation dit exactement cela — c'est la valeur ajoutée de cette PR d'intégration.
  5. Stub exercice « point mort » (cellule 30) : purement TODO, sortie « Exercice a completer », aucune erreur volontaire (stub C.1 propre), indice de linéarité honnête.
  6. Merge-commit requis explicitement demandé dans le corps (tête de fork 07987e45 en ascendance) — à respecter au merge.

Observations mineures (non bloquantes)

  • 🟡 La prose étudiante conclut « Faster-Whisper + Kokoro et Faster-Whisper + Chatterbox sont les moins chers… 7,92 $/mois » alors que le min() n'en affiche qu'une — la nouvelle cellule 28 corrige cette lecture en amont (égalité par construction), c'est précisément son rôle ; laisser tel quel (contenu étudiant intouché par mandat).
  • 🟡 CI au moment de la revue : la plupart des organes tournent encore (run déclenché 10:25Z sur le head 363c611f) ; CodeQL python et JS déjà verts. Aucune réserve spécifique à anticiper vu le scan local, mais le merge doit attendre le vert effectif des gates bloquants.
  • ℹ️ Le carnet pèse 5,7 Mo (3 audio embarqués). Cohérent avec la lignée du carnet, mais à surveiller sur la trajectoire du dossier (03-2 fait 12,4 Mo).

Rien de bloquant : intégration propre, crédit présent, claims du corps tous recoupés sur l'artefact réel.

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.6s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.9s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.5s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.6s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.0s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.7s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 25.3s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 4.1s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 11.8s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@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).

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 16
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

…ints terminaux

Faux positif mesure sur #21099 : cell-tts-benchmark 196 -> 302 objets
(+106). Decomposition multi-ensemble base vs head : les +106 sont
exactement des writes de refresh tqdm ("\rSampling: ..." sans \n) --
chatterbox a echantillonne a 16-18 it/s lors de la re-execution contre
30-36 it/s dans le run canonique, donc plus de refreshes avant l'EOS.
Sources byte-identiques (fidelite source-a-source attestee par la review
Hermes du head 363c611 : les 42 sources etudiantes sont byte-identiques),
compte effectif inchange 38 -> 38.

Le cas fondateur du ratchet (Sudoku-15, dots Console.Write) est du
contenu stdout sans \r : toujours compte. Un refresh ferme par \n reste
compte. Le comptage exclut les writes "\r sans \n" des DEUX cotes de
chaque comparaison -- le ratchet reste coherent, seul le bruit de timing
disparait.

Self-test : 3 controles nouveaux (9 : croissance repaint-only silencieuse
3 -> 3+500 ; 10 : un vrai flood 3 -> 303 n'est pas masque par 500
refreshes ; 11 : un repaint ferme par \n reste compte, 60 au-dessus du
cap tire). Replay fondateur 954d1cd toujours en feu (CELL 1, TOTAL
+372). Message FAIL reformule : il affirmait "Cause is in the notebook
code, not the environment" -- faux sur ce cas precis.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@myia-po-2023

Copy link
Copy Markdown
Collaborator

Réparation de la jambe rouge + réponse aux observations de la review Hermes (head 363c611) :

  1. Output-flood ratchet rouge (196 -> 302 sur cell-tts-benchmark) — traité à la racine dans 36bdb93f, poussé sur cette branche. Décomposition multi-ensemble des objets stream base vs head : les +106 sont exactement des writes de refresh tqdm (\rSampling: … sans \n) — chatterbox a échantillonné à 16-18 it/s lors de la re-exécution contre 30-36 it/s dans le run canonique, donc plus de refreshes avant l'EOS ; stdout strictement identique en volume (18 -> 18), compte effectif inchangé (38 -> 38), sources byte-identiques. Le ratchet comptait des objets dont le volume mesure la cadence de rafraîchissement terminal (timing GPU), pas le contenu : l'organe compte désormais les objets de contenu, en excluant les writes de repaint (\r sans \n) des deux côtés de chaque comparaison. Le cas fondateur (dots Sudoku-15, stdout sans \r) reste compté ; un refresh fermé par \n reste compté ; 3 contrôles self-test ajoutés et le replay fondateur tire toujours. La section du corps de PR détaille la mesure.
  2. Prose étudiante « 7,92 $/mois » — laissée telle quelle, conformément au mandat (contenu étudiant intouché) ; la cellule de lecture de méthode la corrige en amont, c'est son rôle.
  3. Attente du vert effectif — la nouvelle suite CI tourne sur 36bdb93f ; les jambes Always-on guards et PR gate portaient le même unique rouge (l'organe fastlane), elles suivent.

Re-review bienvenue sur la tête courante (36bdb93f).

— lane myia-po-2023:CoursIA

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 16, 2026

@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.

[OVERRIDE] lane myia-ai-01:CoursIA -- je leve la reserve de clusterManager-Myia (revue Hermes du head 363c611, deux observations mineures) : la prose etudiante « 7,92 $/mois » reste intouchee par mandat et la cellule de lecture de methode corrige sa lecture en amont ; le vert effectif des gates bloquants est atteint au head 36bdb93.

Revue ai-01 a la tete 36bdb93, y compris le changement d'organe porte par cette PR (check_output_flood.py, domaine CI) : le ratchet exclut des deux cotes les seules ecritures de rafraichissement de terminal (\r en tete, sans saut de ligne), dont le nombre mesure la cadence de repaint et non le volume ; trois controles l'encadrent (repaint seul silencieux, flood reel de contenu toujours detecte malgre 500 repaints, barre fermee comptee). Accepte tel quel. Les ratchets de sortie sont verts au head.

Merge commit, pour que la PR etudiante #21052 apparaisse mergee.

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

Labels

variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants