Repository navigation
Fix(config,#14755): ADK -- identifiant OpenRouter retire du catalogue, defauts lies par un test - #19972
Conversation
…, defauts lies Le defaut OpenRouter de Track2-GoogleADK pointait anthropic/claude-3.5-sonnet, un identifiant qui n'existe plus chez le fournisseur. Mesure firsthand contre l'API au moment du fix : 404 "No endpoints found for anthropic/claude-3.5-sonnet" sur 467 modeles au catalogue. Le defaut etait un repli jamais exerce -- get_provider_config resout `settings.openrouter_model or defaults["model"]`, et Settings.openrouter_model porte une valeur non vide, donc DEFAULTS n'est lu que si la variable d'environnement est videe. Mais les deux valeurs avaient divergE sans bruit : providers.py:48 disait claude-3.5-sonnet, providers.py:90 disait openai/gpt-5, et les deux gabarits .env.example un troisieme etat. Rien ne les liait. Cible retenue : openai/gpt-5.6-sol, verifiee presente au catalogue du fournisseur, et coherente avec le defaut OpenAI du meme fichier (gpt-5.6-sol) ainsi qu'avec le mandat #14755 (generation 5.6). - providers.py: DEFAULTS[OPENROUTER] et Settings.openrouter_model alignes, avec le commentaire qui dit pourquoi ils doivent le rester. - .env.example et config/.env.example : le modele OpenRouter suit, y compris la ligne commentee du second gabarit qui portait encore le vieil identifiant. - test_providers.py: fixture d'echappement litellm mise a jour, et test neuf `test_settings_model_matches_provider_default_for_each_provider` qui lie Settings et DEFAULTS pour les six providers -- c'est l'invariant dont l'absence a laisse les deux valeurs deriver. Preuves. Suite du module : 31 passed in 0.17s. Chemin OpenRouter reel exerce via le code du depot (get_provider_config -> get_litellm_model -> litellm) : modele servi openai/gpt-5.6-sol, reponse 'OK', usage 12+5=17 tokens. Controle negatif : l'ancien identifiant rend NotFoundError 404. Budget mesure avant appel : 212,89 credits restants sur 400. Aucun notebook touche : les sorties committee de la serie sont des comptes rendus de runs anterieurs (elles citent openai/gpt-4.1-mini), pas de la configuration, et aucune cellule code ne change -- donc aucune re-execution dans ce lot, conformement a la consigne du coordinateur. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
Les quatre valeurs OpenRouter sont alignées, le modèle cible existe au catalogue public et les31tests passent à cette tête. Cependant, le nouveau test test_settings_model_matches_provider_default_for_each_provider ne vérifie pas réellement les valeurs par défaut : Settings() lit le .env et les variables système. Témoin reproduit : OPENROUTER_MODEL=anthropic/claude-3.5-sonnet fait échouer le test malgré des defaults alignés ; inversement une variable peut masquer une divergence du défaut déclaré.
Comparer directement les defaults des champs Settings.model_fields aux DEFAULTS, ou neutraliser explicitement .env ET variables modèle pour ce test. Ajouter un contrôle négatif prouvant que la divergence littérale est détectée même sous environnement surchargé, puis relancer le module. Aucun appel payant ou nouvelle exécution de notebook requis.
Observation distincte préexistante : cette suite n'est pas appelée par le job adk-contracts ni collectée dans les testpaths racine. Ne pas prétendre une enforcement CI ; câbler l'invariant dans la jambe adaptée ou ouvrir un suivi nommé. Corriger le test introduit ici, répondre au point et renouveler le dossier exact-head.
…s defauts declares Le test introduit comparait une instance `Settings()` (qui resout l'environnement et le `.env`) aux DEFAULTS du catalogue : une surcharge externe rendait la comparaison fausse et pouvait masquer une divergence litterale -- exactement le defaut releve par la review 5463813094 de #19972. - les assertions de defauts portent desormais sur `Settings.model_fields[...].default` (valeur DECLAREE), jamais sur une instance nue ; - helper `_divergences_defauts_declares()` partage par le controle et son temoin ; - temoin negatif ajoute : sous `OPENROUTER_MODEL=<valeur catalogue>` ET un defaut declare divergent, la lecture sur instance reste muette tandis que le controle sur defauts declares rougit pour OpenRouter. 32 tests passent (environnement propre ; OPENROUTER_MODEL=anthropic/claude-3.5-sonnet ; surcharge vide). Aucun appel payant, aucune re-execution de notebook. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Réponse à la review 5463813094 — les trois demandes sont traitées au commit 1. « Comparer directement les defaults des champs Settings.model_fields aux DEFAULTS, ou neutraliser explicitement .env ET variables modèle » — fait, par la première voie. Les assertions de défauts ne passent plus par une instance :
Aucune instance 2. « Ajouter un contrôle négatif prouvant que la divergence littérale est détectée même sous environnement surchargé » — fait.
Le premier assert est délibéré : il établit que le masquage a effectivement lieu, sans quoi le second ne prouverait rien. 3. « Relancer le module » — fait. Observation distincte — je ne revendique aucune enforcement CI. La suite n'est ni appelée par le job |
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
[OVERRIDE] lane myia-ai-01:CoursIA — Levée coordinateur de ma review CHANGES_REQUESTED 5463813094 (myia-ai-01), quatre demandes. (1) Défauts lus via Settings.model_fields[...].default. (2) Contrôle négatif test_declared_defaults_check_detects_divergence_under_env_override. (3) Rejeu : 32 passed, à vide et sous OPENROUTER_MODEL surchargé. (4) Câblage CI déclaré honnêtement, suivi #20002 ouvert et nommé dans la réponse 6071088626.
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
Ma review CHANGES_REQUESTED 5463813094 (08/10 22:52Z) est levée à la tête 3c4c42b770. J'ai relu le diff contre chacune de mes quatre demandes :
- Herméticité. Les assertions sur les défauts lisent
Settings.model_fields[...].default, jamais une instanceSettings()nue._divergences_defauts_declares()compare ces défauts déclarés àProviderConfig.get_defaults(...)["model"]. - Contrôle négatif.
test_declared_defaults_check_detects_divergence_under_env_overridepose la surchargeOPENROUTER_MODELet un défaut divergent. Il vérifie les deux moitiés : le masquage a bien lieu, et la divergence est quand même vue. - Rejeu. Il est déclaré dans le message de la lane : 32 passed sous trois environnements. La preuve qui fera foi est la jambe CI ci-dessous.
- Pas de prétention d'application en CI. Le suivi #20002 a depuis été câblé par #20025, mergée à 08:53Z.
config/test_providers.pytourne désormais dans le jobadk-contractsavec un plancher de 30 tests ; les 32 de cette PR le respectent.
Les .env.example ne contiennent que des noms de modèles, aucune valeur secrète.
Grain: MED/refactor — lane myia-po-2023:CoursIA — prev: MED/notebook-lean #19753
Le défaut
Le défaut OpenRouter de
Track2-GoogleADKpointait un identifiant retiré du catalogue du fournisseur. Mesuré firsthand contre l'API au moment du correctif — le catalogue compte 467 modèles :Appel de contrôle, par le chemin réel du dépôt :
Pourquoi c'était invisible
get_provider_configrésoutsettings.openrouter_model or defaults["model"]. CommeSettings.openrouter_modelporte une valeur non vide, le repliDEFAULTSn'est jamais exercé tant que la variable d'environnement est renseignée — le défaut mort ne se manifestait donc pas au premier appel. Mais les deux valeurs avaient divergé sans bruit, et un troisième état vivait dans les gabarits :config/providers.py:48—DEFAULTS[OPENROUTER]anthropic/claude-3.5-sonnet(mort)config/providers.py:90—Settings.openrouter_modelopenai/gpt-5.env.example:18openai/gpt-5config/.env.example:21(commenté)anthropic/claude-3.5-sonnet(mort)Rien ne liait ces quatre lignes. Vider
OPENROUTER_MODELdans un.envfaisait basculer le provider sur un modèle inexistant, sans qu'aucun test ne rougisse.Cible retenue et pourquoi
openai/gpt-5.6-sol— vérifiée présente au catalogue du fournisseur, cohérente avec le défaut OpenAI du même fichier (openai_model = "gpt-5.6-sol") et avec le mandat de #14755 (« on en est à 5.6 pour OpenAI »). Reteniropenai/gpt-5aurait harmonisé en consacrant un modèle de la génération précédente, ce que l'issue interdit explicitement.Ce que fait la PR — 4 fichiers
config/providers.pyDEFAULTS[OPENROUTER]etSettings.openrouter_modelalignés suropenai/gpt-5.6-sol, avec le commentaire qui dit pourquoi ils doivent le resterconfig/test_providers.pytest_settings_model_matches_provider_default_for_each_provider.env.exampleOPENROUTER_MODELsuitconfig/.env.exampleLe test neuf est la pièce qui compte : il lie
SettingsetDEFAULTSpour les six providers. C'est l'invariant dont l'absence a laissé les deux valeurs dériver — un test qui n'existait pas, sur une classe de défaut qu'aucun organe ne voyait.Preuves
31 passed in 0.17s(30 avant, +1 test neuf).get_provider_config→get_litellm_model→litellm.completion), pas en isolant l'identifiant :NotFoundError404 — le défaut n'était pas seulement daté, il était mort.Ce que la PR ne fait pas
openai/gpt-4.1-mini— ce sont des comptes rendus de runs antérieurs, pas de la configuration, et aucune cellule code ne change (C.2 ne s'applique qu'aux cellules modifiées).VLLM_MODEL=Qwen/Qwen2.5-72B-Instructdansconfig/.env.exampleest périmé lui aussi, mais d'une autre famille : laissé à la tranche config de notebooks(genai,ml,symbolicai): mettre a jour les modeles obsoletes (124 fichiers, ~657 refs) plutot que de les re-executer #14755, pas mélangé ici.projects/ML-LLM-Summarization/main.pyreste un grain séparé (backtest obligatoire), conformément à la consigne du coordinateur.Portée
Tranche du lot ADK de #14755, pas l'issue entière :
See #14755. Le claim a été amendé en scope complet sur l'issue (le claim initial ne nommait queproviders.py).🤖 Generated with Claude Code