Skip to content

Add(genai,#18211): notebook 9c Routage et Repli — multi-fournisseurs (tranche 1/3) - #18260

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/18211-production-exploitation
Sep 29, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/18211-production-exploitation

Conversation

@jsboige

@jsboige jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/genai — lane myia-po-2024:CoursIA — prev: LIGHT/docs #17795

Tranche 1/3 de #18211 — notebook 9c : Routage et Repli (multi-fournisseurs)

See #18211 (livraison partielle : notebook 1 sur 3 — les 9d caches et 9e exploitation suivent dans des PR séparées, claim amendé en conséquence : cid 5872535846).

Ce que le notebook fait

Nouveau notebook 9c_Production_Routage_Repli.ipynb (41 cellules, 19 code), suite multi-fournisseurs de 9_Production_Patterns :

  1. Terrain réel lu, jamais configuré — proxy multi-fournisseurs (OpenRouter /v1/models, catalogue + prix réels) et inférence locale (Ollama 127.0.0.1:11434/v1), tous deux sondés en lecture seule au démarrage.
  2. Banque de 100 questions à réponse vérifiable — générateur arithmétique français à 5 types (addition, soustraction, produit, pourcentage, deux étapes), graine fixée 20260928, note par égalité numérique stricte (aucun juge).
  3. Baselines mesurées — local qwen2.5:7b vs distant google/gemma-4-31b-it:free sur la même banque : exactitude globale + par type + latence.
  4. Routage par politique — coût × difficulté × budget, prix lus du catalogue (jamais codés en dur), répartition des destinations mesurée.
  5. Cascade petit→grand avec calibration — la phase de calibration mesure d'abord la confiance déclarée du petit modèle (table croisée confiance × exactitude, taux de faux succès = réponses fausses à confiance ≥ 0.8), le seuil est ensuite choisi depuis cette table.
  6. Repli fournisseur sur panne simulée — chaîne proxy-mort → proxy réel → local, sur 30 questions : taux de service, surcoût de latence de la tentative morte.
  7. Synthèse — table exactitude / latence / coût USD (prix du catalogue, tokens estimés) avec limites honnêtes déclarées.

Exécution réelle (preuves)

  • Papermill local python3, end-to-end : papermill 09c_Production_Routage_Repli.ipynb 09c_output.ipynb --kernel python3 — sortie commitée avec execution_count sur toutes les cellules code.
  • Contrainte de terrain mesurée et corrigée : première exécution tuée par 429 upstream Google AI Studio (quota gemma-4-31b : 30 req/min). Correction pédagogique assumée : delai_min=2.5 s (24/min < quota) dans poser() + backoff 429 conscient (20 s × tentative) — le throttle fait partie de la leçon (le terrain gratuit a ses règles).
  • Chiffres de prose (exactitudes, latences, quotas) : tous issus de l'exécution commitée, la banque étant à graine fixe.

Conformité

Livrables

  • MyIA.AI.Notebooks/GenAI/Texte/09c_Production_Routage_Repli.ipynb (nouveau, exécuté de bout en bout, outputs commités)

Mesures de l'exécution commitée (n=100, graine 20260928, température 0)

Stratégie Exactitude Latence moy. Coût USD (catalogue)
local qwen2.5:7b seul 65,0 % 0,19 s 0
distant gemma-4-31b:free seul 88,0 % 1,34 s 0 (gratuit)
routage politique 91,0 % 1,06 s 40 questions routées distant
cascade (seuil 0,6) 79,0 % 0,32 s 0 escalade

Lectures honnêtes portées par le notebook : le routeur bat les deux baselines (40 questions difficiles → distant à 100 %, 60 faciles → local à 85 %) ; la cascade dégénère (0/100 escalades) parce que le petit modèle déclare une confiance de 1,00 en permanence — faux succès totaux, la table de calibration le montre et le seuil est mort-né sur ce terrain ; le format contraint REPONSE: fait à lui seul gagner 14 points au local (79 % vs 65 %) ; le repli sur panne simulée sert 30/30 requêtes (27 exactes) au prix d'une tentative morte de 7,45 s en moyenne.

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

🤖 Generated with Claude Code

… (tranche 1/3)

Nouveau notebook 09c_Production_Routage_Repli.ipynb : banque de 100 questions
a reponse verifiable, routage par politique (91.0% > 88.0% > 65.0%), cascade
avec calibration mesuree (0/100 escalades -- confiance declaree 1.00 en
permanence), repli fournisseur sur panne simulee (30/30 servies, tentative
morte 7.45 s). Terrain reel : OpenRouter + Ollama local en lecture seule,
quota gemma-4-31b 30 req/min mesure et respecte par throttle.

See #18211 (tranche 1 sur 3 ; 9d caches et 9e exploitation suivent)

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

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

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 commented Sep 28, 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 5.5s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 5.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 8.7s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.9s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.9s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.0s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 20.6s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.8s

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

@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Sep 28, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2024:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-28) :

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

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

…_entry resolue)

Le garde check-nav-chain refusait la tete precedente : 09c sans lien entrant
(orphan_entry). Cellule ## Navigation canonique (#17277) en fin de 09b
(Suivant : 9c) et de 09c (Suivant : 10 + Sommaire). La forme mutuelle
Precedent/Suivant est ecartee a dessein : 09b est un orphelin PRE-EXISTANT de
la serie (baseline) -- la paire mutuelle 09b<->09c creait un independent_chain.
Verifie localement : 0 NEW finding vs baseline (RC=0).

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

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Verdict : APPROVE — lecture intégrale du notebook (42 cellules, 19 code, exec 1→19 séquentiel, outputs tous committés).

Vérifié firsthand :

  • Chiffres du body tous présents dans les outputs committés : local 65,0 %/0,19 s ; gemma 88,0 %/1,34 s ; routeur 91,0 % (60 local @85 % + 40 distant @100 %) ; cascade 79,0 % avec 0/100 escalades ; calibration faux succès 21/21, confiance moyenne 1,00/1,00 ; repli 30/30 servies, 27 exactes, tentative morte 7,45 s. Rien de fabriqué.
  • Banque reproductible : graine 20260928, 5 générateurs × 20 questions, réponse calculée par le générateur lui-même, note par égalité numérique stricte — aucun juge.
  • Sécurité : clés via load_dotenv, jamais affichées (uniquement présente/absente). Scan du diff clean.
  • C.1 : 3 exercices stubs (TODO/Indices/Étapes, resultat_exN = None), zéro narration de solution.
  • Gates #17040 : une lecture par cellule lue, placée immédiatement après ; pas de prose empilée, pas de header dupliqué.
  • README différé : claim vérifiée — #18243 et #18246 sont bien OPEN sur GenAI/Texte/README.md ; aucun total mis à jour à la main (règle catalogue #17029 respectée).
  • 09b : uniquement la cellule footer nav « Suivant : 9c » ajoutée — cohérente avec la chaîne.
  • CI head : 28 success / 2 neutral (advisory + lane ombre).
  • Lecture honnête de la cascade dégénérée (confiance 1.00 en permanence → seuil mort-né) : assumée pédagogiquement, c'est une force.

Nits (non bloquants) :

  • Body annonce « 41 cellules » → 42 réelles.
  • Path("..") / ".env" : chemin relatif fixe, plus fragile que la recherche parentale du sibling 09 (Papermill change le cwd) — l'exécution committée passe, mais un lancement depuis la racine du repo afficherait « ABSENTE ».
  • Footer « Série GenAI Texte | Suivant | Sommaire » n'existe qu'en 09b/09c — convention neuve par rapport à la navigation de tête utilisée par le reste de la série.

[Hermes hermes-pr-review, cycle :18 28/09, host f6be46d1b7a3, sig=c58a3b86]

@jsboige

jsboige commented Sep 29, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18260
head: fcf7c23
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: ef86153f8ecce4a2d3ea79e4d7df8000ec28b302be9558c7616d142c4a407b93
diff-files: 2
diff-additions: 1805
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Secrétaire vérificateur (myia-po-2026:CoursIA-3), 29/09 00:52Z — Dossier tiers READY à tête exacte fcf7c23e…. Vague oldest-first.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants