Skip to content

Fix(genai,#24704): le 00-3-API-Endpoints migre ses deux litteraux test_model vers gpt-5.6-luna - #24755

Merged
myia-ai-01 merged 2 commits into
mainfrom
fix/24704-genai-model-litterals
Nov 5, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
fix/24704-genai-model-litterals

Conversation

@jsboige

@jsboige jsboige commented Nov 4, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2023:CoursIA-2 — prev: LIGHT/ledger #24592

Le grain

Reprise des points 1-2 de #23387, bloqués sur le siège myia-po-2027 par une
panne mesurée de la famille d'édition du MCP jupyter-papermill (#24704).

Sur ce siège (myia-po-2023:CoursIA-2), le MCP répond : read_cells et
update_cell fonctionnent (source éditée par update_cell, relue par
read_cells). L'arbitrage des valeurs cibles, rendu par myia-po-2027:CoursIA
dans son commentaire [DELIVERED] du 2026-11-04 sur #23387, est donc
applicable.

Périmètre livré — le carnet 00-3

Site Avant Après
00-3-API-Endpoints-Configuration.ipynb cellule 7, test_model (OpenRouter) openai/gpt-4o-mini openai/gpt-5.6-luna
idem, test_model (OpenAI Direct) gpt-4o-mini gpt-5.6-luna

Cible : docs/genai/model-mapping-openai.md ligne 44 — chat — mini :
gpt-4o-mini → gpt-5.6-luna.

Conservé — per l'arbitrage, classe DOCUMENTATION

  • cellule 7, filtre de découverte ['dall-e','gpt-5','gpt-4','flux','qwen'] ;
  • cellule 8 (markdown), table de coûts : gpt-4o, gpt-4o-mini ;
  • cellule 11, key_models = [... 'gpt-4o', 'gpt-4o-mini', 'gpt-image-1'] —
    filtre de sélection de catalogue, pas un identifiant passé à un appel.

Vérifié par lecture après re-exécution : ces trois mentions sont intactes.

Mesure avant / après — check_obsolete_chat_model.py (#22783)

AVANT : 0 finding(s) ; 3 mention(s) doc sans marqueur   (cellules 7, 11, 20)
APRES : 0 finding(s) ; 2 mention(s) doc sans marqueur   (cellules 11, 20)

0 finding(s) avant comme après : aucun appel de chat n'est concerné — les
quatre sites sont des littéraux de configuration, ce que l'organe classe
DOC-MENTION (advisory, sans effet sur l'exit). L'advisory de la cellule 7 a
disparu ; ceux des cellules 11 et 20 sont les mentions de documentation
conservées ci-dessus.

Preuve d'exécution (C.2)

La cellule modifiée a été ré-exécutée par un kernel réel (nbconvert --execute) dans le même environnement que l'exécution d'origine (les deux
clés OPENAI_API_KEY et OPENROUTER_API_KEY présentes) :

  • execution_count = 4, identique à celui committé — la séquence
    d'exécution du carnet est préservée (3 cellules d'amorce dans le carnet
    temporaire reproduisent le compteur du kernel) ;
  • la sortie produite est identique à la sortie committée sauf les deux
    lignes 🎯 Modèle test: …
    — compare programmatique, pas à l'œil ;
  • horodatage réel du run : 2026-11-04T23:52:16.26…Z.

Source : édition par mcp__jupyter-papermill__update_cell. Sorties : production
réelle d'un kernel, transplantée depuis le carnet d'exécution — pas une sortie
écrite à la main.

Rouge CI reproduit et réparé dans le cycle même

Le diagnostic

Le check Papermill ratchet (base vs PR) classait la PR STALE_BLOCK :
les sorties et execution_count avaient changé (cellule 7 ré-exécutée) alors
que le bloc metadata.papermill restait byte-identique à origin/main.

Cause réelle : la cellule 7 a été ré-exécutée par un kernel nbconvert le
2026-11-04T23:52Z, donc hors papermill. Le bloc metadata.papermill
top-level datait du 2026-10-29 et ne décrivait plus les sorties committées ; le
bloc per-cell de la cellule 7 attribuait à papermill une exécution faite par
nbconvert — une provenance fausse, pas une simple incohérence d'horodatage.

Le remède

  • bloc top-level metadata.papermill supprimé → l'organe classe
    BLOCK_REMOVED, chemin explicitement autorisé par son propre contrat
    (« block removed at head — explicitly allowed by the issue ») ;
  • metadata.execution de la cellule 7 remplacé par les horodatages réels du
    run
    (2026-11-04T23:52:16.262754Z …), pas par des valeurs inventées ;
  • les 9 autres cellules conservent leurs blocs per-cell : leur exécution
    n'a pas changé, leur provenance reste vraie.

Mesure locale (avant push)

$ python scripts/notebook_tools/check_papermill_ratchet.py origin/main
papermill ratchet -- base origin/main
changed notebooks : 1
regressions       : 0
  BLOCK_REMOVED      MyIA.AI.Notebooks/GenAI/00-GenAI-Environment/00-3-API-Endpoints-Configuration.ipynb
rc=0

Également verts sur cette tête : check_output_collapse.py (0 flagged),
check_output_failure_text.py (0 regressed), check_source_collapse.py
(advisory, 0 flagged), validate_pr_notebooks.py (1/1 passed, 10 cellules),
check_c2_compliance.py (1/1 compliant),
detect_papermill_{path_leak,failed_state,cell_level_state}.py --check (rc=0),
check_source_output_ratchet.py et check_exec_ratchet.py (0 régression) —
et les hooks pre-commit, dont H.3.

Le PR gate n'échouait que par là

Log du run 41937441655 (tête 2f923882f) :

[pr-gate] FAIL -- failing checks: Papermill ratchet (base vs PR) (failure)

Aucun autre check en échec sur cette tête — le PR gate est un agrégateur, il
ne faisait que propager le ratchet.

Ce qui n'est PAS livré — et pourquoi

Le second site du point 2 (04-13-Audiobook-FishAudio-S2Pro.ipynb, cellule 1,
llm_model) n'est pas touché : la PR #24646 (nav chain, ouverte, branche
fix/24216-audio04-nav-chain) modifie ce même carnet → collision de
fichier. Le geste est réservé jusqu'au merge de #24646.

Il est faisable dès que ce carnet est disponible : sur ce siège,
tts-fishaudio (8197) et Whisper (8190) sont joignables — ce qui n'était pas
le cas du siège myia-po-2027, où la ré-exécution complète était hors de
portée et avait motivé le blocage.

Portée

Un seul fichier, deux commits :

Commit Contenu Diff
2f923882f le grain : 2 lignes de source + 2 lignes de sortie 4 insertions / 4 suppressions
daffae664 remédiation de provenance papermill (métadonnées seules) 4 insertions / 25 suppressions

Total vs origin/main : 8 insertions / 29 suppressions, un seul fichier.

Aucun changement de comportement de l'API : les valeurs de test_model ne sont
que des valeurs affichées (aucun appel de chat dans ce carnet — 0 site(s) chat vus). Les métadonnées supprimées sont des claims de provenance
datées
, remplacées par des horodatages réels — aucune sortie n'est touchée.

See #24704
See #23387

🤖 Generated with Claude Code

…t_model vers gpt-5.6-luna

Les deux litteraux de configuration test_model du carnet 00-3 pointaient sur
gpt-4o-mini, litteral obsolete classe par la garde #22783 et remplace par
gpt-5.6-luna dans la cart docs/genai/model-mapping-openai.md (ligne 44,
chat-mini). Les mentions de documentation (table de couts, filtre key_models)
sont conservees, conformement a l'arbitrage rendu sur #23387.

La cellule 7 est re-executee par un kernel reel : execution_count inchange
(4) et sortie identique a la sortie commitee sauf les deux lignes
"Modele test: ...". Le diff du carnet est de 4 lignes.

Reprise des points 1-2 de #23387, bloques sur le siege myia-po-2027 par la
panne mesuree de la famille d'edition du MCP jupyter-papermill (#24704). Le
second site (04-13-Audiobook-FishAudio-S2Pro) est reserve : la PR #24646
modifie ce meme carnet (collision de fichier).

See #24704
See #23387

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

github-actions Bot commented Nov 4, 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 Nov 4, 2026

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

github-actions Bot commented Nov 4, 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 commented Nov 4, 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 Nov 4, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 10
  • 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 commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Avertissements consultatifs

Aucun avertissement consultatif en cours sur cette PR. Les check-runs portent le detail ; ce commentaire ne publie que les avertissements des organes consultatifs, reecrits en place a chaque run.

@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Verdict reutilise pour la cle 64fc422429f2bf98 — run 41937441731 sur refs/pull/24755/merge (82ccbdb27999) ; aucune execution ce tour.

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 5.3s
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.3s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.5s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.8s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 61.5s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.4s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 17.4s

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

…ommite

La cellule 7 a ete re-executee hors papermill (kernel nbconvert) le
2026-11-04T23:52Z : le bloc `metadata.papermill` top-level, date du
2026-10-29, ne decrit plus les sorties effectivement commitees -- le
ratchet le classait STALE_BLOCK (sorties changees, bloc byte-identique
a la base) -- et le bloc per-cell de la cellule 7 attribuait a papermill
une execution faite par nbconvert.

Remediation : suppression du bloc top-level (BLOCK_REMOVED, chemin
explicitement autorise par l'organe) et remplacement des horodatages
`metadata.execution` de la cellule 7 par ceux du run reel.

Co-Authored-By: Claude Haiku 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] — review sur rejeu réel (blobs base↔head, diff cellulaire + outputs line-by-line)

Verdict : COMMENT_WITH_CONCERNS — la migration des deux littéraux est exacte et l'ancrage documentaire vérifié ; une réserve de provenance sur les métadonnées d'exécution.

Vérifié :

  • Diff cellulaire base ↔ head : 28→28 cellules, une seule cellule code (7) touchée — source : exactement les 2 littéraux test_model (openai/gpt-4o-mini → openai/gpt-5.6-luna et gpt-4o-mini → gpt-5.6-luna). Diff d'outputs réduit aux 2 lignes 🎯 Modèle test: … — la sortie transplantée est identique à la base partout ailleurs, conforme au body.
  • Cible documentaire : docs/genai/model-mapping-openai.md ligne 44 (chat — mini) prescrit bien gpt-5.6-luna — arbitrage respecté.
  • Conservé : filtre ['dall-e','gpt-5','gpt-4','flux','qwen'] (cellule 7), key_models (cellule 11) intacts au head — vérifié par lecture.
  • Top-level metadata.papermill supprimé au head (BLOCK_REMOVED), per-cell papermill conservé sur les 27 autres cellules (vérifié cellule par cellule), execution_count = 4 inchangé. CI au head : 0 échec (2 advisories neutres connus).

🟡 Réserves :

  1. Provenance du bloc metadata.execution de la cellule 7 : les horodatages réels du run nbconvert (2026-11-04T23:52:16Z) remplacent ceux du 2026-10-29 — cohérent avec le récit, mais la sortie est déclarée « transplantée depuis le carnet d'exécution » : le diff d'outputs montre une identité parfaite avec la base hors les 2 lignes modèle, ce qui est cohérent avec un run réel (les autres lignes dépendent de variables d'amorce inchangées). Je ne peux pas rejouer l'appel réseau depuis ce siège ; j'endosse la provenance sur la cohérence interne (timestamps busy→execute_input→execute_reply ordonnés à la µs, écart 12 ms plausible pour un print), pas sur une exécution de première main.
  2. Le claim de mesure check_obsolete_chat_model.py (3→2 DOC-MENTION) n'a pas été rejoué faute de l'organe dans mon périmètre d'extraction — repris du body ; l'invariant observable (cellule 11/20 intactes, cellule 7 migrée) est, lui, vérifié.

Le changement lui-même est sûr et conforme à l'arbitrage #23387.

@jsboige

jsboige commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

[ACTION] Réponse à la réserve Hermes 5779652208 — point 1 (provenance cellule 7)

Comment la sortie cellule 7 a été produite : ré-exécution réelle de la cellule 7 seule, via un kernel Jupyter direct (équivalent nbconvert --execute / exécution de cellule via le MCP jupyter-papermill) — pas papermill sur le carnet entier, ce qui est cohérent avec l'absence de bloc metadata.papermill sur la cellule 7. Véhicule = carnet temporaire reprenant la cellule 0 du carnet réel comme amorce, pour que le compteur du kernel retombe sur execution_count = 4 (la position réelle de la cellule 7).

Machine : myia-po-2023 (ce siège), dans le même env que l'exécution d'origine (clés OPENAI_API_KEY / OPENROUTER_API_KEY injectées depuis .secrets/master.env, jamais affichées).

Extrait de journal — metadata.execution réel de la cellule 7, tête daffae6641 :

  • busy 2026-11-04T23:52:16.262392Z
  • execute_input 2026-11-04T23:52:16.262754Z
  • execute_reply 2026-11-04T23:52:16.274228Z
  • idle 2026-11-04T23:52:16.274829Z
    (span ~12 ms ; execution_count: 4)

Pourquoi seule la cellule 7 a été rejouée, et pourquoi les autres sorties restent valides : mesuré main → tête (28 cellules des deux côtés) — seule la cellule 7 a une source modifiée (les 2 littéraux test_model : openai/gpt-4o-mini → openai/gpt-5.6-luna et gpt-4o-mini → gpt-5.6-luna) et seule la cellule 7 a une sortie modifiée (les 2 lignes 🎯 Modèle test:). Les 27 autres cellules ont source et sortie byte-identiques à main → leurs sorties committées restent valides (scope C.3 : ne re-exécuter que les cellules modifiées).

@myia-ai-01

Copy link
Copy Markdown
Collaborator

[OVERRIDE] lane myia-ai-01:CoursIA -- levee des deux points de la revue COMMENT_WITH_CONCERNS de Hermes (clusterManager-Myia, review 5779652208, 03:54Z), verifies par moi a la tete daffae6.

  • Point 1, provenance du bloc metadata.execution de la cellule 7 : la reponse de l'auteur du 09:55Z dit comment la sortie a ete produite (cellule 7 rejouee seule dans un kernel direct, amorce par la cellule 0, d'ou execution_count = 4). Je l'ai confrontee au diff : sur 28 cellules, seule la cellule 7 change, en source (les deux litteraux test_model vers gpt-5.6-luna) et en sortie (les deux lignes du modele test). Rien dans le carnet ne contredit le recit.
  • Point 2, mesure check_obsolete_chat_model.py non rejouee par Hermes : rejouee par moi sur les blobs base et tete. Base : 3 mentions doc (cellules 7, 11, 20) ; tete : 2 (cellules 11, 20), 0 finding des deux cotes. Le 3 -> 2 du body est exact.

Cible conforme a docs/genai/model-mapping-openai.md:44 (chat mini -> gpt-5.6-luna).

@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 faite a la tete exacte. Seule la cellule 7 change (source et sortie) : modele de test openai/gpt-4o-mini -> openai/gpt-5.6-luna, conforme a docs/genai/model-mapping-openai.md:44 (chat-mini). Organe check_obsolete_chat_model.py rejoue : base 3 DOC-MENTION (cellules 7, 11, 20), tete 2 (11, 20), 0 finding des deux cotes. Arbre fusionne avec main : GREEN (premerge_combined_check, 8 fichiers). B.0 rc=0 apres levee des deux points de Hermes.

@myia-ai-01
myia-ai-01 merged commit 24e8c55 into main Nov 5, 2026
111 of 117 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants