Repository navigation
fix(lab7,#17387): la demo Q3 exige un calcul, l'agent invoque python_repl_ast (re-exec complete) - #18487
Conversation
…python_repl_ast (re-exec 3.13.12) Audit borne du carnet Lab7 (campagne #17073, partition DSWA Track1-LangChain). Finding CONFIRMED (stale-claim, apparu avec le passage gpt-4o -> gpt-5-mini de #16710) : la question 3 "Liste les categories de produits uniques." etait repondue depuis l'extrait de df.head() (5 lignes) sans aucun appel d'outil -- la sortie committee ne portait aucune invocation de python_repl_ast, ce qui contredit la prose de la cellule d'intro et la these CodeAct du lab (cellule Etape 2, reference 1). Question reformulee : "Combien y a-t-il de dates uniques dans les donnees ?" (colonne date : 4 valeurs distinctes, dont une hors de l'extrait affiche -> un calcul est necessaire) ; prose de la cellule d'intro alignee (categories -> dates). Aucune sortie hand-editee. Re-execution reelle (papermill via scripts/notebook_tools, kernel python31312 = 3.13.12, cle OpenAI chargee depuis .secrets/master.env, jamais affichee) : 10/10 cellules code, execution_count 1..10 contigus, 0 erreur ; Q3 -> Invoking python_repl_ast pd.to_datetime(df['date']).dt.date.nunique() -> 4. Q1/Q2/Q4 inchanges de sens (meme outil invoque). Metadata papermill scrubbee au basename par l'organe canonique (hook #3436). Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM (vérifié: lecture intégrale du notebook base+head, protocole v2 — cellules modifiées lues avec leurs sorties complètes)
[NanoClaw] — review notebook protocole v2 : extraction complète base (b6b02bb4) + head (77eef325), outputs réduits à des empreintes sauf cellules modifiées (13/14/16) lues en entier. 25 cellules, 22 byte-identiques, diff chirurgical de 3 cellules.
F1 confirmé de façon indépendante. Cellule 14 base : la sortie ne contient aucun « Invoking » — l'agent répondait « Tu peux utiliser pandas. Exemple : … » et listait les catégories « D'après l'extrait affiché », i.e. une réponse déduite de l'aperçu df.head(), pas un résultat calculé. Détail mesuré : cette réponse tombait juste par coïncidence (la série complète de la cellule 16 montre exactement les 3 mêmes catégories) — mais rien ne le garantissait. Cellule 14 head : « Invoking: python_repl_ast with {'query': "…dt.date.nunique()"} » → 4 → réponse alignée sur la sortie calculée. La démo illustre désormais l'outil qu'elle annonce (.unique()/.nunique() en prose, nunique() en exécution).
Q4 (cellule 16) vérifiée. Même réponse (Electronique, 1440.0), requête reformulée (plus de .head(1)), la série complète (Electronique 1440 / Livre 248 / Maison 151.8) remplace le seul top-1 — la variabilité LLM signalée dans le body est réelle et sans régression sémantique.
Gates densité #17040 : rien à signaler. Aucune cellule ajoutée, markdown édité in place sans valeur numérique citée, aucune lecture après-output ajoutée, stubs d'exercices intacts (ec=8/9/10, None + print), exécution 1→10 contiguë, 0 erreur, 0 sortie manquante.
Note checks (pas d'APPROVE) : au moment de la review, tous les check-runs complétés au head sont success, mais PR gate, validate-notebooks et 5 autres sont encore in_progress (PR à ~5 min d'âge au scan). La règle locale exige des checks relevés ET verts avant tout APPROVE — je reste en COMMENT ; la décision de merge revient à Emerjesse.
|
[ADJOINT PREFLIGHT] |
Grain: MED/notebook-python — lane myia-po-2024:CoursIA — prev: MED/guard #18470
Audit correctif de
Lab7-Data-Analysis-Agent.ipynb(partition Hermes de #17387) : un finding CONFIRMED, corrigé et re-exécuté de bout en bout. Les deux patterns de série que l'issue déclare propres sur Lab7 sont revérifiés ci-dessous avec leur mesure.F1 (CONFIRMED) — la démonstration « Valeurs uniques » n'invoquait pas l'outil qu'elle était censée démontrer
La démonstration posait « Liste les catégories de produits uniques. », et la sortie de
mainle prouve sans ambiguïté :Invokingy compte 0 occurrence, et l'agent répond lui-même « D'après l'extrait affiché, les catégories uniques sont : ['Electronique', 'Livre', 'Maison'] ». La réponse était lisible dans l'extrait dehead()affiché deux cellules plus haut — les 3 catégories du DataFrame nettoyé y figurent toutes — donc la démonstration ne démontrait rien : ni l'appel de l'outil, ni la capacité annoncée par sa propre prose (« identifier et utiliser les méthodes appropriées de Pandas »). C'est le cas dégénéré du Prong B desota-not-workaround.md.Correction (2 lignes de source, vérifiées cellule à cellule contre
origin/main— 25 cellules des deux côtés, seules les cellules #13 markdown et #14 code diffèrent en source) : la question devient « Combien y a-t-il de dates uniques dans les données ? ». La colonnedateest la seule dont la réponse n'est pas lisible dans l'extrait :head()n'affiche que 3 dates, le DataFrame nettoyé en porte 4 — la ligne portant2023-10-04est hors extrait.read_csvbrutdropna(subset=['quantite']))head()2023-10-01/02/03)2023-10-04, hors extrait)len(df)— réponse Q1chiffre_affaires.sum()— réponse Q2Preuve post-fix : la sortie de la cellule corrigée porte
Invoking: python_repl_ast with {'query': "import pandas as pd\npd.to_datetime(df['date']).dt.date.nunique()"}→4, en accord avec le recalcul indépendant.Patterns de série (#17387) — revérifiés
## Objectifs d'apprentissage+ prérequis + durée, en une seule cellule## Exemple guidéaprès## Conclusion## Conclusion(#23)Delta de sorties hors F1 — déclaré
La re-exécution est complète (papermill,
start_time 2026-09-29T21:23:03Z→end_time 21:23:26Z). Les sorties des cellules non-LLM sont byte-identiques àmain; deux cellules LLM diffèrent de sortie :Electronique, 1440.0), mais une requête d'outil reformulée et une prose différente — variabilité du modèle,temperature=0n'étant pas une garantie de déterminisme. Aucune régression sémantique.Stubs d'exercice — non touchés (C.1)
Les 3 stubs (
ec=8, 9, 10) restent conformes :None+print("Exercice N a completer"), indices en commentaires, aucunraise/assert False/1/0. Le code exécuté utilisegpt-5-mini(celluleec=3) ; l'indice d'exercice qui citegpt-4oest un commentaire dans un stub non exécuté, sans effet sur la démonstration.Validation (relancée après le dernier commit)
execution_count[1..10]contigus sur 10 cellules codeec=4, 5, 6, 7(Q3 incluse)invoke)raise NotImplementedError/assert False/1/0)metadata.papermillexception: null, durée 23,6 s,21:23:03Z → 21:23:26Z, version 2.7.0language_infoPortée
Le seul artefact modifié est le notebook Lab7. Cet audit ne touche ni les autres labs de la série (Lab6 est livré en #17392 par une autre lane) ni l'enrichissement markdown de la série (chantier distinct).
See #17387
🤖 Generated with Claude Code