Skip to content

feat(genai,#18574): muscle les trois exemples guides de 03_Structured_Outputs - #19627

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/18574-muscle-texte03
Oct 7, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/18574-muscle-texte03

Conversation

@jsboige

@jsboige jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2024:CoursIA — prev: MED/notebook-python #19625

Objet

See #18574 — première des quatre PR issues du verdict de seconde passe (commentaire publié sur l'issue), qui a classé À MUSCLER les exemples guidés de 03_Structured_Outputs.ipynb : les trois exemples crédités (film, extracteur d'événements, analyseur de produits, PR #18488, @Daphneej91) affichent leur résultat sans jamais le vérifier.

La musculation suit la méthode de l'issue : garder le code de l'élève et son crédit, ajouter ce qui manquait, réécrire la lecture sur la sortie réelle. Aucune ligne de code étudiante n'est retirée ni modifiée.

Ce qui est ajouté

Trois cellules de vérification (une par exemple, placées après son code) et trois cellules « Interprétation » adossées à la sortie réelle.

Exemple Manque constaté Ajout Sortie réelle
film (json_schema manuel, strict) la sortie est ré-affichée ; rien ne vérifie l'énumération genre ni les six required contrôle de conformité au schéma, appliqué à la réponse et à un objet fabriqué CONFORME au schema + 3 ecart(s) detecte(s) (champ requis absent, type, énumération) — le contrôle discrimine
événements (extracteur, model_validator) seul le chemin nominal est montré ; aucun des deux validateurs n'est vu en train de rejeter quatre cas soumis au même modèle, avec un témoin valide ACCEPTE sur le témoin, REJETE sur les trois autres (loc [] / ['titre'] / ['priorite'])
produits (analyseur, contraintes imbriquées) aucune valeur n'est confrontée au texte source fidélité champ par champ + provenance des libellés prix, note_moyenne, avis : OK ; libellés absents mot pour mot du texte : ['Marque', 'Processeur', 'Stockage']

Deux points de fond que la vérification met au jour, et qu'aucune lecture à l'œil ne donnait :

  • le loc vide du rejet de date est la signature d'un @model_validator(mode="after") — une erreur de modèle, pas de champ. Les deux autres rejets portent un loc de champ. C'est cette distinction qui permet de router une erreur vers la bonne cible ;
  • sur le produit, le modèle infère la marque (Marque: Apple à partir de « portable Apple ») et renomme puce en Processeur. Un schéma strict garantit la forme, ni la fidélité à la source ni la provenance d'un libellé — le durcir n'y changerait rien.

Ré-exécution (C.2 / H.3)

Trois cellules de code ajoutées ⇒ ré-exécution due, faite de bout en bout :

papermill 03_Structured_Outputs.ipynb … -k python3 -y 'BATCH_MODE: "true"'
19/19 cellules code exécutées · 0 sortie d'erreur · durée 96,2 s · exception: None

Sorties committées, metadata.papermill en input_path/output_path basename (convention du carnet, identique à la passe précédente).

Aucune source de code préexistante n'est modifiée — invariant vérifié contre origin/main : les 16 sources de base se retrouvent byte-identiques et dans l'ordre, plus exactement 3 nouvelles. Les trois cellules « Interprétation » sont du markdown (exception C.2) ; les id de cellule manquants (nbformat 4.5) ont été complétés.

Validation — organes passés

Organe Verdict
check_null_exec (H.3 pre-commit) OK — aucune cellule null + outputs: []
check_cell_source_parses 0 finding
check_exec_sequence CLEAN (1..N)
check_credited_examples 3 → 3, 0 perdu
check_output_failure_text (bloquant) 0 regressed
check_output_collapse (advisory) 0 flagged
check_output_flood · check_source_collapse 0 regressed · 0 flagged
check_prose_quantitative_claims --diff (bloquant) OK — aucun compteur quantitatif en prose
check_split_reading_cells · check_interp_positioning clean · 0 finding
check_c2_compliance · check_notebook_outputs_required 1/1 conforme · 0 défectueux
check_notebook_navlinks 0 lien cassé
restore_accents_canonical --check 0 accent à curer
check_exec_ratchet CLEAN->CLEAN, 0 régression

Hors périmètre, signalé

check_duplicate_sections signale « analyse du resultat » x2 (cellules 11 et 19). Pré-existant, pas introduit : la version de origin/main porte exactement le même doublon (cellules 11 et 17 avant insertion). Retitrer l'une des deux sections est un autre sujet — non touché ici.

Suivi

Les trois carnets À MUSCLER restants reçoivent chacun sa PR, dans l'ordre annoncé au verdict : Video/01-1 (consigne qui contredit sa solution), Image/01-1 (comptage nul), Texte/06 (le PDF jamais exercé).

🤖 Generated with Claude Code

…_Outputs

Les trois exemples guidés crédités (film, extracteur d'événements, analyseur de
produits) affichaient leur résultat sans jamais le vérifier. Chacun reçoit une
cellule de vérification placée APRÈS son code, et une cellule « Interprétation »
qui lit la sortie réelle. Le code et le crédit de l'étudiante sont conservés à
l'identique.

- film : conformité au schéma vérifiée sur la réponse réelle (CONFORME) **et** sur
  un objet fabriqué (3 écarts : champ requis absent, type, énumération) — le
  contrôle discrimine au lieu d'approuver.
- événements : les trois garde-fous sont vus en train de REJETER (date incohérente,
  titre vide, priorité hors énumération), avec un témoin valide qui passe. Le `loc`
  vide du rejet de date est la signature du @model_validator, pas un défaut.
- produits : fidélité confrontée au texte source (prix, note, avis), et provenance
  des libellés mise au jour — `Marque` et `Stockage` sont INFÉRÉS, `puce` est
  renommé en `Processeur`.

Ré-exécution : papermill, 19/19 cellules, 0 erreur, 96 s, sorties committées.
Aucune source de code préexistante modifiée (invariant vérifié contre origin/main).

See #18574

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

github-actions Bot commented Oct 7, 2026

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

github-actions Bot commented Oct 7, 2026

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

github-actions Bot commented Oct 7, 2026

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

github-actions Bot commented Oct 7, 2026

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 added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 7, 2026
@github-actions

github-actions Bot commented Oct 7, 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 6.8s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 9.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 8.3s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 8.5s
Search-01-StateSpace.ipynb ✅ SUCCESS 8.0s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 8.9s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 49.4s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 6.3s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 34.9s

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

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 19
  • 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)

@jsboige

jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19627
head: 11db53b
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 2098ddb4a1052f0dda0c0614c75884e13ff73497b0bf58cf8b492818cbd5adec
diff-files: 1
diff-additions: 547
diff-deletions: 274
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19627
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 081fdb2 into main Oct 7, 2026
94 of 95 checks passed
@jsboige
jsboige deleted the fix/18574-muscle-texte03 branch October 7, 2026 07:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants