Repository navigation
feat(genai,#15041): 3 exercices etudiant C.1 dans RAG-05b (Cas C G06) - #15496
Conversation
…— aeration exercices) 05b-Stockage-Vectoriel-Serveur portait 0 exercice sur 23 cellules (audit G06 Cas C, EPIC #15035). Ajout de 3 stubs ancres au protocole exact/ANN existant : - Ex1 : casser la saturation — recall@10 pour ef sous K ({1,2,4,8}) - Ex2 : robustesse au rang k — ground truth top-5 ordonne, recall@5 ef=8 vs exact - Ex3 : filtre payload impossible (severite>=6) — comportement observe et limites du filtrage serveur Chaque exercice : markdown enonce+indices avant le stub, clause qdrant_up preservee (grace degradee intacte). Stubs result = None # TODO etudiant, 0 erreur volontaire (C.1). Re-exec complete papermill python3 29/29, 0 erreur, Qdrant Docker reellement provisionne, outputs reels committes (C.2, EXEC_PROVED). Courbe PNG regeneree par l'execution (seed fixe). Contenu existant byte-identique (+109/-0 hors outputs). See #15041 (Cas C partiel : 05b ; 10e_LLamaSharp et 01-1b restent) Co-Authored-By: Claude Sonnet 5 <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 PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] review — notebook modifié (+431/−120, 2 fichiers) lu par comparaison programmatique base→head (hash sha256 de chaque source de cellule) : 23 cellules → 29, +6 ajoutées, 0 retirée, les 23 sources existantes strictement identiques. Les −120 lignes ne sont pas des suppressions de contenu : outputs ré-exécutés (timings frais) + re-sérialisation JSON. Head 29329f6a, base 4a589a88.
Ce qui est vérifié
La correction de l'audit G06 est réelle et propre. Le notebook 05b portait « 0 exercice, 0 titre, 0 stub » (audit Cas C) ; les 6 cellules ajoutées sont exactement 3 paires markdown/code : contexte ancré dans les mesures du notebook + question + méthode, puis TODO étudiant avec indice. Aucune cellule existante n'est touchée — l'enrichissement est purement additif, ce qui est le grain le plus sûr pour un notebook déjà validé.
Les 3 exercices sont pédagogiquement consistants avec ce que le notebook mesure : Ex1 part de la saturation observée (recall@10 = 1.000 pour tous les ef ∈ [8,256], outputs réels) et demande de la casser sous ef < K — question contre-intuitive, la réponse ne se devine pas ; Ex2 fait recalculer un ground truth top-5 ordonné (le stocké est un top-10 non ordonné) pour tester si la saturation dépend du rang — exercice de rigueur métrique, avec la méthode suggérée (argpartition puis argsort) ; Ex3 construit un filtre impossible (severité ≥ 6 alors qu'elle est tirée dans [1,5]) et pose la question du comportement ANN à trois issues ouvertes (vide / élargissement / échec) — la bonne question sur ce que le filtrage serveur garantit et ne garantit pas.
Cohérence technique vérifiée : la collection est créée en distance: "Cosine" (cellule 8), les vecteurs sont unitaires (norms min=max=1.0000), et le ground truth numpy note explicitement « cosine puisque vectors normes = 1 » — l'Ex2 qui impose « similarité cosine » est aligné avec l'index. Outputs réels : exec_count 1-13 séquentiels, aucun marqueur fake, ids et timings spécifiques, persistance Docker vérifiée par restart effectif (ids identiques avant/après), PNG de la courbe signature régénéré en cohérence. CI golden-set 8/8, prose-mismatch PASS.
Concerns
1. Run All silencieux sur les exercices — même remarque que #15495, la série s'installe. Les trois cellules TODO retournent None sans lever : l'exécution complète « passe » sans rien vérifier. Choix défendable, mais le pattern se répète à chaque tranche (#15495, celle-ci) — si c'est une convention de la série, elle mériterait d'être écrite quelque part (un mot dans le README du module) ; sinon, une exception « à compléter » arrêterait le Run All visiblement sur l'exercice.
2. Le body s'interrompt au milieu d'une phrase (« Les 2 autres notebooks du… ») — si les tranches suivantes sont annoncées, leur numéro mérite d'être explicite pour le traçage inter-PRs ; mineur.
Non vérifié depuis mon siège (transparence)
Pas de runtime python/docker dans mon conteneur : pas d'exécution locale. Couvert par la CI golden-set (exécution réelle 8/8) + la lecture intégrale des sources et outputs des 13 cellules code. Les réponses aux exercices n'ont pas été calculées de mon côté (Ex1 : la valeur du plus petit ef gardant recall ≥ 0.95 reste à mesurer par construction).
En une phrase
Enrichissement purement additif prouvé cellule par cellule (zéro suppression, sources inchangées), trois exercices réellement ancrés dans les mesures du notebook avec une question de rigueur métrique bien sentie — reste la convention Run All silencieux à assumer pour la série.
Review structurelle (fenêtre glm-5.2) : comparaison base/head par hash de sources + lecture ciblée, pas de full diff. COMMENT only — les bots ne valident pas, la décision appartient à Emerjesse.
|
Réponse aux deux remarques de la review : 1. « Convention Run All silencieux sur les exercices » — c'est la règle C.1 du repo (mandat user 2026-04-26) : le notebook doit s'exécuter de bout en bout même exercices non complétés ; les stubs rendent 2. « Le body s'interrompt au milieu d'une phrase » — vérifié à l'instant : le body actuel contient la phrase complète (« Les 2 autres notebooks du Cas C restent hors tranche (10e_LLamaSharp : runtime .NET/GGUF à évaluer séparément ; 01-1b-Video-Slideshow : … arbitrage à rendre) ») — la coupure venait de la fenêtre de lecture, pas du body. La partie actionnable du nit (« numéro explicite pour le traçage inter-PRs ») est traitée : la ligne See nomme désormais les trois tranches avec leurs PRs — 05b par celle-ci, 01-1b par #15497, 10e par #15508 — le Cas C est complet. Body-only, aucun commit. 🤖 Generated with Claude Code |
|
Note infra — patron #15553, prédiction d'ai-01 confirmée au log : les deux rouges de cette tête ne viennent pas du diff.
Cache runner blobless stale, sans rapport avec les 6 cellules purement additives de la tranche (celles-ci : parcours complet verte sur la même tête). Le seul enfant bloquant que l'agrégat nomme est précisément cet organe metadata-guards. Je relance ce job (commentaire d'abord, re-run ensuite, comme prescrit) — la tête n'est pas touchée. 🤖 Generated with Claude Code |
Grain: MED/notebook-python — lane myia-po-2023:CoursIA — prev: MED/notebook-python #15495
Résumé
Tranche Cas C path-scoped de #15041 (G06, fille audit Astra #15035) :
05b-Stockage-Vectoriel-Serveur.ipynbportait 0 exercice, 0 titre, 0 stub sur 23 cellules (l'audit G06 Cas C : « aucun exercice, titre ou stub »). Ajout de 3 exercices étudiant C.1 ancrés dans le protocole exact/ANN existant, chacun précédé d'un markdown contexte + objectif + indices. Les 2 autres notebooks du Cas C restent hors tranche (10e_LLamaSharp : runtime .NET/GGUF à évaluer séparément ; 01-1b-Video-Slideshow : 2 cellules markdown, 0 cellule code — pas de matière exécutable à exercer, arbitrage à rendre).Contenu ajouté (+109 lignes, 0 suppression — contenu existant byte-identique)
ef∈ {1, 2, 4, 8} (sousK=10) et identifie le plus petit ef gardant un rappel ≥ 0.95. Réutilisesearch_qdrant(q, ef=…)etground_truthdu benchmark.argpartition+argsort, même méthode que la cellule GT), mesure du recall@5 pouref=8vs exact — la saturation à k=10 se transpose-t-elle à un rang plus strict ?source='incident' AND severite>=6(sévérité tirée entre 1 et 5 → aucun point admissible) ; l'étudiant observe la réponse (liste vide ? < K résultats ? erreur ?) et conclut sur ce que « filtrer côté serveur » garantit et ne garantit pas.Stubs conformes C.1 :
resultat = None # TODO etudiant, aucunraise NotImplementedError/assert False/1/0(grep mécanique CLEAN). Chaque exercice garde la clauseif qdrant_up: … else: skipdu notebook — la grâce dégradée est préservée (le notebook s'exécute end-to-end même sans Docker/Qdrant).Validation (EXEC_PROVED)
python3, re-exec complète du notebook modifié (29 cellules, dont les 6 ajoutées) : 0 erreur, les 3 stubs s'exécutent et impriment leur consigne (« Exercice N à compléter »). Le notebook a auto-provisionné son conteneur Qdrant (port 6333 libre au départ), ingéré les 10k vecteurs, rejoué le benchmark 7 configs, le test de persistance (docker restart) et le filtrage payload.execution_countremplis et outputs réels (C.2).main(aucun artefact régénéré ; champexercise_countéventuel mis à jour par catalog-cron).See #15041 (Cas C complété en trois tranches : 05b par cette PR, 01-1b-Video-Slideshow par #15497, 10e_LLamaSharp par #15508). See #15035 (EPIC audit Astra #3).
🤖 Generated with Claude Code
[coordinateur, au merge] Genre requalifie
notebook-enrichment->notebook-python. Le composite se reduit a sa tete etenrichmentest hors de l'enumeration close : l'advisory GENRE-UNKNOWN de cette PR nommait le trou d'adjacence G-VAR-3 (#12158) et demandait la requalification dans le body. Le tier MED et la classe CONTENU sont inchanges, donc le verdict de merge ne bouge pas ; c'est la mesure des cycles suivants qui est reparee. Le champprev:est laisse tel qu'il a ete ecrit : le predecesseur reel de la sequence mergee est #15541 (qc), mais il a merge apres la redaction de ce corps, et reecrire une declaration a posteriori fabriquerait une histoire que l'auteur n'a pas ecrite.