Repository navigation
claudish: la cle cliente du proxy n'a aucun organe de propagation — CLAUDISH_PROXY_KEY absent de SECRET_KEYS #14926
Description
État mesuré au 2026-10-06 par myia-po-2027:CoursIA (preflight de claim, lecture firsthand de
origin/main). Ce qui suit conserve l'historique ; la mesure d'origine date du commit36c2c130fet est périmée sur l'acceptance 1 :
- Acceptance 1 — LIVRÉE :
CLAUDISH_PROXY_KEYest dansSECRET_KEYS(scripts/secrets/render_envs.pyl.191, commentaire calqué Qdrant citant claudish: la cle cliente du proxy n'a aucun organe de propagation — CLAUDISH_PROXY_KEY absent de SECRET_KEYS #14926) depuis le commitd63640075770(PR fix(secrets,#19462): coupler CLAUDISH_PROXY_KEY a l'endpoint de la passerelle #19463, qui couple en plus la clé à l'endpoint de la passerelle). L'organe de propagation existe.- Acceptance 2 — reste locale, par machine :
render_envs.py --checkrendra 0 sur une machine seulement quandmaster.envlocal porte la valeur (geste machine, pas de PR).- Acceptances 3-4 — RESTENT À LIVRER : la migration des 8 consommateurs runtime (présentation de l'en-tête claudish au lieu de la clé du service, re-exécution réelle, une PR par carnet ou groupe homogène). C'est le grain suivant actionnable ici.
Une lane qui tire cette issue prend donc la tranche consommateurs (3-4), pas la recréation de l'organe.
Le defaut
La rotation de la cle du service vLLM local est decidee (arbitrage user 2026-09-06). La doctrine qui l'accompagne est que claudish devient le seul detenteur des credentials fournisseurs : les consommateurs cessent de porter la cle du service et s'authentifient aupres du proxy avec l'en-tete de securite claudish.
Ce geste n'a aucun organe de propagation dans CoursIA aujourd'hui.
Mesure sur main (36c2c130f) :
present dans SECRET_KEYS (scripts/secrets/render_envs.py) |
occurrences dans le depot | |
|---|---|---|
VLLM_API_KEY |
oui (l.158) | 21 fichiers |
CLAUDISH_PROXY_KEY |
non | 1 — la prose de docs/genai/auth-flip-runbook.md |
Le pipeline canonique .secrets/master.env -> render_envs.py -> .env de chaque service sait donc distribuer la cle qu'on veut retirer des consommateurs, et ne sait pas distribuer celle qu'on veut leur donner. En l'etat, chaque machine devrait la poser a la main, sans --check pour detecter la derive.
Le precedent est deja dans le fichier, et il dit quoi faire
SECRET_KEYS porte deja exactement ce cas de figure pour Qdrant, avec sa justification ecrite (l.166-171) :
the Qdrant SERVER reads the SAME value under the double-underscore name
QDRANT__SERVICE__API_KEY. The server compose lives in theroo-extensionsrepo (NOT CoursIA); only the CLIENT key is centralized here so notebook consumers stay in lock-step with the server on rotation.
Claudish est structurellement identique : son compose vit dans D:\Dev\claudish (hors CoursIA), la variable serveur est CLAUDISH_PROXY_KEY, et ce qu'on centralise ici est la valeur cliente, pour que les consommateurs restent en phase avec le serveur a chaque rotation.
Le circuit est deja wire-compatible — c'est bien un trou de distribution, pas de code
proxy-auth.tsaccepte trois en-tetes (x-proxy-key,x-api-key,Authorization: Bearer) — cfauth-flip-runbook.mdl.44-47.- Le helper
MyIA.AI.Notebooks/GenAI/Vibe-Coding/Claudish/notebooks/helpers/claudish_client.pyenvoie dejax-api-key(l.111, l.157) et litCLAUDISH_BASE_URL(l.30, defauthttp://localhost:3000).
Rien a ecrire cote transport. Ce qui manque est que la valeur arrive sur chaque machine par le meme chemin que les autres secrets.
Surface a accompagner (mesure firsthand, instrument validee par controle positif)
8 fichiers lisent effectivement la variable a l'execution (parse JSON des cellules de code, pas un grep de chaine — un grep naif n'en trouve 1 parce que dans un .ipynb les quotes doubles sont echappees) :
MyIA.AI.Notebooks/GameTheory/GameTheory-03c-Le-Joueur-LLM.ipynbMyIA.AI.Notebooks/GameTheory/GameTheory-28b-Humour-Banc-Dur.ipynbMyIA.AI.Notebooks/GenAI/RAG-et-Memoire-Semantique/09-KernelMemory-Multimodal.ipynbMyIA.AI.Notebooks/GenAI/SemanticKernel/04-SemanticKernel-Filters-Observability.ipynbMyIA.AI.Notebooks/GenAI/Texte/10_LocalLlama.ipynbMyIA.AI.Notebooks/GenAI/Texte/10c_Long_Context_Strategies.ipynbMyIA.AI.Notebooks/GenAI/_research/e2e_quant_validation.ipynbtranslations/genai/texte.csv(derive — suit sa source)
13 autres fichiers mentionnent la variable sans la lire (.env.example, docs, compose, tests) : ils suivent, ils ne bloquent pas.
Acceptance
CLAUDISH_PROXY_KEYentre dansSECRET_KEYS, avec un commentaire calque sur celui deQDRANT_API_KEY: nommer que le compose serveur vit hors CoursIA, et que c'est la valeur cliente qui est centralisee ici.python scripts/secrets/render_envs.py --checkrend 0 apres propagation (pas de derive entremaster.envet les.envconsommateurs).- Les 8 consommateurs runtime pointent
CLAUDISH_BASE_URLet presentent l'en-tete claudish, au lieu de porter la cle du service. - Une PR par notebook ou par groupe homogene, avec re-execution reelle — un changement de cible d'inference change les sorties, et C.2 interdit de committer un notebook non re-execute. Ce n'est pas un
sedde masse.
Hors perimetre
- La rotation elle-meme et son broadcast : mandat user vers la lane dediee, pas cette issue.
- Le flip d'auth du proxy (
#16P2,auth-flip-runbook.mdPhase 1) : c'est ce qui rend l'en-tete obligatoire ; ici on ne traite que la distribution de la valeur cliente. - Aucune valeur de secret ne figure dans cette issue, et aucune ne doit y figurer : depot public.
Activity
jsboige commentedon Sep 6, 2026
Mesure complementaire — le perimetre est plus large que le corps de l'issue, dans deux directions
Mesure firsthand sur
36c2c130f, traces historiques du prover exclues (agent_tests/prover/baselines/traces/: des enregistrements, pas des consommateurs).1. Le geste a DEUX moities, et seule la premiere etait decrite
VLLM_API_KEYa l'executionSECRET_KEYSl.158 — existe192.168.0.47:5002(LAN, vLLM direct)api.medium.text-generation-webui.myia.io(reverse-proxy)CLAUDISH_BASE_URLRetirer la cle aux consommateurs ne suffit donc pas a les faire passer par claudish : 16 fichiers nomment leur cible en dur, et aucune variable ne porte cette cible hors de la famille Claudish.
CLAUDISH_BASE_URLn'est pas un secret — c'est de la config de service, qui reste par.env— mais rien ne la lit aujourd'hui.2. Deux plans d'authentification, pas un
Les consommateurs se repartissent sur deux chemins distincts vers le meme modele :
192.168.0.47:5002— authentifie par la cle du serveur vLLM (VLLM_API_KEY) ;*.myia.io— authentifie par une cle validee en regle IIS URL Rewrite.Ce second plan a deja son organe, que le corps de l'issue ne mentionnait pas :
scripts/genai-stack/Manage-ApiKeys.ps1(-Action Generate|Configure|List|Export,New-SecureApiKey -Length 32, stockageD:\Production\.secrets\api-keys.json), avecscripts/genai-stack/Configure-IISAuthentication.ps1pour la partie authentification. Toute rotation qui ignore ce plan laisse un chemin d'acces sur l'ancienne valeur.3. Surfaces a re-pointer, au-dela des notebooks
Deux categories que l'acceptance initiale ne couvrait pas :
GenAiStackReel.AppHost/apphost.cset…AppHost-wt2/apphost.cs(+Aspire/02-Aspire-GenAiStack-Reel.ipynb) : adresse LAN en dur, genrerefactor/notebook-dotnet, pasnotebook-python.docs/reference/cluster-agents.mdpointe l'IP ;MyIA.AI.Notebooks/GenAI/.env.exampleporte les deux formes d'adresse.4. Ce qui ne va PAS dans une acceptance, et qui doit etre dit quand meme
Un troisieme detenteur de credential vit hors du depot et hors de tout organe :
~/.claudish/config.json, champcustomEndpoints/vllm-myia/apiKey, par machine. Compare par empreinte (aucune valeur lue, aucune publiee) : elle est distincte de celle que.secrets/master.envpropage. claudish n'utilise donc pas la meme cle que les consommateurs, et aucun rendu ne met ce fichier a jour — une rotation qui l'oublie coupe claudish sur chaque machine.Question ouverte, qui n'appartient pas a cette issue : le service accepte-t-il les deux credentials, ou le reverse-proxy re-authentifie-t-il ? La reponse decide si la rotation coupe claudish. Elle revient a la lane que le user mandate pour la rotation.
Acceptance revisee proposee
Aux 4 points du corps, ajouter :
CLAUDISH_BASE_URL, et ce n'est pas un sous-produit du changement de credential.Manage-ApiKeys.ps1/Configure-IISAuthentication.ps1sont nommes comme plan d'authentification distinct, avec le geste qui leur correspond.~/.claudish/config.json(par machine, hors organe) est tranche — rendu par un organe, ou declare explicitement hors perimetre avec le geste manuel qui le couvre.Aucune valeur de secret ne figure ici et aucune ne doit y figurer : depot public. Les comparaisons ci-dessus sont des empreintes, jamais des valeurs, et les empreintes elles-memes ne sont pas publiees.
jsboige commentedon Sep 6, 2026
⚠ Correction — les points 3 et 5 nomment la mauvaise cible
Le point 3 du corps et le point 5 de mon commentaire précédent sont faux, et il faut les corriger avant qu'une lane ne les exécute : tous deux prescrivent
CLAUDISH_BASE_URLcomme cible de re-pointage. Une lane appliquant cette consigne câblerait une base URL du protocole Anthropic dans un client OpenAI.Mesure firsthand, ce jour.
La cause : claudish expose DEUX protocoles, pas un
CLAUDISH_BASE_URL/ANTHROPIC_BASE_URL(:3000)https://models.myia.io/v1(ouhttp://localhost:3002/v1)Les 19 fichiers recensés sont écrasamment du second groupe.
CLAUDISH_BASE_URLest la bonne variable pour la famille Claudish uniquement — c'est précisément pourquoi elle n'est lue que là, et j'ai lu cette absence à l'envers : comme un trou à combler partout, alors qu'elle marque une frontière de protocole.GET https://models.myia.io/v1/modelsrépond 200 et catalogue 21 modèles (qwen 3.6→3.8, glm 4.7→5.3, gpt-5.5/5.6, deepseek-v4, mistral/codestral, MiniMax-M3). Le choix de moteur redevient une chaîne de caractères.L'en-tête : les trois formes marchent — mesuré avec contrôle négatif
POST /v1/chat/completions, modèle cloud, en-tête portant la valeur deCLAUDISH_PROXY_KEY:x-proxy-keyx-api-keyAuthorization: BearerLe contrôle négatif discrimine : ce ne sont pas des 200 de complaisance. La note du corps («
proxy-auth.tsaccepte trois en-têtes », d'après le runbook) passe donc de RAPPORTÉ à VÉRIFIÉ.Conséquence pratique, et elle allège le travail :
claudish_client.pyenvoie déjàx-api-key(l.111, l.157). Les 8 consommateurs runtime n'ont pas besoin d'un changement d'en-tête — seulement de la base URL et de la valeur. Le point 3 réclamait un geste qui n'a pas lieu d'être.Le point 7 est répondu, il n'est plus ouvert
~/.claudish/config.jsonne porte que les credentials sortants de claudish vers ses fournisseurs — vérifié en essayant chacun d'eux, sous chaque en-tête, contre le plan d'entrée : tous rejetés. Le credential entrant vit dans l'environnement du conteneur claudish, sous un nom distinct, et il est absent de ce fichier.Ce sont donc quatre plans de credentials, pas trois : (1) LAN direct
:5002, (2) reverse-proxy IIS, (3) sortants de claudish, (4) entrant de claudish. Le fichier a été patché par la lane mandatée à l'instant de la rotation — il est hors périmètre CoursIA, et il a un propriétaire. Le point 7 se solde par « hors périmètre, tranché, propriétaire nommé », pas par un geste manuel à documenter.⛔ Ce qui interdit d'exécuter le re-pointage aujourd'hui
Avec un credential d'entrée valide, sur les deux fronts (
localhost:3002etmodels.myia.io) :glm-4.7MiniMax-M3qwen3.6-35b-a3b— le modèle localLes 200 sont le contrôle positif : l'authentification d'entrée fonctionne, la route cloud fonctionne. Seul le modèle local tombe, et le corps du 401 porte la forme de l'amont relayée, pas celle de claudish — le refus vient d'entre claudish et vLLM. Diagnostic remonté à la lane mandatée (canal privé) : la clé sortante répond 200 sous
Authorization: Beareret 401 sousx-api-keyface au reverse-proxy, ce qui désigne le schéma d'en-tête sortant, pas la validité de la clé.Une migration exécutée maintenant produirait donc des notebooks qui marchent sur vingt modèles et échouent sur celui que la rotation devait protéger — et l'échec se lirait comme « ma config est fausse » alors qu'elle serait juste.
Acceptance corrigée
CLAUDISH_PROXY_KEYdansSECRET_KEYS, commentaire calqué surQDRANT_API_KEY) — inchangé, et c'est la bonne première marche.render_envs.py --checkrend 0) — inchangé, avec une réserve :--checkcompare les.envconsommateurs àmaster.env, jamais au serveur. Il rend[OK] … exit 0sur une valeur morte. Il mesure la cohérence de la distribution, pas la validité du credential.https://models.myia.io/v1et présentent la valeur deCLAUDISH_PROXY_KEYsous l'un des trois en-têtes (celui déjà en place suffit).sedde masse) — inchangé, et renforcé par ce qui précède : re-exécuter contre une route en 401 committerait des sorties d'erreur.models.myia.io/v1, à l'exception de la famille Claudish qui reste surCLAUDISH_BASE_URL(protocole Anthropic). Cas à part sans prise :GenAiStackReel.AppHost/apphost.cs(+ son jumeau-wt2) portebuilder.Configuration["ConnectionStrings:vllm"]en dur sansgetenv— aucune variable ne l'atteint, c'est une édition de source.Manage-ApiKeys.ps1/Configure-IISAuthentication.ps1, plan d'authentification distinct) — inchangé, et le 401 ci-dessus le rend plus pertinent : c'est ce plan-là que le schéma d'en-tête sortant heurte.qwen3.6-35b-a3brépond 401 à travers claudish. Le contrôle qui lève ce gate est une requête de complétion sur ce modèle rendant 200.Ordre qui en découle : bascule d'abord, retrait de
VLLM_API_KEYdemaster.envensuite — les 12 fichiers qui frappent192.168.0.47:5002en direct ont encore besoin d'une clé serveur tant qu'ils n'ont pas bougé.Aucune valeur de secret ne figure ici, et aucune empreinte non plus — dépôt public. Les comparaisons ci-dessus ont été faites par empreinte et par code HTTP ; les valeurs n'ont été ni lues, ni écrites, ni transmises.
jsboige commentedon Sep 6, 2026
Le gate est leve — mesure firsthand, et un renversement de sequencement
La rotation est effectuee cote service (lane dediee, hub claudish patche ce soir). J'ai re-mesure moi-meme plutot que de lever sur rapport, et sur une completion reelle : un
GET /v1/modelsest exempt d'authentification sur claudish (proxy-auth.ts: « GET requests and health endpoints are exempt »), il ne prouve donc rien.Modele
qwen3.6-35b-a3b, prompt « Reponds exactement: PONG »,max_tokens: 300:https://models.myia.io/v1/chat/completions+Authorization: Bearer <cle claudish>completion='PONG',model=qwen3.6-35b-a3bx-proxy-key: <cle claudish>completion='PONG'Les deux formes d'en-tete d'entree passent, ce qui confirme le point du corps de l'issue : rien a ecrire cote transport, le circuit est wire-compatible. La cible OpenAI
models.myia.io/v1de ma correction du 19:19Z est verifiee de bout en bout.Ce que le controle negatif a change
J'ai mesure l'ancienne cle en plus de la nouvelle. Resultat : la valeur que porte
.secrets/master.envsousVLLM_API_KEYrend 401 Unauthorized sur l'upstream. Elle est morte.Ca renverse le sequencement qui avait ete propose (« retirer la cle morte de
master.envapres la migration, sinon--checkvert + runtime 401 »). Ce raisonnement supposait quemaster.envgardait les consommateurs directs en etat de marche pendant la transition. La mesure dit qu'il ne les garde pas : les fichiers pointant192.168.0.47:5002sont deja en 401, migration ou pas.Deux consequences concretes :
render_envs.py --checkest vert par-dessus une cle morte — il compare les.envamaster.env, jamais au serveur. C'est exactement l'assurance fausse qui fait qu'un mainteneur se croit configure. Le desaccord de nom aggrave la lecture : le nom canonique cote moteur estVLLM_API_KEY_MEDIUM(ce que le profil compose consomme),master.envporte l'alias localVLLM_API_KEY— qui grep le nom canonique conclut « pas concerne ».L'acceptance 2 de cette issue («
--checkrend 0 ») est donc necessaire mais pas suffisante : un--checka 0 ne prouve pas qu'un consommateur atteint le service. Ajouter une verification de bout en bout (une completion reelle) est ce qui separe les deux.Inventaire re-mesure — mon compte differe, et la difference est instructive
Sur
36c2c130f, je retrouve 13 fichiers citant192.168.0.47:5002la ou le releve precedent en annoncait 12. L'ecart n'est pas le point ; le point est que le compte brut melange trois natures qui ne se traitent pas pareil :apphost.cs).env.exampletranslations/*.csvderiveEt sur la surface
api.medium.text-generation-webui.myia.io(13 fichiers), 6 sont des traces historiques du prover (agent_tests/prover/baselines/traces/*.spans.jsonl) : des enregistrements, pas des consommateurs — ils ne se migrent pas, les toucher falsifierait un journal.Ce qui se decoupe, et comment
L'acceptance 4 (« une PR par notebook ou groupe homogene, avec re-execution reelle — ce n'est pas un
sedde masse ») reste entiere. Le decoupage suit la nature ci-dessus, pas la famille :.env.example. Bornes, verifiables, aucun kernel requis.GenAiStackReel.AppHost-wt2/apphost.csporte un suffixe-wt2qui ressemble a une copie de worktree committee par accident. A trancher avant de la migrer — migrer un doublon fantome le consacrerait.Aucune valeur de secret ne figure ci-dessus, et aucune ne doit figurer dans cette issue : depot public.
docs(env,#14926): point les 4 gabarits .env.example vers claudish mod…
docs(env,#14926): point les 4 gabarits .env.example vers claudish mod…
fix(secrets,#14951): CLAUDISH_PROXY_KEY entre dans SECRET_KEYS (organ…
docs(env,#14926): complete le retarget des gabarits -- endpoint 3 med…
myia-ai-01 commentedon Oct 5, 2026
Urne
delivered: ce n'est pas encore livré, je la rends au tapis (ai-01, vérifié surorigin/mainle 05/10)La migration des consommateurs vers l'endpoint canonique n'est pas finie.
192.168.0.47:5002est encore en dur dans 6 fichiers.ipynb/.pysur main, dontGenAI/Texte/10c_Long_Context_Strategies.ipynb(3 occurrences),GameTheory-03d-Le-Joueur-LLM(valeur par défaut deVLLM_ENDPOINT) etAspire/02-Aspire-GenAiStack-Reel. Reste : migrer ces consommateurs, puis les ré-exécuter (C.2).jsboige commentedon Oct 5, 2026
[INFO] candidate-delivered -- lane myia-po-2026:CoursIA-2
Firsthand check (Tells c.11900 + c.573 strict) :
Cloture effective reservee au coordinateur/adjoint (urne delivered, #15069).
jsboige commentedon Oct 6, 2026
[CLAIMED] lane myia-po-2026:CoursIA-2 -- tranche consommateurs (Acceptance 3-4) : migrer 8 notebooks consommateurs vers l'en-tete claudish (CLAUDISH_BASE_URL + en-tete de presentation au lieu de la cle du service).
Grain: DEEP/genai -- lane myia-po-2026:CoursIA-2 -- prev: REPAIR/lean #19336
Scope : migration des 8 fichiers listes au body de l'issue :
Acceptance : un changement de cible d'inference change les sorties -> C.2 interdit un sed de masse. Re-execution reelle par carnet ou par groupe homogene. Une PR par carnet/groupe.
jsboige commentedon Oct 6, 2026
[INFO c.1398 myia-po-2026:CoursIA-2] Re-inventaire firsthand post-claim -- le body de l'issue date d'avant plusieurs renommages et additions.
Fichiers lists au body (8) -- verification :
GameTheory/GameTheory-03c-Le-Joueur-LLM.ipynb-- MISSING (renomme en03d-Le-Joueur-LLM-Python.ipynb)GameTheory/GameTheory-28b-Humour-Banc-Dur.ipynb-- MISSING (le carnet courant estGameTheory-28b-Humour-Banc-Dur-Python.ipynbou n'existe plus)GenAI/RAG-et-Memoire-Semantique/09-KernelMemory-Multimodal.ipynb-- EXISTSGenAI/SemanticKernel/04-SemanticKernel-Filters-Observability.ipynb-- EXISTSGenAI/Texte/10_LocalLlama.ipynb-- EXISTSGenAI/Texte/10c_Long_Context_Strategies.ipynb-- EXISTSGenAI/_research/e2e_quant_validation.ipynb-- EXISTStranslations/genai/texte.csv-- EXISTS (derive)Inventaire actualise par grep
os.environ.get('VLLM_API_KEY')|os.getenv('VLLM_API_KEY'):GameTheory/GameTheory-03d-Le-Joueur-LLM-Python.ipynbos.environ.get('VLLM_API_KEY', '')GenAI/RAG-et-Memoire-Semantique/09-KernelMemory-Multimodal.ipynbGenAI/Texte/10_LocalLlama.ipynbos.getenv('VLLM_API_KEY')GenAI/Texte/10c_Long_Context_Strategies.ipynbGenAI/_research/e2e_quant_validation.ipynbVerdict : 5 carnets runtime, pas 8. Le scope reel de la tranche consommateurs est plus etroit que le body ne le pretendait, mais le travail reste substantiel (5 PRs avec re-exec reelle par carnet).
Action pour ce cycle : claim amende (paths ci-dessous). 1 carnet comme tranche de demonstration dans ce cycle ; les 4 restants en tranches B/C/D/E pour les cycles suivants.
Grain: DEEP/genai -- lane myia-po-2026:CoursIA-2 -- prev: REPAIR/lean #19336
paths: MyIA.AI.Notebooks/GameTheory/GameTheory-03d-Le-Joueur-LLM-Python.ipynb, MyIA.AI.Notebooks/GenAI/_research/e2e_quant_validation.ipynb
jsboige commentedon Oct 6, 2026
[RELEASED] lane myia-po-2026:CoursIA-2 -- c.1398, scope re-inventory + reclassification demandee.
Raison du release : re-mesure firsthand a montre que la migration n'est PAS un key-swap mais une rearchitecture pour 1 carnet au moins (e2e_quant_validation.ipynb utilise vLLM image generation direct, pas un modele LLM proxyfiable par claudish).
Re-inventaire (cf commentaire precedent cid 6027468327) :
Recommandation a ai-01 :
umbrella(au lieu degrain) : la decomposition en 5+ PRs en fait un EPIC, pas un grain de cycle workerAucune edition realisee : la lane n'a pas modifie de fichier. Le claim est rendu pour permettre la reclassification.
jsboige commentedon Oct 7, 2026
[CLAIMED]lanemyia-po-2023:CoursIA— tranche consommateurs (acceptance 3-4), un carnet.Le claim precedent (
myia-po-2026:CoursIA-2, rendu a 23:39Z) demandait une reclassification enumbrellaet un arbitrage user sur les carnets vLLM-image. Ce sous-grain ne les touche pas :il prend le seul carnet dont l'appartenance au perimetre n'est pas discutee.
Carnet :
GameTheory-03d-Le-Joueur-LLM-Python.ipynb(11 cellules code, depsnumpyseul).Faisabilite mesuree avant claim (firsthand, cette machine) :
CLAUDISH_PROXY_KEYdans.secrets/master.envrender_envs.pyporteCLAUDISH_PROXY_KEYdansSECRET_KEYSGET localhost:3000/v1/modelsavec l'en-tete claudishqwen3.6-35b-a3bservi par claudishGET 192.168.0.47:5002/v1/modelsavecVLLM_API_KEYlocalUn ajustement de parametre est necessaire, et je le mesure plutot que de le supposer : la
passerelle claudish ignore
chat_template_kwargset le budget est consomme par le thinking(~263 tokens, quel que soit
max_tokens). Avecmax_tokens=1la reponse n'atteint jamaiscontent(content=None,finish_reason=length) — le carnet basculerait sur son stub C.1,c'est-a-dire une sortie degradee consacree. Avec
max_tokens=512:content='F',finish_reason=stop. Temoinglm-5.2: meme comportement, donc ce n'est pas le modele.paths: MyIA.AI.Notebooks/GameTheory/GameTheory-03d-Le-Joueur-LLM-Python.ipynb
jsboige commentedon Oct 7, 2026
[INFO]lanemyia-po-2023:CoursIA— tranche 1 livrée : PR #19634 (carnetGameTheory-03d-Le-Joueur-LLM-Python).Le claim reste posé sur ce seul carnet jusqu'au merge. Ce qui suit est la recette mesurée, déposée
pour que les tranches suivantes ne la redécouvrent pas — c'est elle qui coûte un cycle, pas l'édition.
Ce que la passerelle impose, mesuré firsthand (2026-10-07,
localhost:3000)chat_template_kwargsn'est pas propagé — comportement identique avec et sansenable_thinking: Falseenable_thinking=Falsene sert plus à rien : le raisonnement est toujours actifcontent(~263 tokens)max_tokens: 1ou64,content = None,finish_reason = length, et le carnet retombe sur son stub C.1max_tokens: 512le 5ᵉ round est tronqué (4 rounds joués, cassette à 8, rejeu non identique)max_tokens: 2048: 5 rounds, cassette 10, rejeu identique sans appel réseauglm-5.2: même comportementqwen3.6-35b-a3b192.168.0.47:5002/v1/modelsavec la clé locale → 401qwen3.6-35b-a3best servi par la passerelle (23 modèles)Le piège à éviter : une migration « key-swap » qui garde
max_tokens: 1produit une sortiedégradée consacrée (le stub), pas une erreur visible. C'est le mode d'échec Prong-A.
Le périmètre réel est plus large que le body et que le ré-inventaire précédent
Mesure par parse des sources de cellules (le grep de chaîne sous-compte : dans un
.ipynblesguillemets sont échappés — l'instrument est celui que le body décrit lui-même) :
9 carnets lisent encore
VLLM_API_KEY, dont quatre absents de la liste du body d'origine :GenAI/Integrations-DotNet/Aspire/02-Aspire-GenAiStack-Reel.ipynbGenAI/Texte/10b_Inference_Mechanics.ipynbGenAI/Texte/16_Scaling_Test_Time_Compute.ipynbGenAI/Texte/22b_Profil_Cognitif_CHC.ipynbLe ré-inventaire du 2026-10-06 en comptait 5 (par
grep os.environ.get('VLLM_API_KEY')). Les deuxchiffres sont justes, leurs instruments diffèrent : le grep rate les formes qui ne sont pas
littéralement
os.environ.get(...).La reclassification en
umbrellademandée parmyia-po-2026:CoursIA-2reste donc fondée — 9tranches, pas 5. L'arbitrage user sur les carnets vLLM-image (
e2e_quant_validation,04-SemanticKernel-Filters-Observability) n'est pas tranché par cette tranche : je ne les ai pas touchés.jsboige commentedon Oct 7, 2026
[INFO]lane myia-po-2023:CoursIA — inventaire mesuré des consommateurs restants + fidélité de la passerelle (ground de l'arbitrage demandé à 23:39Z).À la suite de la tranche 1 (PR #19634, recette déposée 00:51Z), j'ai sondé chaque consommateur restant avant de claimer une tranche 2. Conclusion : après 03d, aucun carnet restant n'est un chat simple migratable mécaniquement. La classe se coupe en quatre, et la coupe est mesurée, pas supposée.
Fidélité de la passerelle, mesurée firsthand (2026-10-07 ~02:30Z,
localhost:3000,qwen3.6-35b-a3b)seed=42× 2 appels identiques (temp 1.0)logprobs: true, top_logprobs: 3None— silencieusement absent de la réponsechat_template_kwargs(enable_thinking: False)Les consommateurs restants, par classe
04-SemanticKernel-Filters-ObservabilityCLAUDISH_PROXY_KEY+models.myia.io16-Scaling-Test-Time-ComputeCLAUDISH_*10_LocalLlama22b_Profil_Cognitif_CHCVLLM_API_KEY_MEDIUM(route hébergée TGWUI, multi-routes BYOK)10b_Inference_Mechanicslogprobs: Noneet le seed non reproductible (mesuré ci-dessus)10c_Long_Context_Strategiesenable_thinking=False(cell. 4 : « crucial pour des mesures reproductibles ») + TTFT/prefix-caching vLLM + fenêtre réelle lue via/modelschat_template_kwargsnon propagé : les mesures àmax_tokens=256se tronquent dans le raisonnement (content=None), et le warm/cold prefix-cache mesure la chaîne proxy+fournisseur, pas le serveur09-KernelMemory-MultimodalVISION_MODEL)_research/e2e_quant_validation02-Aspire-GenAiStack-ReelVLLM_API_KEYpour configurer la stack elle-même (le credential du service, pas un appel consommateur)Ce que ça change pour la tranche consommateurs (acceptances 3-4)
chat_template_kwargs/seed/logprobs— côté claudish, pas CoursIA) ;chat_template_kwargs,seed,logprobs) — la liste est close.Mon claim reste posé sur 03d seul jusqu'au merge de #19634. Aucune édition posée ici — ce commentaire est la mesure qui grounde l'arbitrage, pas une livraison de code.
fix(gametheory,#14926): prose-counts -- reference GameTheory-3 reform…
fix(gametheory,#14926): le carnet GameTheory-03d passe a la passerell…