快速结论:该报错发生在 LiteLLM 升级后,当请求中设置了 timeout、request_timeout 或 stream_timeout(通过请求体字段或 x-litellm-timeout / x-litellm-stream-timeout 头)时,内部标记 client_side_timeout 被错误地透传到 Anthropic、Bedrock、Vertex、Azure 等出站请求体中,从而触发 400 错误。请优先确认 LiteLLM 版本并升级到包含 #37346 修复的版本。
适用环境:LiteLLM(Python SDK 或代理服务器),涉及 Anthropic、Bedrock、Vertex、Azure 等提供商路由;触发版本为 #34416 合并(2026-08-10)之后至 #37346 修复合并之前的版本。
最快修复方案:升级 LiteLLM 至包含 #37346 修复的版本(该修复于 2026-08-18 合并至 litellm_internal_staging 分支)。该 PR 将 client_side_timeout 加入 all_litellm_params 列表,使 get_non_default_completion_params() 在调用 get_optional_params() 之前将其过滤掉,从而不再泄漏到出站请求体。
注意事项:Issue 作者指出,若直接调用 get_optional_params() 并将 client_side_timeout=True 传入,该标记仍会泄漏到 optional_params 中。这属于纵深防御层面的残留风险,但 Issue 确认在实际请求路径(通过 litellm.completion())中已不可复现。
问题场景
在使用 LiteLLM 的 Python SDK 或代理服务时,任何设置了显式超时参数(timeout、request_timeout、stream_timeout)的请求,只要目标提供商为 Anthropic、Bedrock、Vertex 或 Azure,就会稳定返回 400 错误。该问题由 Issue 作者自己的 PR #34416 引入,属于回归缺陷。
报错原文
400 invalid_request_error: "client_side_timeout: Extra inputs are not permitted"
原因分析
根本原因来自 PR #34416:该 PR 在 litellm_pre_call_utils.py 中新增了一个仅供内部使用的标记 client_side_timeout,目的是让回退事件处理器的冷却触发逻辑能够区分“客户端强制的 408”与“真实的部署故障”。虽然该 PR 正确处理了客户端伪造值并从请求体剥离,但没有覆盖 get_optional_params() 的调用路径。
在 PreProcessNonDefaultParams.base_pre_process_non_default_params(位于 litellm/utils.py)中,代码会无条件地将 **kwargs 溢出桶中的每个键复制到 passed_params(仅少数已有键/前缀做了跳过处理)。随后 add_provider_specific_params_to_optional_params 将其原样转发到 optional_params(对 OpenAI 兼容提供商则是 extra_body),最终被序列化进出站 HTTP 请求体——于是 client_side_timeout 泄漏到了请求体中,触发提供商侧的 400 校验错误。
环境排查
- 确认 LiteLLM 版本:若早于 v1.93.0 或晚于 #37346 修复合并版本,大概率不会触发此问题。
- 检查目标提供商:Anthropic、Bedrock、Vertex、Azure 均会触发;OpenAI 兼容提供商的表现可能不同(标记会进入
extra_body)。 - 检查是否通过代理调用:代理的预调用钩子会写入
client_side_timeout,然后调用litellm.completion()或acompletion(),此路径同样受影响。
解决步骤
- 确认当前 LiteLLM 版本,查看是否处于受影响区间(#34416 合并后至 #37346 修复合并前)。
- 升级 LiteLLM 到包含 #37346 修复的版本(该修复于 2026-08-18 合并至
litellm_internal_staging,随后进入正式发布版本)。可优先尝试升级到最新稳定版。 - 若无法立即升级,临时规避方案是:在请求中不设置任何显式超时参数(包括请求体字段和
x-litellm-timeout/x-litellm-stream-timeout头),以避开触发路径。 - 升级后,验证 Issue 中描述的复现脚本(对
vertex_ai/claude-haiku-4-5等模型设置timeout=120)不再返回 400。
验证方法
使用 Issue 中的复现代码对升级后的 LiteLLM 执行请求,确认返回正常响应而非 400 错误。同时可查看调试日志,确认出站请求体中不再包含 client_side_timeout 字段。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug] Gmail trigger silently stops after 7 days: subscription expires_at is persisted as -1](https://www.chat-gpts.plus/wp-content/uploads/2026/09/41162-d3216684-768x403.jpg)

![[Bug]: Strict tool calling attaches no structural tag when the reasoning and tool parsers share a parser engine](https://www.chat-gpts.plus/wp-content/uploads/2026/09/53745-ee48e740-768x403.jpg)