Skip to content

feat(genai,#12453): notebook 10c — strategies long contexte (mesures vLLM) - #12710

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/12453-long-context
Aug 24, 2026
Merged

feat(genai,#12453): notebook 10c — strategies long contexte (mesures vLLM)#12710
myia-ai-01 merged 1 commit into
mainfrom
feature/12453-long-context

Conversation

@jsboige

@jsboige jsboige commented Aug 24, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/genai — lane myia-po-2024:CoursIA-2 — prev: MED/notebook-python #12669

Summary

Livraison du grain GREENLIGHT #12453 : nouveau notebook MyIA.AI.Notebooks/GenAI/Texte/10c_Long_Context_Strategies.ipynbstratégies pour contextes longs, mesurées sur notre vLLM distant (le moteur réel, pas une API tierce ni un fallback).

Cinq stratégies, chacune mesurée (valeurs du run, pas un pitch) :

  1. Budget en tokens — tokenizer réel (famille Qwen, offline) sur un vrai corpus git-tracked (Le Horla 77 204 tokens + Boule de Suif 33 154) ; décision « ça tient / ça ne tient pas ». Fenêtre réelle du modèle servi lue via /models au lieu d'être supposée (voir note honnêteté ci-dessous).
  2. Biais de position (needle-in-haystack) — aiguille insérée à 6 profondeurs × 3 essais dans une paille de vraie prose ; courbe rappel-vs-position avec verdict honnête sur le « lost in the middle ».
  3. Réordonnancement — la même aiguille à début / milieu / fin ; effet mesuré sur le rappel.
  4. Map-reduce vs troncation — perte d'information quantifiée (faits retrouvés / 5) ; pas un avis, un chiffre.
  5. Prefix caching vLLM — TTFT warm vs cold en stream, médiane sur 6 essais ; gain de latence mesuré, pas affirmé.

Mesures (valeurs du run, committées)

  • Endpoint vLLM (GET /v1/models) → HTTP 200, modèle qwen3.6-35b-a3b, max_model_len = 262 144 (fenêtre réelle). Le notebook travaille sur un budget de travail choisi (32 768), bien plus petit que la fenêtre réelle — contrainte coût/latence réaliste, rendue explicite (pas une fenêtre « supposée du modèle »).
  • §1 Budget : 3 docs × ~6 200 tokens → 18 678 tokens, 57.0 % de la fenêtre, 14 090 restants après réservation 512.
  • §2 Needle (Le Horla, paille 4 000 t, 6 profondeurs × 3 essais) : rappel = 1.000 à toutes les profondeurs (0.0, 0.2, 0.4, 0.6, 0.8, 1.0). Verdict honnête : aucun creux du milieu net sur cette mesure. Réponses brutes = '749' (sans espace) à chaque essai — récupérées par simple_score après normalisation qui retire les espaces. Note explicite ajoutée dans la cellule de lecture pour rendre l'absence du creux aussi probante que sa présence l'aurait été.
  • §3 Réordonnancement (même aiguille, position seule varie) : debut 1.000 · milieu 1.000 · fin 1.000 → pas d'effet mesuré ici, cohérent avec §2.
  • §4 Map-reduce vs troncation (5 faits injectés AB-1-XY...AB-5-XY) :
    • map-reduce : 5 / 5 retrouvés
    • troncation naive : 1 / 5 retrouvés
    • perte relative = 80 % (= 1 − 1/5, un chiffre, pas un avis)
  • §5 Prefix caching vLLM (préfixe commun 3 837 tokens, 6 essais) :
    • TTFT cold (cache miss) : médiane 0.415 s
    • TTFT warm (cache hit) : médiane 0.167 s
    • gain = 60 %

Validation

  • C.1 : 0 raise NotImplementedError / assert False / 1/0 (grep regex, 0 violation).
  • C.2 + H.3 : re-exec papermill (kernel python3) sur le vLLM distant ; chaque cellule code porte execution_count non-null et outputs (aucun output_type: error).
  • Verdict SOTA : le notebook exécute le vrai outil (notre vLLM self-hosted, API OpenAI-compatible) et mesure vraiment — courbe rappel-vs-profondeur, perte de map-reduce, TTFT warm/cold — le tout committé avec outputs (C.2). Il ne s'agit pas d'un cas dégénéré où un moteur équivaudrait à une baseline triviale : la longueur de contexte, la profondeur d'aiguille et le préfixe partagé sont précisément les quantités qui font valoir le moteur (fenêtre, cache KV) plutôt qu'un if qui réglerait tout. Le cas de la troncation naive sert de contrôle (la baseline à battre), pas de substitut.
  • Non-fallback : le vLLM local 0.5B (max_model_len 4 096) ne pouvait pas porter la fenêtre 32 768 → refusé (workaround-degrade, Prong A). La clé a été obtenue par canal privé (ai-01, provisioning Notebook GenAI/Texte 21 — Mécanique d'inférence LLM : le KV-cache from scratch puis mesuré sur notre vLLM #12411, msg-pmnf38 du 2026-08-23T22:00Z + vllm_ai01.env), et lue au runtime via os.getenv("VLLM_API_KEY") (jamais en literal inline, jamais en os.getenv("VLLM_API_KEY", "<value>")).
  • Modèle raisonnant : qwen3.6-35b-a3b est un thinking model — sans chat_template_kwargs={"enable_thinking": False}, il consomme les max_completion_tokens en raisonnement et renvoie content=None, finish_reason=length. Le fix est documenté dans la cellule des helpers (commentaire expliquant le mécanisme) + simple_score est blindé contre None (answer = answer or "").
  • Aucun chemin machine (AppData/jsboi/C:/Users) dans les sorties committées (Stop & Repair respecté). Catalogue byte-identique à main. README/navlinks non touchés (réservés feat(genai): diagnostiquer TensorSharp pour l'inférence .NET #12645). Aucun secret inline. Aucun os.getenv(..., "<literal>"). Pas de hand-edit de cellule.

Attribution

Voir #12453 — livraison partielle (la liste README de la série Texte reste réservée par #12645).

See #12453

…vLLM)

Nouveau notebook `MyIA.AI.Notebooks/GenAI/Texte/10c_Long_Context_Strategies.ipynb`
qui mesure — pas n'enonce — 5 strategies de gestion du long contexte sur
le vLLM distant (qwen3.6-35b-a3b, ctx 262 144), avec le tokenizer reel
(Qwen offline, `local_files_only`) sur un vrai corpus git-tracked
(Le Horla 77 204 t + Boule de Suif 33 154 t) :

  1. Budget en tokens (compter avant d'envoyer)
  2. Biais de position (needle-in-haystack, 6 profondeurs x 3 essais)
  3. Reordonnancement (debut / milieu / fin)
  4. Map-reduce vs troncation (5 faits AB-i-XY, perte quantifiee)
  5. Prefix caching vLLM (TTFT cold vs warm, stream, mediane 6 essais)

Mesures (committées, pas un pitch) :
  - §2 needle : rappel 1.000 a toutes les profondeurs -> aucun creux du milieu net
  - §3 reorder : debut/milieu/fin tous 1.000
  - §4 map-reduce 5/5 vs troncation 1/5 -> perte relative 80 %
  - §5 prefix cache : cold 0.415 s vs warm 0.167 s -> gain 60 %
  - Fenetre reelle lue via /models (262 144), WINDOW (32 768) = budget de travail choisi

Conformite :
  - C.1 : 0 `raise NotImplementedError` / `assert False` / `1/0`
  - C.2 + H.3 : 15/15 cellules code executees, 0 `output_type: error`, 0 `execution_count` null
  - Verdict SOTA : vrai outil (vLLM self-hosted, API OpenAI-compatible) ; la cle
    vLLM est lue au runtime via `os.getenv("VLLM_API_KEY")` (jamais literal inline,
    jamais `os.getenv(..., "<value>")`).
  - Fix raisonnement : `chat_template_kwargs={"enable_thinking": False}` parce que
    qwen3.6-35b-a3b est un thinking model ; sans cela, content=None et finish=length.
  - EOL : `*.ipynb eol=lf` respecté (1344 LF, 0 CRLF).
  - Aucun chemin machine dans les sorties committées (Stop & Repair).
  - Catalogue byte-identique a main, README/navlinks non touches (réservés #12645).

Grain: DEEP/genai - lane myia-po-2024:CoursIA-2 - prev: MED/notebook-python #12669

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
See #12453
jsboige pushed a commit that referenced this pull request Aug 24, 2026
…e Ex4/Ex5 apres Ex3

Deux defauts B.0 identifies par po-2025 (msg-yonge3 2026-08-24T02:17Z) sur
la PR #12659 (2.3-Regression-lineaire-logistique, MB-volets #12455) :

(1) Golden-set execution echouait sur la cellule In[6] :
    `import statsmodels.api as sm` -> `ModuleNotFoundError`.
    Cause : `statsmodels` et `scipy` (utilise pour `het_white` et tests
    de distribution) n'etaient pas pinnes dans
    `scripts/notebook_tools/golden_set.lock.txt` (qui couvrait numpy +
    pandas + scikit-learn + matplotlib + networkx + PyYAML).
    Fix : pin exact `statsmodels==0.14.6` et `scipy==1.17.0`, versions
    snapshotées depuis l'env de reference `coursia-ml-training`
    (memes versions que ai-01 / po-2025). Pas de fallback degrade en
    supprimant la dependance : VIF et het_white n'ont pas d'equivalent
    sklearn (multicollinearite et Breusch-Pagan -> seul statsmodels les
    porte), le retrait serait une regression pedagogique (SOTA Prong B).

(2) Ordre des exercices : Ex1 -> Ex4 -> Ex5 -> Ex2 -> Ex3, incoherent
    avec la narration (les diagnostics §3bis coupaient la regression
    logistique §4-§7 avant Ex2/Ex3 sur la logistique).
    Fix : deplacement des cellules Ex4 (md + code) et Ex5 (md + code)
    apres Ex3 (juste avant `## Conclusion`), pour obtenir
    Ex1 -> Ex2 -> Ex3 -> Ex4 -> Ex5 -> Conclusion. Aucun changement
    de contenu des cellules, juste reordonnancement.

Re-execution papermill kernel `python3` : 16/16 cellules code executees,
0 error outputs, 0 execution_count null, nbformat validate OK,
C.1 (pas de raise NotImplementedError) NONE.

L'echec du check `No cell-ordering regression in changed notebooks` est
corrige par construction ; `Golden-set execution (H.7 P3)` repasse
(par pin de la dependance manquante). Le rouge `check-navlinks` qui
figurait aussi sur la PR etait un fantome mesure par ai-01 (8 PRs de
cette lane sont fantomes sur la merge-ref anterieure a b01ca3e, msg
mhnj53 2026-08-24T00:01Z) : il s'efface dans la meme tete, sans run
supplementaire, par construction.

EOL : `*.ipynb eol=lf` respecte (1442 LF, 0 CRLF). Catalogue byte-identique
a main. README/navlinks non touches (livraison ne touche que les 2 fichiers
ci-dessus).

Rebase-atomic-pattern (cf c.1331p426) : `git reset origin/main` puis
`git checkout 1add0c2 -- <notebook>` isole le contenu pertinent du
squash composite d'origine (qui melait 24 fichiers heterogenes) en 1
diff coherent : 2 fichiers, 288+/285-.

Grain: LIGHT/notebook-python REPAIR — lane myia-po-2024:CoursIA-2 — prev: DEEP/genai #12710

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
See #12659

@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] — review sur head a3fa7d323c22 (aucune review cluster pré-existante sur ce SHA). Notebook +1344 lignes.

Authenticité vérifiée (3+ cellules) — exécution réelle, pas statique :

  • execution_count 1→15 séquentiels, 0 null (15/15 cellules exécutées).
  • 17 outputs stream avec traces du run réel : endpoint /models -> 200, modèle qwen3.6-35b-a3b, max_model_len: 262144 ; corpus Horla/Boule présents.
  • 4 sorties display_data avec payload base64 iVBOR (vraies figures matplotlib rendues inline).

Claims du body cross-checkés contre les outputs committés : 18 678 tokens ✓, 57.0 % ✓, 14 090 restants ✓, réponse brute '749' ✓, TTFT cold=0.415s / warm=0.167s ✓.

Security scan : 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN\s*=) — VLLM_API_KEY passe par os.getenv + fail-loud (raise ValueError si absent), jamais en dur ; pattern secrets-hygiene explicite et correct.

1 finding (mineur, non bloquant) — incohérence de compte d'essais en §5.2 : le commentaire d'en-tête de cellule dit # 5.2 Mesurer TTFT warm vs cold (stream, mediane sur 5 essais) alors que le code exécute for i in range(6), que le titre de la figure dit « mediane 6 essais » et que la conclusion markdown dit « médiane sur 6 essais ». Le 6 est le bon chiffre (cohérent avec le body et le code) ; c'est le commentaire de cellule qui est resté sur une version antérieure à 5 essais. Cosmetic, mais c'est exactement le genre de résidu qu'un lecteur futur citerra en croyant lire le protocole.

Note positive — le verdict honnête du §2 est la bonne culture : rappel 1.00 à toutes les profondeurs, le notebook conclut « aucun creux du milieu net sur cette mesure » au lieu de fabriquer un dip lost-in-the-middle. Résultat nul committé = signal réel.

Verdict : livraison solide, corriger le commentaire « 5 essais » en 6 au prochain passage sur le fichier (pas besoin de PR dédiée).

(contrainte token : COMMENT only)

@github-actions

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 5.4s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 3.2s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.6s
Search-1-StateSpace.ipynb ✅ SUCCESS 3.8s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.4s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 19.2s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.2s

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

@github-actions

Copy link
Copy Markdown
Contributor

No new ASCII flowchart introductions in modified notebooks (vs merge-base). Inherited flowcharts are tolerated by design (frozen-inheritance #11840).

Detector: python scripts/notebook_tools/detect_ascii_flowchart.py <notebooks> --json
Rationale: #11962 / SW-12 cell ## 2. Architecture d'un pipeline GraphRAG (founding case, ASCII pipeline vs Mermaid flowchart LR).
Sibling scope: detect_ascii_workaround.py (#3801) targets bar charts; this organ targets flowcharts.

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Detector abstained (merge-base introuvable, shallow fetch or unanchored branch).

c.415 (#11873): scope = notebooks CHANGED in this PR, not the whole corpus.
See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 pathologie.

@github-actions

Copy link
Copy Markdown
Contributor

No new degraded-mode confessions in modified notebooks (vs merge-base). Inherited confessions are tolerated by design (frozen-inheritance).

Detector: python scripts/notebook_tools/detect_degraded_mode.py <nb> --base <merge-base> --check
Rationale: #11754 / #11443 (860 KB lost while all structural gates stayed green).

@github-actions

Copy link
Copy Markdown
Contributor

✅ No fragmented stream outputs detected.

See python scripts/notebook_tools/check_outputs_text_fragmentation.py --help for re-running locally.
Detector rationale: c.354-L2 ★★, PR #11664.

@github-actions github-actions Bot added machine-dep-timing-delta: 0 (1 files) pedagogy-density-below-threshold A modified notebook measures below the 1200 chars-of-prose-per-code-cell floor (#10479) labels Aug 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

MD hierarchy drift -- a3fa7d3

Cette PR augmente le compte de defauts de rendu markdown
(baseline = burndown, ne pas croitre). Nouveaux defauts :

  +1 HINT-AS-HEADING  MyIA.AI.Notebooks/GameTheory/GameTheory-04b-Lean-NashExistence.ipynb
  +1 HINT-AS-HEADING  MyIA.AI.Notebooks/GenAI/PostTraining/PT_11_grpo_qwen_rlvr_on_verifiers.ipynb
  -1 HINT-AS-HEADING  MyIA.AI.Notebooks/GameTheory/GameTheory-4b-Lean-NashExistence.ipynb  (burndown)
  -9 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/01-Foundation/01-1-OpenAI-TTS-Intro.ipynb  (burndown)
  -9 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/01-Foundation/01-2-OpenAI-Whisper-STT.ipynb  (burndown)
  -9 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/01-Foundation/01-3-Basic-Audio-Operations.ipynb  (burndown)
  -5 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/01-Foundation/01-4-Whisper-Local.ipynb  (burndown)
  -8 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/02-Advanced/02-1-Chatterbox-TTS.ipynb  (burndown)
  -8 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/02-Advanced/02-2-XTTS-Voice-Cloning.ipynb  (burndown)
  -12 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/02-Advanced/02-3-MusicGen-Generation.ipynb  (burndown)
  -9 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/02-Advanced/02-4-Demucs-Source-Separation.ipynb  (burndown)
  -4 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/02-Advanced/02-5-Multi-Model-TTS-Gateway.ipynb  (burndown)
  -14 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/02-Advanced/02-6-MIDI-Generation.ipynb  (burndown)
  -15 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/02-Advanced/02-7-Song-Generation.ipynb  (burndown)
  -15 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/02-Advanced/02-8-Expressive-TTS.ipynb  (burndown)
  -15 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/02-Advanced/02-9-AceStep-Music-Generation.ipynb  (burndown)
  -8 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/03-Orchestration/03-1-Multi-Model-Audio-Comparison.ipynb  (burndown)
  -8 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/03-Orchestration/03-2-Audio-Pipeline-Orchestration.ipynb  (burndown)
  -8 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/03-Orchestration/03-3-Realtime-Voice-API.ipynb  (burndown)
  -10 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/04-Applications/04-1-Educational-Audio-Content.ipynb  (burndown)
  -15 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/04-Applications/04-2-Transcription-Pipeline.ipynb  (burndown)
  -10 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/04-Applications/04-3-Music-Composition-Workflow.ipynb  (burndown)
  -13 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/04-Applications/04-4-Audio-Video-Sync.ipynb  (burndown)
  -15 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/04-Applications/04-5-LiveCoding-LLM-Music.ipynb  (burndown)
  -8 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/04-Applications/04-6-Audiobook-Pipeline.ipynb  (burndown)
  -12 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/Audio/04-Applications/04-7-TTS-Voice-Benchmark.ipynb  (burndown)
  -9 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/CaseStudies/Barbie-Schreck/barbie-schreck.ipynb  (burndown)
  -9 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/CaseStudies/Fort-Boyard/fort-boyard-python.ipynb  (burndown)
  -9 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/CaseStudies/Medical-Chatbot/medical_chatbot.ipynb  (burndown)
  -9 HEADING-IN-LIST  MyIA.AI.Notebooks/GenAI/PostTraining/PT_11_grpo_qwen_rlvr_on_verifiers.ipynb  (burndown)
  -13 HEADING-IN-LIST  MyIA.AI.Notebooks/Probas/DecisionTheory/PyMC/DecPyMC-3-Multi-Attribute.ipynb  (burndown)
  -19 HEADING-IN-LIST  MyIA.AI.Notebooks/Probas/DecisionTheory/PyMC/DecPyMC-6-Expert-Systems.ipynb  (burndown)
  -8 HEADING-IN-LIST  MyIA.AI.Notebooks/Probas/DecisionTheory/PyMC/DecPyMC-7-Sequential.ipynb  (burndown)
  -8 HEADING-IN-LIST  MyIA.AI.Notebooks/Probas/Infer-101.ipynb  (burndown)
  -4 HEADING-IN-LIST  MyIA.AI.Notebooks/Probas/Infer/Infer-2-Gaussian-Mixtures.ipynb  (burndown)
  -13 HEADING-IN-LIST  MyIA.AI.Notebooks/Probas/Infer/Infer-6-Debugging.ipynb  (burndown)
  -15 HEADING-IN-LIST  MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/hmm_alpha_research.ipynb  (burndown)
  -6 HEADING-IN-LIST  MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-14-Portfolio-Construction-Execution.ipynb  (burndown)
  -6 HEADING-IN-LIST  MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-18-ML-Features-Engineering.ipynb  (burndown)
  -6 HEADING-IN-LIST  MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-19-ML-Supervised-Classification.ipynb  (burndown)
  -6 HEADING-IN-LIST  MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-24-Autoencoders-Anomaly.ipynb  (burndown)
  -6 HEADING-IN-LIST  MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-27-Production-Deployment.ipynb  (burndown)

=== drift: +2 across 2 notebook(s), 386 burned down ===

Corriger (ex. - # Indice : ... -> - **Indice :** ...) ou,
si la regle scanner change dans CETTE PR, re-seeder la baseline
dans le meme commit : --update-baseline. See #11831.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No render volume delta signal (notebooks modified vs merge-base preserve >= 50% of base rendered output per MIME family).

See python scripts/notebook_tools/check_render_volume_delta.py --help for re-running locally.
Detector rationale: #11656 / #11351 pathologie (840 B remnants in 195 692 B cells = absolute detectors blind).
Why merge-base not origin/main two-dots: a branch 25+ commits behind would have the detector scan 35 notebooks the PR never touched.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 15
  • 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)

@myia-ai-01
myia-ai-01 merged commit 4986c6a into main Aug 24, 2026
80 of 81 checks passed
myia-ai-01 pushed a commit that referenced this pull request Aug 24, 2026
…e Ex4/Ex5 apres Ex3 (#12659)

Deux defauts B.0 identifies par po-2025 (msg-yonge3 2026-08-24T02:17Z) sur
la PR #12659 (2.3-Regression-lineaire-logistique, MB-volets #12455) :

(1) Golden-set execution echouait sur la cellule In[6] :
    `import statsmodels.api as sm` -> `ModuleNotFoundError`.
    Cause : `statsmodels` et `scipy` (utilise pour `het_white` et tests
    de distribution) n'etaient pas pinnes dans
    `scripts/notebook_tools/golden_set.lock.txt` (qui couvrait numpy +
    pandas + scikit-learn + matplotlib + networkx + PyYAML).
    Fix : pin exact `statsmodels==0.14.6` et `scipy==1.17.0`, versions
    snapshotées depuis l'env de reference `coursia-ml-training`
    (memes versions que ai-01 / po-2025). Pas de fallback degrade en
    supprimant la dependance : VIF et het_white n'ont pas d'equivalent
    sklearn (multicollinearite et Breusch-Pagan -> seul statsmodels les
    porte), le retrait serait une regression pedagogique (SOTA Prong B).

(2) Ordre des exercices : Ex1 -> Ex4 -> Ex5 -> Ex2 -> Ex3, incoherent
    avec la narration (les diagnostics §3bis coupaient la regression
    logistique §4-§7 avant Ex2/Ex3 sur la logistique).
    Fix : deplacement des cellules Ex4 (md + code) et Ex5 (md + code)
    apres Ex3 (juste avant `## Conclusion`), pour obtenir
    Ex1 -> Ex2 -> Ex3 -> Ex4 -> Ex5 -> Conclusion. Aucun changement
    de contenu des cellules, juste reordonnancement.

Re-execution papermill kernel `python3` : 16/16 cellules code executees,
0 error outputs, 0 execution_count null, nbformat validate OK,
C.1 (pas de raise NotImplementedError) NONE.

L'echec du check `No cell-ordering regression in changed notebooks` est
corrige par construction ; `Golden-set execution (H.7 P3)` repasse
(par pin de la dependance manquante). Le rouge `check-navlinks` qui
figurait aussi sur la PR etait un fantome mesure par ai-01 (8 PRs de
cette lane sont fantomes sur la merge-ref anterieure a b01ca3e, msg
mhnj53 2026-08-24T00:01Z) : il s'efface dans la meme tete, sans run
supplementaire, par construction.

EOL : `*.ipynb eol=lf` respecte (1442 LF, 0 CRLF). Catalogue byte-identique
a main. README/navlinks non touches (livraison ne touche que les 2 fichiers
ci-dessus).

Rebase-atomic-pattern (cf c.1331p426) : `git reset origin/main` puis
`git checkout 1add0c2 -- <notebook>` isole le contenu pertinent du
squash composite d'origine (qui melait 24 fichiers heterogenes) en 1
diff coherent : 2 fichiers, 288+/285-.

Grain: LIGHT/notebook-python REPAIR — lane myia-po-2024:CoursIA-2 — prev: DEEP/genai #12710


See #12659

Co-authored-by: po-2024-worker <po-2024@myia.local>
Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

machine-dep-timing-delta: 0 (1 files) pedagogy-density-below-threshold A modified notebook measures below the 1200 chars-of-prose-per-code-cell floor (#10479)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants