Skip to Content
Guide utilisateurConfigurationFournisseurs de modèles

Fournisseurs de modèles

Qwen Code vous permet de configurer plusieurs fournisseurs de modèles via le paramètre modelProviders dans votre settings.json. Cela vous permet de basculer entre différents modèles et fournisseurs d’IA en utilisant la commande /model.

Vue d’ensemble

Utilisez modelProviders pour déclarer des modèles par type d’authentification entre lesquels le sélecteur /model peut basculer. Les clés doivent être des types d’authentification valides (openai, anthropic, gemini, etc.). Chaque type d’authentification correspond à un objet ProviderConfig contenant un champ protocol et un champ models (le tableau des définitions de modèles). Chaque entrée dans models nécessite un id ; envKey est facultatif mais recommandé (lorsqu’il est omis, il revient à la clé d’environnement par défaut du type d’authentification, par ex. OPENAI_API_KEY pour openai), avec des champs facultatifs name, description, baseUrl et generationConfig. Les identifiants ne sont jamais enregistrés dans les paramètres ; le runtime les lit depuis process.env[envKey]. Les modèles Qwen OAuth restent codés en dur et ne peuvent pas être remplacés.

Note

Seule la commande /model expose les types d’authentification non par défaut. Anthropic, Gemini, etc., doivent être définis via modelProviders. La commande /auth liste trois options de premier niveau : Alibaba ModelStudio (avec Coding Plan, Token Plan et Standard API Key dans son sous-menu), Fournisseurs tiers et Fournisseur personnalisé. (Qwen OAuth n’est plus une entrée de dialogue sélectionnable ; son niveau gratuit a été interrompu le 15 avril 2026.)

Note

Unicité des modèles : Les modèles au sein du même authType sont identifiés de manière unique par la combinaison de id + baseUrl. Cela signifie que vous pouvez définir le même ID de modèle (par ex. "gpt-4o") plusieurs fois sous un seul authType, tant que chaque entrée a une baseUrl différente — par exemple, l’une pointant directement vers OpenAI et l’autre vers un point de terminaison proxy. Si deux entrées partagent le même id et la même baseUrl (ou si les deux omettent baseUrl), la première occurrence l’emporte et les doublons suivants sont ignorés avec un avertissement.

Exemples de configuration par type d’authentification

Vous trouverez ci-dessous des exemples de configuration complets pour différents types d’authentification, montrant les paramètres disponibles et leurs combinaisons.

Types d’authentification pris en charge

Les clés de l’objet modelProviders doivent être des valeurs authType valides. Les types d’authentification actuellement pris en charge sont :

Auth TypeDescription
openaiAPI compatibles avec OpenAI (OpenAI, Azure OpenAI, serveurs d’inférence locaux comme vLLM/Ollama)
anthropicAPI Anthropic Claude
geminiAPI Google Gemini
qwen-oauthQwen OAuth (codé en dur, ne peut pas être remplacé dans modelProviders)
vertex-aiGoogle Vertex AI (utilise le protocole gemini et le SDK @google/genai en mode Vertex AI ; sa sélection définit GOOGLE_GENAI_USE_VERTEXAI=true)

[!warning] Si une clé de type d’authentification inconnue est utilisée (par ex. une faute de frappe comme "openai-custom"), une clé non vide est acceptée telle quelle comme son propre groupe de type d’authentification, mais elle ne correspondra à aucun protocole connu — ses modèles ne fonctionneront donc pas comme prévu et ne se comporteront pas correctement dans le sélecteur /model. Seules les clés vides (vides ou ne contenant que des espaces) sont ignorées. Utilisez toujours l’une des valeurs de type d’authentification prises en charge listées ci-dessus.

SDK utilisés pour les requêtes API

Qwen Code utilise les SDK officiels suivants pour envoyer des requêtes à chaque fournisseur :

Auth TypeSDK Package
openaiopenai - SDK officiel OpenAI pour Node.js
anthropic@anthropic-ai/sdk - SDK officiel Anthropic
gemini@google/genai - SDK officiel Google GenAI
qwen-oauthopenai avec un fournisseur personnalisé (compatible DashScope)

Cela signifie que la baseUrl que vous configurez doit être compatible avec le format d’API attendu par le SDK correspondant. Par exemple, lors de l’utilisation du type d’authentification openai, le point de terminaison doit accepter les requêtes au format de l’API OpenAI.

Fournisseurs compatibles avec OpenAI (openai)

Ce type d’authentification prend en charge non seulement l’API officielle d’OpenAI, mais aussi tout point de terminaison compatible avec OpenAI, y compris les fournisseurs de modèles agrégés comme OpenRouter et Requesty.

{ "env": { "OPENAI_API_KEY": "sk-your-actual-openai-key-here", "OPENROUTER_API_KEY": "sk-or-your-actual-openrouter-key-here", "REQUESTY_API_KEY": "sk-your-actual-requesty-key-here" }, "modelProviders": { "openai": { "protocol": "openai", "models": [ { "id": "gpt-4o", "name": "GPT-4o", "envKey": "OPENAI_API_KEY", "baseUrl": "https://api.openai.com/v1", "generationConfig": { "timeout": 60000, "maxRetries": 3, "enableCacheControl": true, "contextWindowSize": 128000, "modalities": { "image": true }, "customHeaders": { "X-Client-Request-ID": "req-123" }, "extra_body": { "enable_thinking": true, "service_tier": "priority" }, "samplingParams": { "temperature": 0.2, "top_p": 0.8, "max_tokens": 4096, "presence_penalty": 0.1, "frequency_penalty": 0.1 } } }, { "id": "gpt-4o-mini", "name": "GPT-4o Mini", "envKey": "OPENAI_API_KEY", "baseUrl": "https://api.openai.com/v1", "generationConfig": { "timeout": 30000, "samplingParams": { "temperature": 0.5, "max_tokens": 2048 } } }, { "id": "openai/gpt-4o", "name": "GPT-4o (via OpenRouter)", "envKey": "OPENROUTER_API_KEY", "baseUrl": "https://openrouter.ai/api/v1", "generationConfig": { "timeout": 120000, "maxRetries": 3, "samplingParams": { "temperature": 0.7 } } }, { "id": "openai/gpt-4o-mini", "name": "GPT-4o Mini (via Requesty)", "envKey": "REQUESTY_API_KEY", "baseUrl": "https://router.requesty.ai/v1", "generationConfig": { "timeout": 120000, "maxRetries": 3, "samplingParams": { "temperature": 0.7 } } } ] } } }

Anthropic (anthropic)

{ "env": { "ANTHROPIC_API_KEY": "sk-ant-your-actual-anthropic-key-here" }, "modelProviders": { "anthropic": { "protocol": "anthropic", "models": [ { "id": "claude-3-5-sonnet", "name": "Claude 3.5 Sonnet", "envKey": "ANTHROPIC_API_KEY", "baseUrl": "https://api.anthropic.com/v1", "generationConfig": { "timeout": 120000, "maxRetries": 3, "contextWindowSize": 200000, "samplingParams": { "temperature": 0.7, "max_tokens": 8192, "top_p": 0.9 } } }, { "id": "claude-3-opus", "name": "Claude 3 Opus", "envKey": "ANTHROPIC_API_KEY", "baseUrl": "https://api.anthropic.com/v1", "generationConfig": { "timeout": 180000, "samplingParams": { "temperature": 0.3, "max_tokens": 4096 } } } ] } } }

Google Gemini (gemini)

{ "env": { "GEMINI_API_KEY": "AIza-your-actual-gemini-key-here" }, "modelProviders": { "gemini": { "protocol": "gemini", "models": [ { "id": "gemini-2.0-flash", "name": "Gemini 2.0 Flash", "envKey": "GEMINI_API_KEY", "baseUrl": "https://generativelanguage.googleapis.com", "capabilities": { "vision": true }, "generationConfig": { "timeout": 60000, "maxRetries": 2, "contextWindowSize": 1000000, "schemaCompliance": "auto", "samplingParams": { "temperature": 0.4, "top_p": 0.95, "max_tokens": 8192, "top_k": 40 } } } ] } } }

Modèles auto-hébergés locaux (via une API compatible OpenAI)

La plupart des serveurs d’inférence locaux (vLLM, Ollama, LM Studio, etc.) fournissent un point de terminaison d’API compatible avec OpenAI. Configurez-les en utilisant le type d’authentification openai avec une baseUrl locale :

{ "env": { "OLLAMA_API_KEY": "ollama", "VLLM_API_KEY": "not-needed", "LMSTUDIO_API_KEY": "lm-studio" }, "modelProviders": { "openai": { "protocol": "openai", "models": [ { "id": "qwen2.5-7b", "name": "Qwen2.5 7B (Ollama)", "envKey": "OLLAMA_API_KEY", "baseUrl": "http://localhost:11434/v1", "generationConfig": { "timeout": 300000, "maxRetries": 1, "contextWindowSize": 32768, "samplingParams": { "temperature": 0.7, "top_p": 0.9, "max_tokens": 4096 } } }, { "id": "llama-3.1-8b", "name": "Llama 3.1 8B (vLLM)", "envKey": "VLLM_API_KEY", "baseUrl": "http://localhost:8000/v1", "generationConfig": { "timeout": 120000, "maxRetries": 2, "contextWindowSize": 128000, "samplingParams": { "temperature": 0.6, "max_tokens": 8192 } } }, { "id": "local-model", "name": "Local Model (LM Studio)", "envKey": "LMSTUDIO_API_KEY", "baseUrl": "http://localhost:1234/v1", "generationConfig": { "timeout": 60000, "samplingParams": { "temperature": 0.5 } } } ] } } }

Pour les serveurs locaux qui ne nécessitent pas d’authentification, vous pouvez utiliser n’importe quelle valeur fictive pour la clé API :

# Pour Ollama (aucune authentification requise) export OLLAMA_API_KEY="ollama" # Pour vLLM (si aucune authentification n'est configurée) export VLLM_API_KEY="not-needed"
Note

Le paramètre extra_body est uniquement pris en charge pour les fournisseurs compatibles avec OpenAI (openai, qwen-oauth). Il est ignoré pour les fournisseurs Anthropic et Gemini.

Note

À propos de envKey : Le champ envKey spécifie le nom d’une variable d’environnement, et non la valeur réelle de la clé API. Pour que la configuration fonctionne, vous devez vous assurer que la variable d’environnement correspondante est définie avec votre véritable clé API. Il y a deux façons de procéder :

  • Option 1 : Utiliser un fichier .env (recommandé pour des raisons de sécurité) :
    # ~/.qwen/.env (ou racine du projet) OPENAI_API_KEY=sk-your-actual-key-here
    Assurez-vous d’ajouter .env à votre .gitignore pour éviter de committer accidentellement des secrets.
  • Option 2 : Utiliser le champ env dans settings.json (comme montré dans les exemples ci-dessus) :
    { "env": { "OPENAI_API_KEY": "sk-your-actual-key-here" } }

Chaque exemple de fournisseur inclut un champ env pour illustrer comment la clé API doit être configurée.

Alibaba Cloud Coding Plan

Alibaba Cloud Coding Plan fournit un ensemble préconfiguré de modèles Qwen optimisés pour les tâches de codage. Cette fonctionnalité est disponible pour les utilisateurs disposant d’un accès API à Alibaba Cloud Coding Plan et offre une expérience de configuration simplifiée avec des mises à jour automatiques de la configuration des modèles.

Vue d’ensemble

Lorsque vous vous authentifiez avec une clé API Alibaba Cloud Coding Plan à l’aide de la commande /auth, Qwen Code configure automatiquement les modèles suivants :

ID du modèleNomDescription
qwen3.5-plusqwen3.5-plusModèle avancé avec la réflexion activée
qwen3.6-plusqwen3.6-plusDernier modèle avec la réflexion activée (abonnés Pro uniquement)
qwen3.7-plusqwen3.7-plusModèle avancé avec la réflexion activée
qwen3-coder-plusqwen3-coder-plusOptimisé pour les tâches de codage
qwen3-coder-nextqwen3-coder-nextModèle de codage expérimental
qwen3-max-2026-01-23qwen3-max-2026-01-23Dernier modèle max avec la réflexion activée
glm-5glm-5Modèle GLM avec la réflexion activée
glm-4.7glm-4.7Modèle GLM avec la réflexion activée
kimi-k2.5kimi-k2.5Modèle Kimi avec réflexion et prise en charge de la vision/vidéo
MiniMax-M2.5MiniMax-M2.5Modèle MiniMax avec la réflexion activée

Configuration

  1. Obtenez une clé API Alibaba Cloud Coding Plan :
  2. Exécutez la commande /auth dans Qwen Code
  3. Sélectionnez Alibaba ModelStudio, puis choisissez Coding Plan dans le sous-menu
  4. Sélectionnez votre région
  5. Saisissez votre clé API lorsque vous y êtes invité

Les modèles seront automatiquement configurés et ajoutés à votre sélecteur /model.

Régions

Alibaba Cloud Coding Plan prend en charge deux régions :

RégionEndpointDescription
Chinehttps://coding.dashscope.aliyuncs.com/v1Endpoint pour la Chine continentale
Global/Internationalhttps://coding-intl.dashscope.aliyuncs.com/v1Endpoint international

La région est sélectionnée lors de l’authentification et stockée dans settings.json sous la configuration modelProviders. Pour changer de région, réexécutez la commande /auth et sélectionnez une région différente.

Stockage de la clé API

Lorsque vous configurez Coding Plan via la commande /auth, la clé API est stockée en utilisant le nom de variable d’environnement réservé BAILIAN_CODING_PLAN_API_KEY. Par défaut, elle est stockée dans le champ env de votre fichier settings.json.

Warning

Recommandation de sécurité : Pour une meilleure sécurité, il est recommandé de déplacer la clé API de settings.json vers un fichier .env séparé et de la charger en tant que variable d’environnement. Par exemple :

# ~/.qwen/.env BAILIAN_CODING_PLAN_API_KEY=your-api-key-here

Assurez-vous ensuite d’ajouter ce fichier à votre .gitignore si vous utilisez des paramètres au niveau du projet.

Mises à jour automatiques

Les configurations des modèles Coding Plan sont versionnées. Lorsque Qwen Code détecte une version plus récente du modèle de configuration, vous serez invité à effectuer la mise à jour. L’acceptation de la mise à jour permettra de :

  • Remplacer les configurations existantes des modèles Coding Plan par les dernières versions
  • Préserver toutes les configurations de modèles personnalisées que vous avez ajoutées manuellement
  • Basculer automatiquement vers le premier modèle de la configuration mise à jour

Le processus de mise à jour garantit que vous avez toujours accès aux dernières configurations et fonctionnalités des modèles sans intervention manuelle.

Configuration manuelle (Avancé)

Si vous préférez configurer manuellement les modèles Coding Plan, vous pouvez les ajouter à votre settings.json comme n’importe quel fournisseur compatible OpenAI :

{ "modelProviders": { "openai": { "protocol": "openai", "models": [ { "id": "qwen3-coder-plus", "name": "qwen3-coder-plus", "description": "Qwen3-Coder via Alibaba Cloud Coding Plan", "envKey": "YOUR_CUSTOM_ENV_KEY", "baseUrl": "https://coding.dashscope.aliyuncs.com/v1" } ] } } }
Note

Lors de l’utilisation de la configuration manuelle :

  • Vous pouvez utiliser n’importe quel nom de variable d’environnement pour envKey
  • Vous n’avez pas besoin de configurer codingPlan.*
  • Les mises à jour automatiques ne s’appliqueront pas aux modèles Coding Plan configurés manuellement
Warning

Si vous utilisez également la configuration automatique de Coding Plan, les mises à jour automatiques peuvent écraser vos configurations manuelles si elles utilisent le même envKey et la même baseUrl que la configuration automatique. Pour éviter cela, assurez-vous que votre configuration manuelle utilise un envKey différent si possible.

Couches de résolution et atomicité

Les valeurs effectives d’authentification/modèle/identifiants sont choisies par champ en utilisant la priorité suivante (le premier présent l’emporte). Vous pouvez combiner --auth-type avec --model pour pointer directement vers une entrée de fournisseur ; ces indicateurs CLI s’exécutent avant les autres couches.

Couche (de la plus haute à la plus basse)authTypemodelapiKeybaseUrlapiKeyEnvKeyproxy
Remplacements programmatiques/authEntrée /authEntrée /authEntrée /auth
Sélection du fournisseur de modèlemodelProvider.idenv[modelProvider.envKey]modelProvider.baseUrlmodelProvider.envKey
Arguments CLI--auth-type--model--openai-api-key--openai-base-url
Variables d’environnementMapping spécifique au fournisseur (ex. OPENAI_MODEL)Mapping spécifique au fournisseur (ex. OPENAI_API_KEY)Mapping spécifique au fournisseur (ex. OPENAI_BASE_URL)
Paramètres (settings.json)security.auth.selectedTypemodel.namesecurity.auth.apiKeysecurity.auth.baseUrl
Par défaut / calculéRepli vers AuthType.QWEN_OAUTHValeur par défaut intégrée (OpenAI ⇒ qwen3.5-plus)Config.getProxy() si configuré

*Lorsqu’ils sont présents, les indicateurs d’authentification CLI remplacent les paramètres. Sinon, security.auth.selectedType ou la valeur par défaut implicite détermine le type d’authentification. Qwen OAuth et OpenAI sont les seuls types d’authentification exposés sans configuration supplémentaire.

Note

--openai-api-key et --openai-base-url sont les seuls indicateurs CLI pour les identifiants. Ils s’appliquent au fournisseur compatible OpenAI actif, quel que soit son nom — il n’y a pas d’indicateurs d’identifiants --anthropic-* / --gemini-*. Les identifiants spécifiques au fournisseur qui ne sont pas passés en CLI sont résolus à partir des variables d’environnement (voir la ligne ci-dessous).

Warning

Obsolescence de security.auth.apiKey et security.auth.baseUrl : La configuration directe des identifiants API via security.auth.apiKey et security.auth.baseUrl dans settings.json est obsolète. Ces paramètres étaient utilisés dans les versions historiques pour les identifiants saisis via l’interface utilisateur, mais le flux de saisie des identifiants a été supprimé dans la version 0.10.1. Ces champs seront entièrement supprimés dans une prochaine version. Il est fortement recommandé de migrer vers modelProviders pour toutes les configurations de modèles et d’identifiants. Utilisez envKey dans modelProviders pour référencer des variables d’environnement pour une gestion sécurisée des identifiants, au lieu de coder en dur les identifiants dans les fichiers de paramètres.

Empilement de la configuration de génération : La couche fournisseur imperméable

La résolution de la configuration suit un modèle d’empilement strict avec une règle cruciale : la couche modelProvider est imperméable.

Fonctionnement

  1. Lorsqu’un modèle modelProvider EST sélectionné (par exemple, via la commande /model en choisissant un modèle configuré par le fournisseur) :

    • L’intégralité du generationConfig du fournisseur est appliquée atomiquement
    • La couche fournisseur est complètement imperméable — les couches inférieures (CLI, env, paramètres) ne participent pas du tout à la résolution du generationConfig
    • Tous les champs définis dans modelProviders[].generationConfig utilisent les valeurs du fournisseur
    • Tous les champs non définis par le fournisseur sont définis sur undefined (non hérités des paramètres)
    • Cela garantit que les configurations du fournisseur agissent comme un « paquet scellé » complet et autonome

    Si un modèle est listé dans modelProviders, placez tous les paramètres de génération spécifiques au modèle dans l’entrée du fournisseur correspondante. Les valeurs model.generationConfig de niveau supérieur, y compris contextWindowSize, modalities, customHeaders et extra_body, sont ignorées pour les modèles du fournisseur. Configurez ces champs sous modelProviders[authType][].generationConfig pour qu’ils s’appliquent.

  2. Lorsqu’AUCUN modèle modelProvider n’est sélectionné (par exemple, en utilisant --model avec un ID de modèle brut, ou en utilisant directement CLI/env/paramètres) :

    • La résolution passe aux couches inférieures
    • Les champs sont remplis depuis CLI → env → paramètres → valeurs par défaut
    • Cela crée un modèle d’exécution (voir la section suivante)

Priorité par champ pour le generationConfig

PrioritéSourceComportement
1Remplacements programmatiquesModifications d’exécution /model, /auth
2modelProviders[authType][].generationConfigCouche imperméable - remplace complètement tous les champs de generationConfig ; les couches inférieures ne participent pas
3settings.model.generationConfigUtilisé uniquement pour les modèles d’exécution (lorsqu’aucun modèle de fournisseur n’est sélectionné)
4Valeurs par défaut du générateur de contenuValeurs par défaut spécifiques au fournisseur (ex. OpenAI vs Gemini) - uniquement pour les modèles d’exécution

Traitement atomique des champs

Les champs suivants sont traités comme des objets atomiques : les valeurs du fournisseur remplacent complètement l’objet entier, aucune fusion n’est effectuée :

  • samplingParams - Température, top_p, max_tokens, etc.
  • customHeaders - En-têtes HTTP personnalisés
  • extra_body - Paramètres supplémentaires du corps de la requête

Exemple

// Paramètres utilisateur (~/.qwen/settings.json) { "model": { "generationConfig": { "timeout": 30000, "samplingParams": { "temperature": 0.5, "max_tokens": 1000 } } } } // Configuration de modelProviders { "modelProviders": { "openai": { "protocol": "openai", "models": [{ "id": "gpt-4o", "envKey": "OPENAI_API_KEY", "generationConfig": { "timeout": 60000, "samplingParams": { "temperature": 0.2 } } }] } } }

Lorsque gpt-4o est sélectionné depuis modelProviders :

  • timeout = 60000 (provenant du provider, écrase les paramètres)
  • samplingParams.temperature = 0.2 (provenant du provider, remplace complètement l’objet settings)
  • samplingParams.max_tokens = undefined (non défini dans le provider, et la couche provider n’hérite pas des paramètres — les champs sont explicitement définis sur undefined s’ils ne sont pas fournis)

Lors de l’utilisation d’un modèle brut via --model gpt-4 (ne provenant pas de modelProviders, crée un Runtime Model) :

  • timeout = 30000 (provenant des paramètres)
  • samplingParams.temperature = 0.5 (provenant des paramètres)
  • samplingParams.max_tokens = 1000 (provenant des paramètres)

La stratégie de fusion pour modelProviders lui-même est REPLACE : l’intégralité de modelProviders provenant des paramètres du projet écrasera la section correspondante dans les paramètres utilisateur, au lieu de fusionner les deux.

Configuration du raisonnement / thinking

Le champ optionnel reasoning sous generationConfig contrôle l’intensité avec laquelle le modèle raisonne avant de répondre. Les convertisseurs Anthropic et Gemini le respectent toujours. Le pipeline compatible OpenAI le respecte sauf si generationConfig.samplingParams est défini — voir la mise en garde « Interaction avec samplingParams » ci-dessous.

{ "modelProviders": { "openai": { "protocol": "openai", "models": [ { "id": "deepseek-v4-pro", "name": "DeepSeek V4 Pro", "baseUrl": "https://api.deepseek.com/v1", "envKey": "DEEPSEEK_API_KEY", "generationConfig": { // L'échelle à quatre niveaux : // 'low' | 'medium' — mappé côté serveur à 'high' sur DeepSeek // 'high' — intensité de raisonnement par défaut // 'max' — niveau extra-fort spécifique à DeepSeek // Ou définir sur `false` pour désactiver complètement le raisonnement. "reasoning": { "effort": "max" }, }, }, ], }, }, }

Comportement par provider

Protocole / providerFormat réseauNotes
OpenAI / DeepSeek (api.deepseek.com)Paramètre de corps plat reasoning_effort: <effort>Lorsque reasoning.effort est défini dans la forme de configuration imbriquée, il est réécrit en reasoning_effort plat et 'low'/'medium' sont normalisés en 'high', 'xhigh' en 'max' — reflétant la rétrocompatibilité côté serveur  de DeepSeek. Les overrides de samplingParams.reasoning_effort ou extra_body.reasoning_effort de haut niveau ignorent cette normalisation et sont envoyés tels quels.
OpenAI (autres serveurs compatibles)reasoning: { effort, ... } transmis tel quelDéfini via samplingParams (par ex. samplingParams.reasoning_effort pour GPT-5/o-series) lorsque le provider attend un format différent.
Anthropic (vrai api.anthropic.com)output_config: { effort } plus l’en-tête bêta effort-2025-11-24Le vrai Anthropic accepte uniquement 'low'/'medium'/'high'. 'max' est limité à 'high' avec une ligne debugLogger.warn (une fois par générateur) ; si vous voulez une intensité maximale, changez le baseURL pour un point de terminaison compatible DeepSeek qui le prend en charge.
Anthropic (api.deepseek.com/anthropic)Même output_config: { effort } + en-tête bêta'max' est transmis sans modification.
Gemini (@google/genai)thinkingConfig: { includeThoughts: true, thinkingLevel }'low'LOW, 'high'/'max'HIGH, autres → THINKING_LEVEL_UNSPECIFIED (Gemini n’a pas de niveau MAX).

reasoning: false

Définir reasoning: false (le booléen littéral) désactive explicitement la réflexion sur tous les providers — utile pour les requêtes secondaires peu coûteuses qui ne bénéficient pas du raisonnement. Ceci est également respecté au niveau de la requête via request.config.thinkingConfig.includeThoughts: false pour les appels ponctuels (par ex. génération de suggestions).

Sur un baseURL api.deepseek.com, le pipeline OpenAI émet le champ explicite thinking: { type: 'disabled' } requis par DeepSeek V4+ — la valeur par défaut côté serveur est 'enabled', donc omettre simplement reasoning_effort paierait tout de même la latence/coût de la réflexion. Les backends DeepSeek auto-hébergés (sglang/vllm) et les autres serveurs compatibles OpenAI ne reçoivent pas ce champ ; si vous devez désactiver la réflexion sur ceux-ci, injectez thinking: { type: 'disabled' } (ou tout autre paramètre exposé par votre framework d’inférence) via samplingParams/extra_body.

Interaction avec samplingParams (compatible OpenAI uniquement)

Warning

Lorsque generationConfig.samplingParams est défini sur un provider compatible OpenAI, le pipeline envoie ces clés sur le fil telles quelles et ignore complètement l’injection séparée de reasoning. Ainsi, une configuration comme { samplingParams: { temperature: 0.5 }, reasoning: { effort: 'max' } } supprimera silencieusement le champ reasoning sur les requêtes OpenAI/DeepSeek.

Si vous définissez samplingParams, incluez le paramètre de raisonnement directement à l’intérieur — pour DeepSeek, c’est samplingParams.reasoning_effort, pour GPT-5/o-series c’est samplingParams.reasoning_effort (leur champ plat) ou samplingParams.reasoning (l’objet imbriqué). Pour OpenRouter et d’autres providers, le nom du champ varie ; consultez la documentation du provider.

Les convertisseurs Anthropic et Gemini ne sont pas affectés — ils lisent toujours reasoning.effort directement, indépendamment de samplingParams.

budget_tokens

Vous pouvez définir un budget exact de tokens de réflexion en incluant budget_tokens à côté de effort :

"reasoning": { "effort": "high", "budget_tokens": 50000 }

Pour Anthropic, cela devient thinking.budget_tokens. Pour OpenAI/DeepSeek, le champ est conservé mais actuellement ignoré par le serveur — reasoning_effort est le paramètre principal.

Modèles Provider vs Modèles Runtime

Qwen Code fait la distinction entre deux types de configurations de modèle :

Modèle Provider

  • Défini dans la configuration modelProviders
  • Possède un package de configuration complet et atomique
  • Lorsqu’il est sélectionné, sa configuration est appliquée comme une couche imperméable
  • Apparaît dans la liste de commandes /model avec toutes les métadonnées (nom, description, capacités)
  • Recommandé pour les workflows multi-modèles et la cohérence d’équipe

Modèle Runtime

  • Créé dynamiquement lors de l’utilisation d’IDs de modèle bruts via CLI (--model), variables d’environnement ou paramètres
  • Non défini dans modelProviders
  • La configuration est construite en « projetant » à travers les couches de résolution (CLI → env → paramètres → défauts)
  • Capturé automatiquement en tant que RuntimeModelSnapshot lorsqu’une configuration complète est détectée
  • Permet la réutilisation sans ressaisir les identifiants

Cycle de vie du RuntimeModelSnapshot

Lorsque vous configurez un modèle sans utiliser modelProviders, Qwen Code crée automatiquement un RuntimeModelSnapshot pour préserver votre configuration :

# Ceci crée un RuntimeModelSnapshot avec l'ID : $runtime|openai|my-custom-model qwen --auth-type openai --model my-custom-model --openai-api-key $KEY --openai-base-url https://api.example.com/v1

Le snapshot :

  • Capture l’ID du modèle, la clé API, l’URL de base et la configuration de génération
  • Persiste à travers les sessions (stocké en mémoire pendant l’exécution)
  • Apparaît dans la liste de commandes /model en tant qu’option runtime
  • Peut être activé en utilisant /model $runtime|openai|my-custom-model

Différences clés

AspectModèle ProviderModèle Runtime
Source de configurationmodelProviders dans les paramètresCouches CLI, env, paramètres
Atomicité de la configurationPackage complet et imperméableEn couches, chaque champ résolu indépendamment
RéutilisabilitéToujours disponible dans la liste /modelCapturé en tant que snapshot, apparaît si complet
Partage en équipeOui (via les paramètres commités)Non (local à l’utilisateur)
Stockage des identifiantsRéférence via envKey uniquementPeut capturer la clé réelle dans le snapshot

Quand utiliser chacun

  • Utilisez les Modèles Provider lorsque : vous avez des modèles standard partagés dans une équipe, avez besoin de configurations cohérentes, ou souhaitez éviter les remplacements accidentels
  • Utilisez les Modèles Runtime lorsque : vous testez rapidement un nouveau modèle, utilisez des identifiants temporaires, ou travaillez avec des points de terminaison ad hoc

Persistance de la sélection et recommandations

Important

Définissez modelProviders dans le scope utilisateur ~/.qwen/settings.json dans la mesure du possible et évitez de persister les remplacements d’identifiants dans n’importe quel scope. Conserver le catalogue de providers dans les paramètres utilisateur évite les conflits de fusion/remplacement entre les scopes projet et utilisateur, et garantit que les mises à jour de /auth et /model sont toujours réécrites dans un scope cohérent.

  • /model et /auth persistent model.name (lorsque applicable) et security.auth.selectedType dans le scope inscriptible le plus proche qui définit déjà modelProviders ; sinon, ils reviennent au scope utilisateur. Cela maintient les fichiers d’espace de travail/utilisateur synchronisés avec le catalogue de providers actif.
  • Sans modelProviders, le résolveur mélange les couches CLI/env/paramètres, créant des Modèles Runtime. C’est acceptable pour les configurations à provider unique, mais fastidieux lors de changements fréquents. Définissez des catalogues de providers chaque fois que les workflows multi-modèles sont courants afin que les changements restent atomiques, attribués à une source et débogables.
Last updated on