Skip to content

GenAI : qualifier les 14 notebooks sous le seuil du compteur canonique — faux négatifs, artefact hors parcours, vrais trous #18741

Description

@jsboige

Parent : #18731. Section 3 du compagnon de l'Audit tiers Astra du 2026-10-01, archivé sur GDrive : MyIA/IA/LLMs/Conversations/CoursIA/Audit-CoursIA-Evolution-Digestion-2026-10-01.md (preuves : CoursIA-Audit-Preuves-2026-10-01.zip). (CoursIA-EPF-TPs-Projets-Suite-2026-10-01.md).

Mesure

python scripts/notebook_tools/count_exercises.py --family GenAI --json sur origin/main = c2cd88cb7f donne 254 notebooks dans le corpus, dont 6 setup exemptés, plus 2 hors corpus. 14 sont non conformes. L'audit en compte 25, parce qu'il inclut les carnets d'environnement et les templates que l'outil canonique exempte déjà.

Le risque à éviter : remplir mécaniquement ces 14 notebooks de trois stubs artificiels. Les cas ne sont pas de même nature.

Notebook (GenAI/…) Compte Lecture de l'audit Action
Integrations-DotNet/Orleans/01-Orleans-Grains-Agents 0 trois consignes présentes ; le code à compléter est dans les projets C# voisins faux négatif du compteur : rendre la localisation visible au compteur (déclaration explicite), pas d'ajout
Integrations-DotNet/Orleans/02-Orleans-Aspire-CoHost 0 idem idem
Audio/06-Diffusion-SOTA/06-3-AudioDiffusion-Comparison-A-vs-B 0 trois questions de lecture, sans code à compléter décider si ce format compte comme TP corrigé ; sinon, le déclarer
PostTraining/PT_09_rloo_from_scratch_toy_env 1 trois énoncés et stubs distincts (c25-c30) faux négatif : contre-lecture du détecteur
SemanticKernel/Notebook-Generated 0 artefact, hors parcours étudiant rendre l'exclusion explicite (hors corpus)
PostTraining/PT_17_laya_proper_rewards_toy 1 un exercice de calibration confirmé vrai trou si ouvert au tirage : deux grains distincts
Texte/TransformerVariants/TV-03-Internalisation-CoT 0 aucune section d'exercice vrai trou : statut démonstration déclaré, ou tâches ouvertes
FineTuning/FT-00d-LoRA-QLoRA-SOTA-Comparison-Python 2 deux vrais stubs ; le troisième est déjà écrit et cassé (#18732) réparer d'abord (#18732), puis décider d'une vraie troisième tâche
Integrations-DotNet/Aspire/01-Aspire-Orchestration-GenAi, Plateformes-Conversationnelles/…/05-Multi-Tenant-CI-QA-OWUI, …/06-Nouveautes-v0.10-QA-OWUI, PostTraining/PT_11c_grpo_qwen17_rlvr, Texte/09b_Prompt_Security_RedTeam, Video/02-Advanced/02-6-MiniMax-H3-Architecture-Licensing 2 à qualifier : une troisième tâche peut être externalisée ou formulée autrement lire, puis classer dans l'un des trois états

Acceptation

  • Chaque notebook est classé dans un des trois états : ressource hors tirage ; exercice réellement ouvert, éventuellement dans un fichier voisin ; tâche absente ou déjà résolue.
  • Pour chaque exercice offert au tirage, on peut désigner son énoncé et le lieu exact de la modification attendue.
  • Les faux négatifs se corrigent dans count_exercises.py, par sa table d'exemptions ou sa détection, pas par des cellules ajoutées.
  • La valeur du compteur ne doit ni refuser une PR valide ni inventer une capacité de tirage.

Activity

  1. jsboige commented on Oct 1, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-ai-01:CoursIA-2 -- qualifier 14 notebooks GenAI (faux negatifs / hors corpus / vrais trous)

  2. jsboige commented on Oct 1, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] PR #18758 (head c437c35) — qualification 14 notebooks GenAI sous seuil du compteur (10 faux negatifs + 3 vrais trous + 1 hors corpus). Aucune modification de notebook/compteur — document de constat seulement. PR suivantes recommandees pour les actions concretes (extension compteur pour exercices de lecture, exclusion Notebook-Generated, statut TV-03 demo, complement PT_09).

  3. added a commit that references this issue on Oct 3, 2026
  4. added a commit that references this issue on Oct 3, 2026
  5. added 2 commits that reference this issue on Oct 3, 2026
  6. added 2 commits that reference this issue on Oct 4, 2026
  7. myia-ai-01 commented on Oct 5, 2026

    @myia-ai-01
    Collaborator

    Point d'étape. L'issue reste ouverte : un critère n'est pas satisfait.

    Livré :

    Non satisfait : « les faux négatifs se corrigent dans count_exercises.py ». Aucune PR fusionnée n'étend scripts/notebook_tools/count_exercises.py pour cette issue. Le dernier changement du compteur sur main est #18181 (2026-09-29), antérieur au ledger, et le ledger renvoie lui-même cette correction à des « PR suivantes ».

    Reste à faire : étendre le compteur (détection ou table d'exemptions) pour qu'il ne refuse plus une PR valide. Les 11 faux négatifs du ledger sont toujours sous-comptés.

  8. myia-ai-01 commented on Oct 5, 2026

    @myia-ai-01
    Collaborator

    [CLAIMED] lane myia-po-2023:CoursIA -- dispatch coordinateur : critere restant, etendre count_exercises.py pour que les 11 faux negatifs du ledger 18741 soient comptes, temoin negatif inclus -- paths: scripts/notebook_tools/count_exercises.py, scripts/**/test_count_exercises*.py

  9. jsboige commented on Oct 5, 2026

    @jsboige
    OwnerAuthor

    Etat mesure au 2026-10-05 (lane myia-po-2023:CoursIA) — diagnostic, non livre

    Le dispatch ai-01 demandait d'etendre count_exercises.py pour que les faux
    negatifs du ledger soient comptes. Je n'ai pas livre le correctif : la
    mesure ci-dessous explique pourquoi, et separe les causes pour que le grain
    puisse etre decoupe.

    Corpus

    python scripts/notebook_tools/count_exercises.py --json : 1299 notebooks,
    55 non conformes in-corpus
    . Les 14 cas du ledger sont toujours la, avec les
    memes comptes, plus un quinzieme apparu depuis la redaction du ledger :
    PostTraining/PT_18_laya_ablation_distillation.ipynb (1/3), absent du tableau.

    Cause 1 — l'accent, dans le motif le plus canonique

    STUB_PATTERNS[0] est le seul des trois motifs « a completer » a exiger
    l'orthographe non accentuee :

    Motif Forme acceptee
    [0] print print("Exercice 2 a completer — sans accent
    [11] commentaire de fin de ligne a compl[eé]ter — accent accepte
    [12] chaine sentinelle a compl[eé]ter, à compléter — accent accepte

    Le depot est francophone : print("Exercice 2 à compléter : ...") est la forme
    que les auteurs ecrivent, et elle n'etait pas reconnue. Une cellule dont le seul
    autre marqueur est un result_x = None nu retombait alors sur la regle
    <= 1 ligne de code effective et se lisait comme une solution.

    Mesure directe : PT_09 1 -> 3 (conforme), PT_11c 2 -> 4.

    Cause 2 — l'appariement arriere absorbe une cellule d'import

    C'est ce que la cause 1 revele, et c'est pourquoi je n'ai pas livre le seul
    correctif d'accent.

    Sur PT_11c, avant tout changement, les deux hits etaient :

    cell 8   markdown   markdown_header     <- Exercice 1
    cell 9   code       code_cell_comment   <- le stub de l'Exercice 1, compte en autonome
    

    L'en-tete 8 (Exercice 1) ne s'apparie pas a son stub (cellule 9). Il absorbe
    la cellule 7 — un bloc import re / from typing import Optional — via
    l'absorption arriere de #18146 : _is_stub_code rend True sur une cellule
    d'import (sa seule ligne est un import, que le filtre de lignes effectives
    retire, donc 0 <= 1), et son numero d'exercice est None avec aucun mot
    « exercice ». Le vrai stub (c9) reste non apparie et la passe 2 le compte.

    Resultat : Exercice 1 compte deux fois, Exercices 2 et 3 zero fois, pour un
    total de 2 sur 3. Avec le seul correctif d'accent, c15 et c33 deviennent des
    stubs, les en-tetes 14 et 32 s'apparient, et le total passe a 4 — soit un
    faux positif sur une cellule qui a bien 3 exercices.

    Cette cause est independante du compteur d'exercices : toute cellule
    d'import est « un stub » au sens de _is_stub_code.

    Cause 3 — _body_computes_result lit un corps placeholder comme un calcul

    Les trois cas « 3 stubs, compteur en voit 2 » que le ledger laissait « hors
    perimetre » partagent une cause, mesuree cellule par cellule :

    Notebook Cellule Marqueurs presents Pourquoi ecartee
    Video/.../02-6-MiniMax-H3 c16 # TODO etudiant, # Indice entites_connues = [...] puis return trouvees lu comme derive
    Texte/09b_Prompt_Security_RedTeam c30 # TODO etudiant x4 return ok est celui d'une fonction imbriquee (verifier_classification) ; le corps de la cellule, lui, est un dict de None
    OWUI/.../05-Multi-Tenant-CI-QA-OWUI c17 # TODO, # Indice return "api" # placeholder — a affiner + une boucle for de test

    Dans les trois cas la cellule porte un marqueur de stub explicite et le corps
    ne calcule rien d'utile (liste vide, dict de None, valeur codee en dur annotee
    placeholder). _body_computes_result a ete construit sur des incidents
    precis (#15080 D01, #15713, PR #12246) : le durcir demande une mesure
    avant/apres corpus entier dans les deux sens.

    Causes deja qualifiees par le ledger, non retouchees

    Scan C# // Exercice sans en-tete adjacente (Aspire 01, Orleans 01), stubs
    externalises dans le .csproj voisin (Orleans 02), exercices de lecture sans
    stub (Audio 06-3), vrai trou (TV-03), artefact hors corpus
    (SemanticKernel/Notebook-Generated), et les deux cas declares (PT_17, PT_18).

    Pourquoi rien n'a ete livre

    Le correctif d'accent est juste en soi (il rend le motif 0 coherent avec les
    motifs 11 et 12, et PT_09 passe a 3), mais livre seul il transforme le
    sous-comptage de PT_11c en sur-comptage : il faut traiter la cause 2 dans la
    meme PR. Or la cause 2 touche l'absorption arriere de #18146 et la cause 3 la
    porte _body_computes_result — deux heuristiques porteuses d'historique, dont
    la modification exige sa propre validation corpus. Livrer la moitie reviendrait
    a livrer un compte faux connu sur un outil qui gate la pedagogie.

    Decoupage propose

    1. PR A — accent du motif 0 + garde « une cellule d'import n'est pas un
      stub » (cause 1 + 2). Effet attendu : PT_09 1->3, PT_11c 2->3.
    2. PR B — _body_computes_result : distinguer un corps placeholder d'un
      corps qui calcule (cause 3). Effet attendu : Video 02-6, Texte 09b, OWUI 05.
    3. PR C — formes C# (Aspire 01, Orleans 01/02) et exercices de lecture
      (Audio 06-3), avec les kind distincts recommandes par le ledger.
    4. Declarations — SemanticKernel/Notebook-Generated hors corpus, TV-03 en
      statut demonstration, PT_17/PT_18 assumes.

    Instrument de mesure

    Le diff avant/apres corpus entier se fait avec
    count_exercises.py --json puis une empreinte chemin \t compte \t conforme :
    c'est ce qui a permis de voir que la fenetre declaree et la fenetre couverte
    divergeaient. A refaire pour chaque PR ci-dessus, dans les deux sens (conformes
    gagnes et conformes perdus).

  10. added 2 commits that reference this issue on Oct 5, 2026
  11. added 2 commits that reference this issue on Oct 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    auditAutomated quality audit findingsgenai

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions