Pile de modèles multi-fournisseurs mixte : Opus planifie, Qwen / DeepSeek exécutent
Épinglez les meilleurs modèles de différents fournisseurs par rôle d’agent — la planification garde Anthropic Opus, l’exécution atterrit sur Qwen3.8-Max / DeepSeek V4.1 Flash, sans changement client et avec traduction automatique inter-protocoles.
Ce dont la communauté se plaint réellement
Faire tourner Claude Code sur Claude Opus de bout en bout coûte trop cher ; une bascule générale vers Sonnet dégrade visiblement la planification et le jugement architectural, et les reprises coûtent plus cher. Les développeurs veulent mélanger les meilleurs modèles d’autres fournisseurs (Qwen, DeepSeek), mais le client ne parle que le protocole Anthropic et les noms de modèles claude-*, et changer la configuration signifie toucher chaque machine de développeur.
Pire, la boucle de planification, la boucle d’exécution principale et les sous-tâches par lots ont des besoins réellement différents en capacité et en prix — un simple changement de modèle côté client ne peut pas y répondre.
Comment GateLLM procède
GateLLM réécrit le nom du modèle par identité après la porte d’entrée et avant le routage — aucun changement client. La planification et le jugement architectural gardent claude-opus-5 vers Anthropic ; le claude-sonnet-* de la boucle d’exécution principale est mappé vers qwen3.8-max de DashScope ; les sous-tâches par lots (formatage, messages de commit, résumés de recherche) sont mappées vers deepseek-flash via un amont compatible OpenAI. La traduction inter-protocoles est assurée par la passerelle, avec les flux SSE et tool_call_id préservés à l’aller-retour.
Les règles s’attachent aux clés d’accès ou aux groupes de clés et prennent effet par équipe ; la porte de sortie vérifie que la cible figure dans la liste d’autorisation de l’identité — configurer un mappage n’équivaut pas à accorder une permission.
5 leviers qui portent réellement
- Mappage de modèles par identité : de → vers sur les clés d’accès / groupes de clés, réécrit après l’entrée et avant le routage ; prend en charge un * unique capturant un segment intermédiaire, rechargé à chaud
- Traduction inter-protocoles : Claude Code sur Anthropic, Codex / SDK OpenAI sur OpenAI, la passerelle traduit vers les amonts DashScope / OpenAI / Gemini / Bedrock ; :keep-alive pendant une longue inférence amont, _gateway_warning en cas de rupture de flux
- Routage conditionnel par en-tête de requête : un même « de » route vers des cibles différentes selon X-Tenant, etc. (exact / préfixe / regex / existe / absent) ; règles conditionnelles d’abord, repli inconditionnel, première correspondance gagnante — utilisable pour les canaris
- Détection du mode plan : le mode plan de Claude Code injecte les marqueurs Plan mode is active / Exited Plan Mode ; un script comparant la dernière position bascule le routage — planification sur Opus, exécution sur le modèle économique
- Permission et observabilité : la porte de sortie vérifie que la cible figure dans la liste d’autorisation de l’identité (mappage ≠ permission) ; la colonne modèle des journaux affiche une étiquette MM avec le nom d’origine → mappé au survol ; les statistiques et la facturation imputent selon le nom réel du modèle après mappage, pour que le coût de la pile mixte soit comparable d’un coup d’œil