Pourquoi « Reasoning Effort » n'est disponible que pour les modèles correspondant à gpt-5*, o1 et o3+

Bonjour à tous,

J’utilise le nœud OpenAI Chat Model avec un point de terminaison personnalisé compatible avec OpenAI (LiteLLM) qui utilise un modèle prenant en charge le raisonnement.

Par exemple, mon modèle (glm-5.2) prend en charge le paramètre reasoning_effort compatible avec OpenAI, mais j’ai remarqué que l’option Reasoning Effort n’apparaît pas dans le nœud. Elle n’apparaît que lors de la sélection d’un modèle dont le nom correspond à certains modèles OpenAI (par exemple, gpt-5.*), ce qui semble être une vérification côté interface.

Après avoir consulté le code source, j’ai constaté que le champ n’est affiché que lorsque le nom du modèle correspond à cette regex :

regex: '(^o1([-\\d]+)?$)|(^o[3-9].*)|(^gpt-5.*)'

Donc, par exemple :

  • :cross_mark: glm-5.2 → Reasoning Effort est masqué
  • :white_check_mark: gpt-5.6 → Reasoning Effort apparaît

La logique de requête elle-même est générique—elle envoie simplement :

{
  "reasoning_effort": "high"
}

Cela signifie que la limitation semble être uniquement au niveau de l’interface.

J’ai également remarqué que les valeurs disponibles sont limitées à low, medium et high. Il serait agréable que le champ soit modifiable (ou du moins qu’il inclue des valeurs supplémentaires comme none, que plusieurs fournisseurs prennent en charge).

Pour les fournisseurs compatibles avec OpenAI comme LiteLLM, vLLM, LM Studio, OpenRouter, etc., les noms de modèles personnalisés peuvent toujours prendre en charge reasoning_effort, donc cette regex empêche les utilisateurs d’accéder à une fonctionnalité que leur backend supporte déjà.

Serait-il logique de :

  • toujours afficher l’option lors de l’utilisation d’une URL de base personnalisée,
  • déterminer le support à partir des capacités du modèle au lieu de faire correspondre le nom du modèle, ou
  • simplement rendre l’option disponible pour tous les modèles compatibles avec OpenAI et laisser le backend valider si elle est supportée ?

Je me demande principalement s’il s’agit d’une décision de conception intentionnelle ou simplement d’un raccourci d’implémentation.

Excellente découverte, @mohamed3nan !!!

Maintenant je sais comment « activer » le raisonnement pour d’autres modèles :partying_face:

Demande de fonctionnalité ici :

Vous pouvez la voter positivement

Merci ! J’ai en fait trouvé une solution de contournement dans les commentaires de ce sujet. Il suffit de basculer le sélecteur de modèle sur « Par ID » et d’entrer manuellement le nom de votre modèle :


Le problème restant est que Reasoning Effort n’accepte que low, medium et high. Il n’y a pas de support pour des valeurs comme none, xhigh ou max, même si beaucoup des derniers modèles de pointe les supportent.

Il semble que ce nœud n’ait pas suivi les capacités de raisonnement les plus récentes…

Espérons qu’il sera mis à jour bientôt, peut-être dans le cadre de n8n v3…

Salut @mohamed3nan
La limite low/medium/high ne concerne pas seulement la liste déroulante, le nœud valide également la valeur dans son générateur de requête. Sur le chemin Chat Completions par défaut, reasoning_effort n’est transmis que s’il est égal à low, medium ou high, donc une valeur comme none, xhigh ou max est supprimée avant l’appel et n’atteint jamais votre endpoint, peu importe la manière dont le modèle est sélectionné.
Pour envoyer un reasoning_effort arbitraire à LiteLLM, contournez le nœud et appelez votre /chat/completions avec un nœud HTTP Request, avec la valeur directement dans le corps, n8n la transmet telle quelle :

{
  "model": "glm-5.2",
  "messages": [ { "role": "user", "content": "..." } ],
  "reasoning_effort": "minimal"
}

Enfin, cela a été résolu avec une bonne approche dans la nouvelle version n8n@2.34.0 :

Il y a un nouveau champ Extra Body que nous pouvons maintenant utiliser pour transmettre tout ce que le backend supporte, comme reasoning_effort.

Merci à tous !