[Bug]: reasoning_effort=’none’ capability gate ignores base_model, returning 400 for Azure custom deployment names (Azure GPT-5)

用户运行 LiteLLM Proxy 或通过 Python SDK 调用 Azure OpenAI 自定义部署名称(如 model: azure/gpt-5.1_2025-11-13_global ,并设置 base_model: azure/gpt-5.1 )。当参数中包含 reasoning_e

[Bug]: reasoning_effort='none' capability gate ignores base_model, returning 400 for Azure custom deployment names (Azure GPT-5)

[Bug]: reasoning_effort=’none’ capability gate ignores base_model, returning 400 for Azure custom deployment names (Azure GPT-5)

快速结论:使用 Azure 自定义部署名称(如 azure/my-gpt5-2025-11-13)并设置 reasoning_effort='none' 时,LiteLLM 的 GPT-5 能力门控(capability gate)仅检查部署名字符串,而忽略了 base_model,导致即使基础模型支持 none 级别,请求仍被拒绝并返回 400。优先升级到 LiteLLM v1.87.0 或更高版本;v1.87.0 包含修复。

问题场景

用户运行 LiteLLM Proxy 或通过 Python SDK 调用 Azure OpenAI 自定义部署名称(如 model: azure/gpt-5.1_2025-11-13_global,并设置 base_model: azure/gpt-5.1)。当参数中包含 reasoning_effort='none' 时,请求被 LiteLLM 自身拒绝,而不是被 Azure 拒绝。

报错原文

litellm.UnsupportedParamsError: Azure OpenAI does not support reasoning_effort='none'
for this model. Supported values are: 'low', 'medium', and 'high'. To drop this
parameter, set `litellm.drop_params=True` or for proxy.

原因分析

核心原因是 PR #22953(首次引入于 v1.82.3)中添加的 supports_none_reasoning_effort 能力检查函数在内部调用 _supports_factory 时,仅根据原始部署字符串(如 azure/gpt-5.1_2025-11-13_global)去查询能力标志,完全没有引入 base_model 作为回退依据。完整的调用链:

  • get_optional_params(model: str, ...)
  • → AzureOpenAIGPT5Config.map_openai_params 调用 self._supports_reasoning_effort_level(model, "none")
  • → _supports_reasoning_effort_level 调用 _supports_factory
  • → _get_model_info_helper

由于部署名称不是标准模型别名(registry key),查找失败走 except → return False 路径,导致请求被拒绝。然而,Azure 端实际接受 reasoning_effort='none'(用户已有实证:通过 model_info: { supports_none_reasoning_effort: true } 覆盖后,请求正常返回 200)。此外,即便 base_model 被正确解析,model_prices_and_context_window.json 中也可能缺少部分 GPT-5 模型的 supports_none_reasoning_effort: true 标记(部分被设为 false),这也可能引发同类问题。

环境排查

  • 确认 LiteLLM 版本:litellm --version 或 Python 中 import litellm; print(litellm.__version__)
  • 确认是否使用自定义 Azure 部署名称(如包含日期后缀、global 等非标准名称)。
  • 确认是否在 model_info 中设置了 base_model(例如 litellm.completion(model="azure/deployment-name", base_model="azure/gpt-5.1", ...))。
  • 如果可能,检查 model_prices_and_context_window.json 中对应基础模型是否包含 "supports_none_reasoning_effort": true

解决步骤

  1. 首选方案:升级到 LiteLLM v1.87.0 或更高版本。 修复 PR #28490(注意 cherry-pick 进入 release 分支,标签可能错误指向 v1.91.0,但 v1.87.0 已包含此修复)改变了 get_optional_params 的解析逻辑,使 Azure 能力门控会回退到 base_model 进行查询。
  2. 临时绕过方案(仅用于验证 Azure 端接受 none): 在模型配置中显式添加 model_info: { supports_none_reasoning_effort: true }。这可以绕过 LiteLLM 的检查,但不是一个长期稳定方案。
  3. 如果升级后问题仍然存在:
    • 检查对应基础模型的 JSON 条目是否缺少 supports_none_reasoning_effort 标志(可能原因:某些 GPT-5 模型别名在 model_prices_and_context_window.json 中没有正确设置该字段)。
    • 如确认是 registry 条目缺失,请在 GitHub 上提交 Issue 或 pr 补充对应条目。

验证方法

在升级后,用自定义部署名称再次发送 reasoning_effort='none' 请求。应当成功返回响应(不抛出 400 / UnsupportedParamsError)。也可在代码中预通过 _supports_reasoning_effort_level(model="azure/deployment-name", level="none") 直接检查能力门控结果,应返回 True

参考来源

BerriAI/litellm #31243

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 13741

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注