Skip to content

fix(genai,#15046): ING -- decrire le decoupage reel ( caracteres, frontieres de mots ), separer tracabilite et qualite de retrieval - #15071

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/15046-ing-g10-chunking-honesty
Sep 7, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/15046-ing-g10-chunking-honesty

Conversation

@jsboige

@jsboige jsboige commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python -- lane myia-po-2026:CoursIA -- prev: MED/notebook-python #15008

Closes #15046 (G10 P2, fille #15035 — geste privilegie par l'issue : « rester explicitement une demonstration de provenance ... corriger la prose »).

Defaut 1 — le commentaire decrit un decoupage que le code ne fait pas [ING:c7]

Le commentaire de chunk_structure disait « si le chapitre depasse taille_max, on le decoupe par phrase » ; le code appelle textwrap.wrap(texte_ch, width=taille_max, break_long_words=False), qui coupe par largeur en caracteres aux frontieres de mots — jamais au milieu d'un mot, mais la frontiere peut tomber au milieu d'une phrase. Corrige :

  • c7 (code) : commentaire reecrit — « sous-decoupe AUX FRONTIERES DE MOTS : jamais au milieu d'un mot, mais une frontiere peut tomber au milieu d'une phrase (la coupe suit la largeur, pas la ponctuation) ».
  • Unites corrigees partout ou la prose mentait : chunk_naif fait des tranches de 180 caracteres par slices purs (texte[debut:fin]), pas « taille fixe en mots » (c6) ; les chapitres font 292-343 caracteres (46-63 mots), pas « 200-400 mots » (c5, c17) ; la « frontiere fixe en mots » devient « en caracteres » (c17) avec la preuve visible dans la sortie : le fragment top-1 'orloge. Un pendule...' commence au milieu du mot « horloge ».

Acceptance verbatim : « Une phrase plus longue que la largeur est traitee conformement a la description » — la description dit maintenant exactement ce que textwrap fait.

Defaut 2 — le 5/5 ne demontre aucune amelioration [ING:c13]

exact_naif = 0 etait initialise sans jamais etre alimente (code mort simulant un bras de comparaison). Le tableau etait lu comme une precision comparee. Corrige :

  • c13 (code) : variable morte supprimee ; compteur renomme origines_conformes ; print final recadre : « Origine verifiee (top-1) : structure = 5/5 etiquettes livre+chapitre conformes ; naif = non verifiable (aucune etiquette) ».
  • c12 (lecture, ancree sur les scores reels) : la prose « les 4 autres requetes ... montrent des ecarts analogues » etait fausse — sur 2 des 5 requetes le fragment naif score PLUS HAUT que le chunk structure (gardien 0.262 vs 0.236 ; eau au jardin 0.382 vs 0.252). La requete « sombrero » citee dans l'ancienne lecture n'existe pas dans REQUETES ni dans le corpus (phantom). Lecture reecrite sur les sorties reelles : le constant est l'etiquette verifiable 5/5, pas le score.
  • c14 (section 7) : separation explicite « ce qui est demontre » (tracabilite : origine verifiable, conforme 5/5, filtrable) vs « ce qui n'est pas mesure » (qualite de retrieval comparee — comparer les scores de deux index differents n'est pas un like-for-like ; l'exercice 2, etiquetage a posteriori, en est le point de depart, exactement comme le suggere l'issue).

Acceptance verbatim : « la comparaison ... reste explicitement une demonstration de provenance » — voie choisie (celle que l'issue designe comme « le geste a privileger »).

Tailles recalculees a partir des variables (acceptance)

  • c5 : structure reelle du CORPUS decrite (dict livre -> {"auteur", "chapitres": {num: (titre, texte)}} — l'ancienne prose disait dict[str, list[str]], faux) ; chapitres 292-343 caracteres.
  • c8 : « 18 chunks structures = un par chapitre en moyenne » etait faux — chaque chapitre de ~300 caracteres depasse le plafond 220 et est sous-decoupe en 2 morceaux (9 x 2 = 18). L'exemple « tire au hasard » est en fait l'indice median deterministe (print c9 aligne aussi) ; sur cette execution il tombe sur un fragment coherent — la prose le dit honnetement au lieu d'affirmer un melange absent.
  • c16 : commentaire interne « 2 sur 13 » -> « 2 sur 20 » (compte reel de la section 4).
  • c18 : « un par chapitre ou demi-chapitre » -> sous-decoupe aux frontieres de mots ; typo « etrater » -> « et rater ».

Valeurs toutes reproduites par l'execution committee : 20 naifs / 18 structures / matrice 38 x 246 / 2 hybrides sur 20 / 5-5 origines conformes.

Re-execution (C.2)

python scripts/notebook_tools/notebook_tools.py execute ... --kernel python3 -> SUCCESS (7.8 s), 0 erreur, 0 NotImplementedError, execution_count 1-10 non-null sur toutes les cells code. Notebook 100 % local (sklearn TF-IDF + numpy, « Aucun reseau ») — deterministe, valeurs reproduites a l'identique entre les deux executions de ce grain.

Diff

1 fichier, 348 insertions / 105 deletions (cellules 5-9, 12-14, 16-18 ; les cells code modifiees : 7, 9, 13, 16). Aucune cellule supprimee, aucun exemple resolu stubbe, exercices 1-3 intacts. Catalogue byte-identique a main (aucun fichier catalogue touche).

…ite et qualite de retrieval

Defaut 1 [ING:c7]: le commentaire disait "decoupe par phrase" alors que
textwrap.wrap coupe par largeur en caracteres aux frontieres de mots.
Unites corrigees partout (chunk_naif = tranches de 180 CARACTERES via
slices purs, pas "mots fixes" ; chapitres de 292-343 caracteres, pas
"200-400 mots" ; frontiere fixe en caracteres, preuve 'orloge' citee).

Defaut 2 [ING:c13]: exact_naif mort supprime ; le 5/5 recadre en
demonstration de TRACABILITE (origines verifiables et conformes 5/5),
pas en precision comparee -- les scores naifs sont plus hauts sur 2 des
5 requetes, la lecture ancree le dit explicitement. Print final:
"Origine verifiee (top-1)". La prose "ecarts analogues" et la requete
"sombrero" (fantome) remplacees par la lecture des scores reels.

Tailles recalculees a partir des variables: 20 naifs / 18 structures
(9 chapitres x 2 morceaux <=220c) / matrice 38x246 / 2 hybrides sur 20.

Re-exec complete kernel python3 SUCCESS, 0 erreur, 0 NotImplementedError,
valeurs deterministes reproduites a l'identique (TF-IDF hors ligne).

Closes #15046

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 7, 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 added the lane-claim-absent Closing issue carries no claim at all (#10223) label Sep 7, 2026
@github-actions

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

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 16.7s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 11.2s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 16.7s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 15.5s
Search-01-StateSpace.ipynb ✅ SUCCESS 9.6s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 5.6s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 57.6s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 8.2s

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

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] — #15071 review sur 544eef0 (fix G10, issue #15046).

Verdict : LGTM sémantique. Issue-first check passé : le PR prend explicitement l'alternative documentée par l'issue (« rester explicitement une démonstration de provenance », geste à privilégier avant mercredi) plutôt que la construction d'une vérité terrain — divergence évitée, le geste minimal est le bon.

Vérifications :

  • Défaut 1 corrigé par la prose, pas par déni : les commentaires disent désormais « taille fixe EN CARACTÈRES », « sous-découpe AUX FRONTIÈRES DE MOTS », « une frontière peut tomber au milieu d'une phrase » — description exacte de textwrap.wrap, le contresens « découpe par phrase » a disparu ✓
  • Défaut 2 requalifié honnêtement : origines_conformes compte la traçabilité (5/5 étiquettes conformes), le exact_naif fantôme (N/A jamais alimenté) est retiré, et la nouvelle section 7 « ce qui est démontré, ce qui ne l'est pas » + les commentaires « ce compte mesure la TRACABILITÉ, pas une précision de retrieval comparée » bornent exactement la claim ✓
  • Contre-exemples authentiques conservés : le fragment 'orloge. Un pendule...' (top-1 naive coupé au milieu du mot) comme preuve directe du découpage en caractères ✓
  • Exécution réelle : metadata papermill status: completed, exception false, Python 3.11.9 ✓
  • Security scan : 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN\s*=) ✓

(contrainte token : COMMENT only — opener jsboige)

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #15071 (fix(genai,#15046): ING -- decrire le decoupage reel ( caracteres, frontieres de mots ), separer tracabilite et qualite de retrieval) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Sep 7, 2026
@myia-ai-01
myia-ai-01 merged commit f5b4603 into main Sep 7, 2026
67 checks passed
jsboige added a commit that referenced this pull request Sep 8, 2026
…ite et qualite de retrieval (#15071)

Defaut 1 [ING:c7]: le commentaire disait "decoupe par phrase" alors que
textwrap.wrap coupe par largeur en caracteres aux frontieres de mots.
Unites corrigees partout (chunk_naif = tranches de 180 CARACTERES via
slices purs, pas "mots fixes" ; chapitres de 292-343 caracteres, pas
"200-400 mots" ; frontiere fixe en caracteres, preuve 'orloge' citee).

Defaut 2 [ING:c13]: exact_naif mort supprime ; le 5/5 recadre en
demonstration de TRACABILITE (origines verifiables et conformes 5/5),
pas en precision comparee -- les scores naifs sont plus hauts sur 2 des
5 requetes, la lecture ancree le dit explicitement. Print final:
"Origine verifiee (top-1)". La prose "ecarts analogues" et la requete
"sombrero" (fantome) remplacees par la lecture des scores reels.

Tailles recalculees a partir des variables: 20 naifs / 18 structures
(9 chapitres x 2 morceaux <=220c) / matrice 38x246 / 2 hybrides sur 20.

Re-exec complete kernel python3 SUCCESS, 0 erreur, 0 NotImplementedError,
valeurs deterministes reproduites a l'identique (TF-IDF hors ligne).

Closes #15046

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane-claim-absent Closing issue carries no claim at all (#10223) pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

G10 (P2) -- ING : le decoupage ne suit pas les phrases, et la comparaison ne mesure pas les deux precisions

2 participants