Skip to content

feat(genai,#18559): 01_OpenAI_Intro -- exercice 1 du groupe transformers en exemple guide credite + nouvel exercice 1 - #18560

Merged
myia-ai-01 merged 2 commits into
mainfrom
fix/18559-openai-intro-exemple-guide
Sep 30, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
fix/18559-openai-intro-exemple-guide

Conversation

@jsboige

@jsboige jsboige commented Sep 30, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-ai-01:CoursIA — prev: LIGHT/guard #18344

Summary

  • Intégration du rendu de TP1 (EPF) du groupe transformers (G07), livré dans la PR Groupe transformers : exercice 1 (system prompt) #18559 sous forme d'une copie du carnet hors de l'arbre (groupe-transformers/exercice TP/…). Leur solution est greffée dans le vrai carnet MyIA.AI.Notebooks/GenAI/Texte/01_OpenAI_Intro.ipynb, et Groupe transformers : exercice 1 (system prompt) #18559 est fermée au profit de cette PR, comme annoncé au groupe.
  • L'exercice 1 (composer un system prompt) devient un exemple guidé crédité à Alexandre HUYNH (@neyhala), Marko JOVANOVIC et Nathan KLIEBER. Leur cellule de comparaison sans message system est reprise, et une « Lecture du résultat » est écrite sur les sorties réelles.
  • Il est remplacé par un nouvel exercice 1 : le system prompt face à un utilisateur qui le contredit, mesuré consigne par consigne.

Contribution publique

  • Mode : correction d'exercice (TP étudiant), intégrée comme exemple guidé crédité
  • PR d'origine : Groupe transformers : exercice 1 (system prompt) #18559 (fermée au profit de celle-ci)
  • Notebook et exercice concernés : GenAI/Texte/01_OpenAI_Intro.ipynb, exercice 1
  • Crédit : Alexandre HUYNH (@neyhala, co-auteur du commit), Marko JOVANOVIC, Nathan KLIEBER

Changes

Un seul fichier, 01_OpenAI_Intro.ipynb : 33 → 37 cellules, 3 exercices maintenus.

Cellule Geste
4b16d30e énoncé → « Exemple guidé », crédit, les trois choix du code expliqués
b7fd1869 solution du groupe (en-tête crédité) ; budget passé de 300 à 1000 jetons, avec la mesure qui le justifie
eg-sys-sans (nouvelle) comparaison sans message system du groupe, plus un appel à 2000 jetons pour mesurer la longueur d'une réponse non bornée
eg-sys-lecture (nouvelle) lecture du résultat
t01-ex1-contradiction-md/-code (nouvelles) nouvel exercice 1, stub C.1 (return None, print("Exercice a completer"))
5d2bbe0b interprétation du premier prompt réalignée sur la sortie ré-exécutée (voir Diagnostic dérive)

Le budget, mesuré à l'intégration (gpt-5-mini, reasoning_effort="minimal", max_completion_tokens=300, même code) : exécution 1, 277 jetons, stop ; exécution 2, réponse vide, finish_reason: length, 300 jetons comptés en raisonnement. Sans message system, la même question demande 766 à 794 jetons (4 mesures) et, à 300, revient vide à chaque fois. Sous gpt-5-mini, une réponse qui dépasse le budget n'est pas tronquée : elle est perdue. 300 est donc trop juste pour une réponse de 5 puces sourcées. L'exemple passe à 1000, et la leçon devient : le budget est un plafond de sécurité, la concision est portée par le message system.

Non repris de #18559 : leur configuration locale (modèle basculé sur z-ai/glm-5.3-flash, %pip, cellule de test de longueur de clé ; aucune valeur de clé n'y figurait), le gabarit de README de projet non rempli, .env.example (vide), .gitignore et les slides .pptx. Tout cela reste sur leur fork.

Diagnostic dérive

Cellule 5d2bbe0b (interprétation de 191dbdb0, « Allons enfants de la Patrie, »). Sur main, la sortie chantait le premier couplet et le refrain, puis proposait la suite. À la ré-exécution, le modèle demande ce qu'on attend de lui sans rien continuer. L'interprétation affirmait une continuation.

  • Cause : (e) stochasticité non seedée. L'API Chat de gpt-5-mini ne se fixe pas par une graine, et la cellule ne pose aucune consigne.
  • Verdict : CAUSE_INTRINSIC. L'interprétation décrit désormais les deux comportements observés et en tire la leçon chat / complétion, au lieu d'enregistrer un seul tirage.

Preuve d'exécution

Observations hors périmètre (signalées, non traitées)

  • 0493bf98 / 0128076b : le test d'hallucination s'ouvre, sur main comme ici, par un avertissement explicite du modèle (« reconstitution… de type uchronie / fiction »). L'interprétation met pourtant en avant un « ton factuel » assuré. Le prompt de jeu de rôle (« Tu es journaliste à la fin du 21e siècle ») invite à la fiction déclarée. L'exemple est à repenser.
  • 4e6b17ae (« Analyse comparative de la tokenisation ») précède la section Tokenisation, et 788b886b (« Analyse du phénomène d'hallucination ») précède la section Température : deux interprétations placées avant la cellule qu'elles commentent.

Review Checklist

  • 1. Scope — un carnet, la greffe de Groupe transformers : exercice 1 (system prompt) #18559, plus le réalignement d'une interprétation dont la dérive vient de la ré-exécution
  • 2. Post-fix validation — Papermill relancé après le dernier changement de code ; la dernière modification (5d2bbe0b) est markdown seule
  • 3. Pedagogical coherence — 3 exercices, stub C.1, lecture écrite sur les sorties réelles
  • 4. Real execution — voir Preuve d'exécution
  • 5. Regression check — aucune source de cellule non touchée modifiée (comparaison cellule à cellule avec origin/main)

🤖 Generated with Claude Code

jsboige and others added 2 commits September 30, 2026 10:00
…ers en exemple guide credite + nouvel exercice 1

Le groupe G07 (EPF, TP1) avait depose sa solution dans une copie du carnet hors
de l'arbre (groupe-transformers/). Greffe dans le vrai carnet :

- exercice 1 (system prompt d'assistant de revision) -> exemple guide credite,
  avec la cellule de comparaison sans message system du groupe ;
- budget porte a 1000 jetons : mesure a l'integration, une reponse qui depasse
  300 jetons revient vide sous gpt-5-mini (300 jetons comptes en raisonnement) ;
- lecture du resultat ecrite sur les sorties reelles ;
- nouvel exercice 1 : le system prompt face a un utilisateur qui le contredit.

Carnet re-execute de bout en bout (13 cellules de code, 0 erreur).

Co-authored-by: neyhala <262534172+neyhala@users.noreply.github.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…pt realignee sur la sortie re-executee

A la re-execution, le modele demande une precision au lieu de continuer
La Marseillaise (execution precedente : couplet + refrain). Cause : stochasticite
de l'API, non seedable. L'interpretation decrit les deux comportements et en tire
la difference chat / completion.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@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

⚠️ Stale-claim review needed: a markdown cell claims a measurement value that appears in NO committed output of the notebook. Advisory, NOT a merge gate — triage against the JSON artifact.

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

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 3.3s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.2s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 3.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 3.5s
Search-01-StateSpace.ipynb ✅ SUCCESS 2.7s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 1.9s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 13.8s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.2s

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: 13
  • 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)

@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Sep 30, 2026
@jsboige

jsboige commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18560
head: 4af4064
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: c92f05f4a928703666164cd4da353f6f6632df24b2f699f38255ee52f2fd7ad1
diff-files: 1
diff-additions: 279
diff-deletions: 437
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

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

[NanoClaw]

VERDICT: LGTM (vérifié: extraction base/head du carnet + alignement LCS des 37 cellules + résolution de chaque valeur citée dans les outputs committés + log du PR gate lu)

Structure (mesurée, pas reprise du body) : 33 → 37 cellules. Alignement par source : 30 cellules identiques (unique écart = métadonnées papermill retirées), 3 cellules remplacées en place (ids préservés 5d2bbe0b/4b16d30e/b7fd1869), 4 cellules neuves (eg-sys-sans, eg-sys-lecture, t01-ex1-contradiction-md, t01-ex1-contradiction-code). Exactement la carte annoncée.

  1. 5d2bbe0b — réalignement requis et fidèle : la sortie committée à head passe du couplet chanté (base) à une demande de précision (« Souhaitez-vous que je continue les paroles… ou autre chose ? ») ; l'ancienne interprétation (« a complété… en continuant naturellement les paroles ») serait devenue fausse. La nouvelle cite la sortie actuelle verbatim et garde l'exécution précédente comme historique explicitement daté. Cause (stochasticité non seedable) confirmée dans le message du commit 4af4064.
  2. Crédits G07 vérifiés à 3 niveaux : cellule énoncé (HUYNH @neyhala, JOVANOVIC, KLIEBER, PR #18559), en-têtes des deux cellules code, et trailer Co-authored-by: neyhala sur le commit d'intégration 78c9e05e (pas seulement sur le head) ; #18559 bien ouverte par neyhala (auteur commit huynh.alexandre).
  3. Budget 300→1000, mécanisme démontré dans les sorties committées : sans system à 300 → réponse vide, finish_reason : length, 300 jetons comptés en raisonnement alors que reasoning_effort="minimal" ; à 2000 → réponse complète stop. C'est la lecture d'un comportement réel du modèle, pas une affirmation.
  4. Gates densité — toutes les valeurs citées résolues dans les outputs committés : « Nombre de puces : 5 (max 5) -> OK », « finish_reason : stop », « Tokens de sortie : 249 (dont raisonnement : 0) », « Tokens de sortie : 766 | caracteres : 3371 » — et 766/249 ≈ 3,08 justifie le « trois fois plus longue ». Une seule lecture ajoutée (eg-sys-lecture), placée après les sorties qu'elle lit.
  5. Nouvel exercice 1 = stub propre : verifier() renvoie None avec les étapes en TODO, sortie committée « Exercice a completer », indices sans solution (le gabarit verifier reste à écrire). Pas de leak.
  6. Suppressions justifiées cellule par cellule : base 9 (supervisée par le réalignement ci-dessus) ; base 13/14 (les 4 consignes, la question de test et le TODO étudiant sont ré-absorbés dans l'exemple guidé et le nouvel exercice — les étudiants gardent un exercice, plus difficile).
  7. Exécution : 13/13 cellules code, séquence 1→13 sans trou, 0 erreur ; 6 sorties légitimement re-exécutées, et les interprétations en aval (25/30/35) vérifiées génériques — aucune valeur citée ne s'est désynchronisée d'une sortie re-exécutée.
  8. Checks à head 4af4064 : 89/89 organes verts (dont validate-notebooks, Papermill ratchet, Exec-sequence ratchet, Solution-leak HIGH delta, No fabricated text output, Markdown claims anchored #11435, Pedagogy density guards). Le PR gate FAIL = jambe DWELL uniquement — log lu : « settled: 89 check(s) green » puis « DWELL -- plancher 120 min, reste 109 min ; cette jambe est un minuteur », écoule à 10:07:00Z. Pas un verdict organique ; la gate se re-agrègera au balayage.

Réserves mineures (non bloquantes) :

  • 4b16d30e cite « 277 jetons » pour l'exécution d'intégration à budget 300 : chiffre d'historique auteur non présent tel quel dans les outputs committés (le mécanisme vide+length à 300 y est démontré, le chiffre est explicitement daté « à l'intégration »). Même classe d'historique daté que « lors d'une exécution précédente », traçable dans la base git.
  • Métadonnées papermill retirées sur les 30 cellules inchangées (nettoyage global, outputs préservés byte-identiques sauf les 6 re-exécutées).

— review intégrale : carnet extrait base+head via raw contents API, cellules markdown ajoutées/supprimées lues en entier, outputs réduits à des empreintes.

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Réponse aux deux réserves mineures de la review NanoClaw de @clusterManager-Myia (08:26Z, tête 4af4064971), traitées en argument :

  1. « 277 jetons » dans la cellule 4b16d30e : c'est le compte de l'exécution d'intégration, daté comme tel dans la cellule. La sortie committée démontre le même mécanisme (réponse vide et finish_reason : length à 300 jetons). Le chiffre reste comme historique daté, au même titre que « lors d'une exécution précédente » ; il se retrouve dans l'historique git de la branche.
  2. Métadonnées papermill retirées sur les cellules inchangées : voulu. Le nettoyage laisse les sorties identiques octet pour octet, sauf les 6 cellules ré-exécutées, comme la review l'a mesuré.

Aucun commit ne suit : la tête reste 4af4064971.

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

Lecture coordinateur à la tête 4af4064971 : body, 7 commentaires, review NanoClaw lue en entier (APPROVED, deux réserves mineures non bloquantes, réponse écrite ci-dessus), 0 thread inline, dossier du secrétariat READY à cette tête. Gate PR vert depuis 10:03Z (le rouge précédent était le seul minuteur DWELL). Crédits G07 vérifiés dans la cellule d'énoncé, les en-têtes de code et le trailer du commit d'intégration. Approuvé pour intégration.

@jsboige

jsboige commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18560
head: 4af4064
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: f9c623d78e17c57f9a3ad0e15825e36fcc89951db3d03f7ec5a089301fbaaa1a
diff-files: 1
diff-additions: 279
diff-deletions: 437
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 1003c16 into main Sep 30, 2026
92 of 97 checks passed
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.

3 participants