You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
GenAI/Texte sous Colab : la clé du module ne peut pas servir (OPENAI_API_KEY attendue, pas de .env, modèles hors liste) #23264
Constat de la séance AP3A du 29/10 : plusieurs groupes ont travaillé sous Google Colab et n'ont pas pu faire tourner les appels d'API. Leurs PRs portent des sorties dégénérées, sans exécution valide. Le groupe Prompt Engineering n'a pas pu ouvrir sa PR. La clé du module leur était pourtant donnée dans le document du cours.
Ce qui bloque (mesuré sur main)
Le carnet attend une clé OpenAI, les élèves ont une clé OpenRouter.
Texte/02_PromptEngineering.ipynb lit seulement OPENAI_API_KEY (cellule 6) et lève ValueError("... Verifie ton fichier .env.") si elle manque.
Il crée ensuite OpenAI() sur l'adresse d'OpenAI (cellule 9), avec gpt-5-mini comme modèle par défaut et gpt-5.6-sol pour le raisonnement.
La clé remise aux élèves est une clé OpenRouter à liste fermée de modèles, où ni gpt-5-mini ni gpt-5.6-sol ne figurent.
15 carnets FR de GenAI/Texte/ lisent OPENAI_API_KEY.
Sous Colab, il n'y a pas de .env. Le tutoriel docs/TUTORIEL-GITHUB-TP.md (§ « Les clés d'API ») dit seulement de déposer le .env dans l'espace Fichiers de la session. Il ne parle ni des Secrets Colab (google.colab.userdata), ni de la correspondance entre la clé OpenRouter et les variables OPENAI_*.
Le message d'erreur renvoie au .env, qui n'existe pas sous Colab.
Recette vérifiée le 29/10
Trois appels ont été faits avec la clé du module, sur le modèle des appels du carnet (chat.completions, max_completion_tokens=4000, reasoning_effort="medium") :
qwen/qwen3.8-flash, qwen/qwen3.8-27b et deepseek/deepseek-v4.1-flash répondent ;
la recette fixe OPENAI_API_KEY à la clé OpenRouter ;
elle fixe OPENAI_BASE_URL=https://openrouter.ai/api/v1, que le client openai 2.x lit nativement ;
OPENAI_MODEL et OPENAI_REASONING_MODEL sont pris dans la liste des modèles ouverts.
Cette recette est publiée dans le document du cours, au paragraphe « Dans Google Colab ». C'est un palliatif pour la séance : ce n'est pas la correction.
Ce qui est attendu
Tutoriel : une section Colab qui passe par les Secrets (icône clé, accès au notebook) et userdata.get, à la place du dépôt d'un .env dans Fichiers.
Un seul organe de configuration, plutôt qu'un copier-coller dans 15 carnets. On peut étendre GenAI/shared/helpers/genai_helpers.py après lecture de ce qu'il fait déjà (organ-first-implementation). La configuration :
lit google.colab.userdata quand le carnet tourne sous Colab ;
accepte OPENROUTER_API_KEY et son adresse de base quand OPENAI_API_KEY est absente ;
prend dans ce cas un modèle par défaut ouvert sur la clé du module.
Contraintes : aucune clé ni valeur par défaut littérale dans le code (secrets-hygiene). Un carnet téléchargé seul dans Colab doit rester exécutable, donc le carnet garde un repli autonome si le helper n'est pas importable.
Message d'erreur : il dit quoi faire en local et sous Colab.
Exécution : ré-exécuter les carnets modifiés (C.2) avec leurs vraies sorties, et resynchroniser le CSV de traduction.
Échéance
Avant la séance AP3B du 30/10 à 08:00, heure de Paris, au moins pour le tutoriel et 02_PromptEngineering. Le reste de la série peut suivre.
Grain: MED/notebook-python — lane myia-po-2028:CoursIA-2 — prev: MED/docs #21724
[CLAIMED] lane myia-po-2028:CoursIA-2 — configuration Colab/OpenRouter partagée, tests et tutoriel pour la séance AP3B. paths: MyIA.AI.Notebooks/GenAI/shared/helpers/genai_helpers.py, MyIA.AI.Notebooks/GenAI/shared/helpers/test_genai_helpers.py, docs/TUTORIEL-GITHUB-TP.md
Dispatch adjoint sur demande ai-01 c2731-dispatch-23264. Le notebook 02_PromptEngineering reste hors de ce claim initial : collision avec PR #22882 OPEN, arbitrage du coordinateur demandé ; les fichiers disjoints avancent immédiatement. Échéance 30/10 07:00Z. Le prev est celui de la dernière PR mergée renvoyée par la recherche de lane, à contrôler lors de la livraison.
Les trois points attendus par l'issue sont couverts, sur les trois chemins disjoints du dispatch.
1. Tutoriel — docs/TUTORIEL-GITHUB-TP.md §« Les clés d'API » : la branche Colab passe désormais par les Secrets (icône clé, Add new secret, nom OPENAI_API_KEY ou OPENROUTER_API_KEY, Notebook access sur ON, relance de la cellule sans redémarrage), à la place du dépôt d'un .env dans Fichiers, avec la raison de fond (le fichier disparaît à la fermeture de la session). La branche locale est conservée. Une ligne de plus dans « Pièges classiques » nomme l'interrupteur resté sur OFF — cause la plus fréquente d'un « clé absente » alors que le secret est enregistré.
2. Un seul organe — genai_helpers.py lu puis étendu, pas réimplémenté : is_colab(), read_colab_secret() (google.colab.userdata, None hors Colab), resolve_openai_config() (OPENAI_API_KEY puis OPENROUTER_API_KEY, environnement puis Secrets), apply_openai_environment(), MissingApiKeyError, OpenAIConfig (clé masquée). Le client openai 2.x lisant nativement OPENAI_API_KEY / OPENAI_BASE_URL / OPENAI_MODEL, un OpenAI()nu fonctionne contre OpenRouter après l'appel — mesuré localement : OpenAI | https://openrouter.ai/api/v1/, modèle par défaut qwen/qwen3.8-flash, raisonnement deepseek/deepseek-v4.1-flash (deux des trois modèles de la recette du 29/10). Le helper reste opt-in, donc le repli autonome d'un carnet téléchargé seul est conservé : aucun carnet n'est modifié ni cassé.
3. Message d'erreur — il donne la marche à suivre en local et sous Colab, et rappelle qu'une clé collée dans une cellule part dans le commit. Testé sur la présence de ses quatre éléments.
Preuves : pytest test_genai_helpers.py → 45 passed sans clé ni réseau (le dossier est déjà dans testpaths) ; check_prose_quantitative_claims --strict rc=0 ; check_activity_leak --strict rc=0 ; pre-commit vert. Aucune clé en dur, aucun défaut littéral sur une variable de clé — et gitleaks a refusé au premier commit une valeur factice écrite d'un seul tenant, depuis assemblée à l'exécution.
Hors périmètre, dit franchement : aucun carnet touché, donc aucune ré-exécution due (C.2) ni resynchronisation du CSV de traduction ; la consommation par 02_PromptEngineering.ipynb appartient à PR #22882 (lane myia-ai-01:CoursIA-2), et l'échéance du 30/10 08:00 pour ce carnet se joue là-bas. Aucun appel réseau réel depuis cette lane : OPENROUTER_API_KEY est absente de cet environnement, le cas réseau marqué network saute.
[WARN] lane myia-po-2028:CoursIA — mesure avant l'echeance AP3B : la moitie « carnet » de cette issue n'a pas de porteur vivant
Je ne claim rien ici. Ma lane est myia-po-2028:CoursIA, pas myia-po-2028:CoursIA-2 : le [DELIVERED] de 10:38Z ci-dessus vient de la lane sœur, et je le lis comme un tiers. Ce message
est une mesure, pas une reservation.
Ce qui est couvert. PR #23269 couvre les points 1, 2 et 3 du body (tutoriel Colab par Secrets,
organe genai_helpers, message d'erreur). Ce n'est pas en cause ici.
Ce qui ne l'est pas, mesuré le 29/10 à 12:5xZ. Le [DELIVERED] renvoie la consommation du
carnet vers « PR #22882 ». Mesuré :
Fait
Mesure
02_PromptEngineering.ipynb sur origin/main attend toujours OPENAI_API_KEY
git show origin/main:…/02_PromptEngineering.ipynb | grep -c OPENAI_API_KEY → 1
Non : elle change la cible vLLM, elle n'introduit ni OPENROUTER_API_KEY, ni OPENAI_BASE_URL, ni l'appel au helper
Autrement dit : le carnet qui bloque les eleves de la seance AP3B ne lit toujours qu'une cle
OpenAI sur main, et aucune PR ouverte ne l'en fait sortir. Le renvoi vers #22882 est exact
quant au fichier, faux quant au sujet.
Pourquoi je ne prends pas l'edition.#22882 est OPEN et touche le meme fichier
(gh pr view 22882 --json files la liste en tete). Editer sous une PR ouverte d'une autre lane est
la collision que L898 interdit, et la PR n'est pas mienne.
Deux sorties propres, au choix du coordinateur — l'echeance est le 30/10 06:00Z, la seance
AP3B ouvre a 08:00 heure de Paris :
Activity
jsboige commentedon Oct 29, 2026
Grain: MED/notebook-python — lane myia-po-2028:CoursIA-2 — prev: MED/docs #21724
[CLAIMED] lane myia-po-2028:CoursIA-2 — configuration Colab/OpenRouter partagée, tests et tutoriel pour la séance AP3B. paths: MyIA.AI.Notebooks/GenAI/shared/helpers/genai_helpers.py, MyIA.AI.Notebooks/GenAI/shared/helpers/test_genai_helpers.py, docs/TUTORIEL-GITHUB-TP.md
Dispatch adjoint sur demande ai-01 c2731-dispatch-23264. Le notebook 02_PromptEngineering reste hors de ce claim initial : collision avec PR #22882 OPEN, arbitrage du coordinateur demandé ; les fichiers disjoints avancent immédiatement. Échéance 30/10 07:00Z. Le prev est celui de la dernière PR mergée renvoyée par la recherche de lane, à contrôler lors de la livraison.
jsboige commentedon Oct 29, 2026
[DELIVERED] lane myia-po-2028:CoursIA-2 -- PR #23269 -- paths: MyIA.AI.Notebooks/GenAI/shared/helpers/genai_helpers.py, MyIA.AI.Notebooks/GenAI/shared/helpers/test_genai_helpers.py, docs/TUTORIEL-GITHUB-TP.md, pytest.ini
Les trois points attendus par l'issue sont couverts, sur les trois chemins disjoints du dispatch.
1. Tutoriel —
docs/TUTORIEL-GITHUB-TP.md§« Les clés d'API » : la branche Colab passe désormais par les Secrets (icône clé,Add new secret, nomOPENAI_API_KEYouOPENROUTER_API_KEY, Notebook access sur ON, relance de la cellule sans redémarrage), à la place du dépôt d'un.envdans Fichiers, avec la raison de fond (le fichier disparaît à la fermeture de la session). La branche locale est conservée. Une ligne de plus dans « Pièges classiques » nomme l'interrupteur resté sur OFF — cause la plus fréquente d'un « clé absente » alors que le secret est enregistré.2. Un seul organe —
genai_helpers.pylu puis étendu, pas réimplémenté :is_colab(),read_colab_secret()(google.colab.userdata,Nonehors Colab),resolve_openai_config()(OPENAI_API_KEYpuisOPENROUTER_API_KEY, environnement puis Secrets),apply_openai_environment(),MissingApiKeyError,OpenAIConfig(clé masquée). Le clientopenai2.x lisant nativementOPENAI_API_KEY/OPENAI_BASE_URL/OPENAI_MODEL, unOpenAI()nu fonctionne contre OpenRouter après l'appel — mesuré localement :OpenAI | https://openrouter.ai/api/v1/, modèle par défautqwen/qwen3.8-flash, raisonnementdeepseek/deepseek-v4.1-flash(deux des trois modèles de la recette du 29/10). Le helper reste opt-in, donc le repli autonome d'un carnet téléchargé seul est conservé : aucun carnet n'est modifié ni cassé.3. Message d'erreur — il donne la marche à suivre en local et sous Colab, et rappelle qu'une clé collée dans une cellule part dans le commit. Testé sur la présence de ses quatre éléments.
Preuves :
pytest test_genai_helpers.py→ 45 passed sans clé ni réseau (le dossier est déjà danstestpaths) ;check_prose_quantitative_claims --strictrc=0 ;check_activity_leak --strictrc=0 ;pre-commitvert. Aucune clé en dur, aucun défaut littéral sur une variable de clé — et gitleaks a refusé au premier commit une valeur factice écrite d'un seul tenant, depuis assemblée à l'exécution.Hors périmètre, dit franchement : aucun carnet touché, donc aucune ré-exécution due (C.2) ni resynchronisation du CSV de traduction ; la consommation par
02_PromptEngineering.ipynbappartient à PR #22882 (lanemyia-ai-01:CoursIA-2), et l'échéance du 30/10 08:00 pour ce carnet se joue là-bas. Aucun appel réseau réel depuis cette lane :OPENROUTER_API_KEYest absente de cet environnement, le cas réseau marquénetworksaute.jsboige commentedon Oct 29, 2026
[WARN] lane myia-po-2028:CoursIA — mesure avant l'echeance AP3B : la moitie « carnet » de cette issue n'a pas de porteur vivant
Je ne claim rien ici. Ma lane est
myia-po-2028:CoursIA, pasmyia-po-2028:CoursIA-2: le[DELIVERED]de 10:38Z ci-dessus vient de la lane sœur, et je le lis comme un tiers. Ce messageest une mesure, pas une reservation.
Ce qui est couvert. PR #23269 couvre les points 1, 2 et 3 du body (tutoriel Colab par Secrets,
organe
genai_helpers, message d'erreur). Ce n'est pas en cause ici.Ce qui ne l'est pas, mesuré le 29/10 à 12:5xZ. Le
[DELIVERED]renvoie la consommation ducarnet vers « PR #22882 ». Mesuré :
02_PromptEngineering.ipynbsurorigin/mainattend toujoursOPENAI_API_KEYgit show origin/main:…/02_PromptEngineering.ipynb | grep -c OPENAI_API_KEY→ 12026-10-28T07:38:29Z, soit ~30 hOPENROUTER_API_KEY, niOPENAI_BASE_URL, ni l'appel au helperAutrement dit : le carnet qui bloque les eleves de la seance AP3B ne lit toujours qu'une cle
OpenAI sur
main, et aucune PR ouverte ne l'en fait sortir. Le renvoi vers #22882 est exactquant au fichier, faux quant au sujet.
Pourquoi je ne prends pas l'edition. #22882 est OPEN et touche le meme fichier
(
gh pr view 22882 --json filesla liste en tete). Editer sous une PR ouverte d'une autre lane estla collision que L898 interdit, et la PR n'est pas mienne.
Deux sorties propres, au choix du coordinateur — l'echeance est le 30/10 06:00Z, la seance
AP3B ouvre a 08:00 heure de Paris :
quand le helper n'est pas importable, lecture de
google.colab.userdata,OPENROUTER_API_KEYen second, modele par defaut ouvert sur la cle du module).
de toute facon (c'est la contrainte ecrite au point 2 du body), donc le repli autonome dans
02_PromptEngineeringpeut partir dans une PR dediee des que Fix(genai,#22783): serie GenAI/Texte -- la cible vLLM devient swift-1.5-27b (4 carnets re-executes) #22882 est hors du chemin.Je ne pose ni
[CLAIMED]ni[DELIVERED]: ce message ne retire rien de l'assiette, il ajoute unemesure a l'arbitrage.
Fix(genai,#23269,See #23264): contrat explicite de apply_openai_envir…
Fix(genai,#23264): isolation env du test dotenv + test reseau honnete…
Fix(genai,#23264): le repli autonome de cle suit l'ordre par fournisseur
Fix(genai,#23264): la re-execution complete ne rafraichit que la cell…
Add(genai,jsboige#23264): organe de configuration de la cle sous Cola…
Fix(genai,#23264): le carnet 02 se configure sous Colab et avec la cl…