快速结论:该报错通常出现在 LiteLLM Proxy 以 hosted_vllm 接入 OpenAI 兼容后端、开启流式输出并处于高负载时。流式过程中上游返回 500(或连接异常)后,被异常映射逻辑包装成了误导性的 APIConnectionError: Hosted_vllmException,优先排查上游 vLLM 服务是否过载或流式中断,同时关注异常映射是否丢失了真实状态码。
适用环境:LiteLLM Proxy(hosted_vllm 提供商,custom_llm_provider: hosted_vllm);Python 3.13(依据 traceback 路径 /app/.venv/lib/python3.13);使用流式调用并配置了 stream_timeout;模型标识为 glm53-fp8;后端为 OpenAI 兼容的 vLLM HTTP 服务。Issue 未确认具体 LiteLLM 版本、CUDA 版本与显卡型号。
最快修复方案:暂无确认的一步修复方案。Issue 中仅提供了社区提出的修复思路(在 _map_openai_exception() 中先安全提取并归一化状态码,再按状态码映射),未说明已合入或已验证。
注意事项:上述修复只是根据 traceback 推断的代码级方案,属于“可优先尝试”的候选,并非官方确认结论。即便修正映射,也只是让错误类型更准确(500 应映射为 InternalServerError),不能消除上游 vLLM 在高负载下返回 500 或流式中断的根因,仍需排查后端容量、超时与连接稳定性。
问题场景
用户通过 LiteLLM Proxy 调用 hosted_vllm 类型的模型(glm53-fp8),api_base 指向 OpenAI 兼容的 vLLM 服务 http://<ip>:<port>/v1,并启用了流式响应。在高负载或流式传输过程中,请求以 HTTP 500 失败,但客户端收到的错误被包装为 litellm.APIConnectionError: APIConnectionError: Hosted_vllmException -,错误信息中缺少真实的上游状态码与原始消息,导致排查困难。
从 traceback 可见调用链经过 proxy_server.py 的流式生成器、responses_id_security.py 钩子、router.py 的 stream_with_fallbacks,最终在 streaming_handler.py 的 _handle_stream_fallback_error 中进入 exception_mapping_utils.py 的 exception_type → _map_openai_exception,抛出 APIConnectionError。
报错原文
[Bug]: Request Failed Error Code: 500 Message: litellm.APIConnectionError: APIConnectionError: Hosted_vllmException -
"error_code": "500"
"error_class": "APIConnectionError"
"llm_provider": "hosted_vllm"
"error_message": "litellm.APIConnectionError: APIConnectionError: Hosted_vllmException - "
File ".../litellm/litellm_core_utils/streaming_handler.py", line 2271, in _handle_stream_fallback_error
mapped_exception = exception_type(
File ".../litellm/litellm_core_utils/exception_mapping_utils.py", line 513, in _map_openai_exception
raise APIConnectionError(
原因分析
根据 Issue 评论中的分析,当流式过程中发生 httpx 连接错误或超时(尤其在高负载下),_handle_stream_fallback_error 会把原始异常传给 exception_type()。由于 hosted_vllm 属于 OpenAI 兼容提供商,异常会进入 _map_openai_exception(),但映射在该函数内失败,原因可能有两点:
- 状态码位置不匹配:映射逻辑检查的是
hasattr(original_exception, "status_code"),而部分 httpx 异常(例如HTTPStatusError)的状态码位于original_exception.response.status_code,直接属性上并不存在。 - 类型比较过严:即使取到状态码,代码使用严格的整数相等比较(例如
== 500);若状态码被提取为字符串"500",比较结果为 False。
由于状态码未能匹配,映射跳过 InternalServerError 等具体 HTTP 错误分支,落到最后的 else 分支,统一抛出 APIConnectionError,并拼接上动态的 exception_provider(即 Hosted_vllmException)。
需要说明:以上为 Issue 评论者基于 traceback 提出的“可能原因”,尚未经官方确认与合并验证。
环境排查
- 确认 LiteLLM 实际安装版本,并对照
exception_mapping_utils.py/streaming_handler.py中相关行号是否与 traceback 一致。 - 确认 Python 版本(traceback 显示为 3.13)与虚拟环境路径是否对应。
- 确认
hosted_vllm上游服务(vLLM)是否健康:直接调用http://<ip>:<port>/v1的接口是否偶发 500 或连接被重置。 - 确认模型配置中的超时设置是否合理:Issue 配置中同时存在
timeout: "1800"与stream_timeout: "2",需确认流式超时是否为触发点。 - 确认代理层(反向代理、负载均衡)是否在上游响应未完成时中断长连接,导致 httpx 侧抛出连接类异常。
- 确认并发与容量:Issue 配置中
max_parallel_requests: 30、tpm与rpm较大,若后端实际吞吐不足,可能在高负载下触发 500。
解决步骤
- 先区分问题归属:用相同的
api_base直接请求上游 vLLM 的 OpenAI 兼容接口(可优先尝试非流式与流式各一次),确认是否由上游自身返回 500 或中途断开连接。 - 若上游确实在高负载下报错,优先处理后端侧:降低 LiteLLM 侧并发(如调低
max_parallel_requests)、确认 vLLM 实例资源与健康检查状态。 - 检查 LiteLLM 模型中
stream_timeout与timeout的取值,判断流式超时是否过短导致误判为连接异常(该判断为推测,需结合日志验证)。 - 若排查后确认上游返回的是 500,但 LiteLLM 报成
APIConnectionError,可优先尝试 Issue 评论中提出的代码修复:在litellm/litellm_core_utils/exception_mapping_utils.py的_map_openai_exception()开头,先安全提取original_exception.status_code或original_exception.response.status_code,转为整数后统一用于后续if/elif分支比较(评论给出的是约 422 行附近的修改示例,实际位置需以本地版本为准)。 - 修改后需在同一环境下复现流式高负载场景,确认 500 被映射为
InternalServerError而非APIConnectionError。
验证方法
在压力或同类并发条件下重放原本失败的流式请求:若上游确为 500,修复后错误类型应体现为 InternalServerError,并保留上游状态码与消息,而不是笼统的 APIConnectionError: Hosted_vllmException -;同时观察上游 vLLM 日志是否仍存在 500 或流式中断记录,以区分“错误被正确映射”和“问题真正消失”。若未做代码修改,则验证重点是确认上游是否仍有 500/连接异常发生。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug]: Batch retrieve returns 403 for team-scoped models since v1.103.0 (authorize_model_for_key checks internal model_name_{team_id}_{uuid}](https://www.chat-gpts.plus/wp-content/uploads/2026/10/46958-8bc36f96-768x403.jpg)

