
# Bug: @default endpoint suffix breaks adaptive thinking model classification
Bug: @default endpoint suffix breaks adaptive thinking model classification
快速结论:该问题发生在 LiteLLM 调用 Vertex AI 等支持的 @default 后缀端点时,模型分类器无法识别 adaptive thinking API 要求,导致请求被 Vertex AI 以 HTTP 400 拒绝。最直接的排查方法是确认是否正在使用带 @default 后缀的模型名称。
问题场景
用户在 LiteLLM 中调用 Vertex AI(或其他类似提供商)上的 Anthropic Claude 模型时,使用 @default 后缀指定端点变体,例如 vertex_ai/claude-opus-4-8@default。这些 @default 变体需要使用 adaptive thinking API(thinking.type=adaptive + output_config.effort),但 LiteLLM 的 adaptive-thinking 模型分类器无法识别带后缀的名称。
报错原文
VertexAIException - thinking.type.enabled is not supported; use thinking.type.adaptive
此外,对于部分 provider 的 @default 模型不在模型成本映射表中时,reasoning_effort 会被静默忽略,导致 thinking_tokens=0。
原因分析
LiteLLM 的 _is_adaptive_thinking_model 分类器依赖模型成本映射表(model cost map)来判断模型是否支持 adaptive thinking。模型成本查找辅助函数在搜索模型条目时会去除 provider 前缀(如 vertex_ai/),但没有去除版本后缀 @default(以及其他潜在的 @version 后缀)。因此,vertex_ai/claude-opus-4-8@default 产生的查找候选键为 claude-opus-4-8@default,而该键在模型成本映射表中不存在,返回 None,分类器错误地返回 False。
环境排查
- LiteLLM 版本(已知在 v1.89.3 确认触发,v1.90 对特定模型部分缓解,但根因仍在 v1.91.0 存在)
- 是否使用
@default后缀的模型名称 - 使用的 provider(Vertex AI、Bedrock 等)
- 模型成本映射表(model_cost)的版本
reasoning_effort参数是否被按预期传递
解决步骤
- 确认你的模型名称中包含
@default后缀,例如vertex_ai/claude-opus-4-8@default - 升级 LiteLLM 至包含修复的版本(参考 PR #31768 或 #30108)
- 如果你无法升级,可优先尝试以下变通方案:
- 临时移除
@default后缀,使用不带版本变体的标准模型名称(如果可用) - 在调用中显式设置
thinking.type=adaptive和相关参数(如果不违反模型要求)
- 临时移除
- 若修复版本可用,确认模型成本查找辅助函数已对
@version后缀进行剥离处理 - 检查模型成本映射表中是否已有对应模型的
@default变体条目(推荐维护者同时添加缺失条目)
验证方法
运行以下代码验证修复效果:
from litellm.llms.anthropic.common_utils import AnthropicModelInfo
AnthropicModelInfo._is_adaptive_thinking_model("vertex_ai/claude-opus-4-8@default")
预期输出:True
如果输出仍为 False,则问题未完全修复。此外,发送一次使用 reasoning_effort 的 completions 调用,确认不再出现 HTTP 400 错误且 thinking_tokens>0。
参考来源
相关 PR:
相关重复 Issue:#30101



