Repository navigation
feat(genai,#18574): volet PDF sur l'exemple guide 1 de Texte/06 -- reportlab enfin servi - #19642
Conversation
…portlab enfin servi Seconde passe item 6 : le carnet s'intitule "PDF et Web Search" mais le PDF n'y etait jamais exerce -- reportlab installe en cellule 2, jamais importe. Volet purement additif apres la resolution de l'etudiante : meme tableau de ventes (sa variable `ventes`), compose en vrai PDF d'une page A4, envoye nativement a l'API en piece jointe (type: file). Cellule 6 : le faux "(methode utilisee ici)" decrit desormais la voie reellement exercee. Lecture re-alignee sur le run commite : lectures identiques sur les faits, 971 tokens (image) vs 1157 (PDF, +19 %), projection mai en plus. Run canonique notebook_tools execute --batch-mode : SUCCESS, 18/18 cellules, 0 erreur, sorties commitees. Temoin hors ligne : pypdf extrait du PDF le texte exact qui y a ete compose. Kernel 3.10.11 -> 3.13.7 : transition pre-acceptee (CANONICAL_LANGUAGE_TRANSITIONS, #19181). Cellules de l'etudiante (10, 11) byte-identiques, verifiees par assertion. See #18574 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
[ADJOINT PREFLIGHT] |
Grain: MED/notebook-python — lane myia-po-2024:CoursIA — prev: MED/notebook-python #19639
Objet
Seconde passe
#18574(item 6) surGenAI/Texte/06_PDF_Web_Search.ipynb, exemple guidé 1 (contribution étudiante de Clarisse DEL CASTILLO, PR #18567).Verdict :
À MUSCLER. L'exemple est sain en lui-même — mais le carnet s'intitule « PDF et Web Search », et le PDF n'y est jamais exercé :reportlabest installé dès la cellule 2 et n'est jamais importé. La cellule 6 va jusqu'à annoncer « Conversion PDF → Image : … (méthode utilisée ici) », ce qui est faux — aucune conversion n'a lieu, une image est dessinée directement avec Pillow.Ce que l'exemple faisait, et l'organe manquant
La résolution de l'étudiante crée une image PIL avec un tableau de ventes (Janvier 120k → Avril 180k EUR), l'envoie à l'API Vision, affiche le résultat. La Lecture était déjà honnête sur la limite (« les valeurs sont écrites dans l'image : lecture de texte, pas de graphique »).
Ce qui manque est l'organe que le titre du carnet promet : un document PDF, source documentaire réelle. La cellule 6 classait le support natif des PDF comme option « plus complexe » et ne l'exerçait jamais.
Le geste : purement additif
pdfws-eg1-pdf-volet, insérée après la cellule d'affichage de l'étudiante) : le même tableau — on réutilise sa variableventes— composé en vrai PDF d'une page A4 avecreportlab(première utilisation de la dépendance installée), envoyé nativement à l'API comme partie de contenutype: "file". Même question que l'image : la lecture est-elle aussi fiable sur un PDF ?Ce que l'exécution établit
Les deux lectures sont identiques sur les faits — quatre valeurs exactes des deux côtés, mêmes variations (+25/+15/+20 kEUR), même +50 % total, même CAGR ≈ 14,5 %/mois. Deux différences mesurées :
La prétention de la section 1 (« l'API n'accepte pas les PDF directement ») est réfutée par l'exécution.
Témoins hors ligne (avant tout appel payant)
%PDF-1.3,%%EOF), et pypdf en extrait le texte exact — la vérité terrain de la lecture du modèle ne dépend pas de lui.type: "file"avant de lancer le run complet — éviter de brûler 18 cellules sur un 400 prévisible.Gates locales
check_output_failure_text.py origin/main1 changed notebooks | 0 regressed, RC=0check_c2_compliance.py --path <carnet>1/1 notebooks compliant — All clear!notebook_tools.py execute --batch-mode)3.10.11 → 3.13.7— transition pré-acceptée (CANONICAL_LANGUAGE_TRANSITIONS, #19181, cas fondateur cité mot pour mot)output-failuresur ce carnetscansans et avec base : 0/0/0) — le piège #19638 ne s'y applique pasSee #18574 — l'item 6 couvre dix carnets ; celui-ci est le deuxième livré par cette lane (après #19639). Résiduel noté : la section 3 (« Combiner PDF et Web Search ») promet des « rapports PDF » et travaille sur l'image — tranche séparée si le coordinateur la veut.
🤖 Generated with Claude Code