
LiteLLM “Budget has been exceeded!” error is translated to “Bad Request”
快速结论:该报错发生在 Open WebUI 通过 LiteLLM 代理调用模型时,当 LiteLLM 代理返回预算超限的详细错误信息,Open WebUI 未将具体错误内容传递给用户,而是将其翻译为一个通用的 Bad Request 错误。优先检查 Open WebUI 版本是否已更新至包含修复的版本。
问题场景
用户在 Docker 环境中运行 Open WebUI (v0.3.21) 和 LiteLLM (1.46.1)。用户通过 Open WebUI 将 LiteLLM 配置为 OpenAI 兼容端点,并在 LiteLLM 中设置了用户预算限制。当用户的查询导致成本超过预算时,LiteLLM 会返回详细的预算超限错误,但 Open WebUI 将其简化为一个通用的 “Bad Request” 错误,导致用户无法获知具体的预算限制原因。
报错原文
Uh-oh! There was an issue connecting to GPT-4.
External: 400, message='Bad Request', url='http://host.docker.internal:4444/chat/completions'
Docker Container Logs:
ERROR [open_webui.apps.openai.main] 400, message='Bad Request', url='http://host.docker.internal:4444/chat/completions'
Traceback (most recent call last):
File "/app/backend/open_webui/apps/openai/main.py", line 438, in generate_chat_completion
r.raise_for_status()
File "/usr/local/lib/python3.11/site-packages/aiohttp/client_reqrep.py", line 1093, in raise_for_status
raise ClientResponseError(
aiohttp.client_exceptions.ClientResponseError: 400, message='Bad Request', url='http://host.docker.internal:4444/chat/completions'
原因分析
可能原因:Open WebUI 在 open_webui/apps/openai/main.py 文件的 generate_chat_completion 函数中,处理来自上游代理(如 LiteLLM)的 HTTP 400 响应时,仅捕获了通用的 ClientResponseError 并将其转换为 “Bad Request” 错误,而没有检查或传递上游响应的具体错误主体部分(如 {"error":{"message":"Budget has been exceeded!..."}})。这导致原本对用户友好的预算错误信息被掩盖。
该问题已被标记为需要修复,并且根据评论反馈,该 Bug 在开发分支中已得到修正。如果用户遇到此问题,建议升级到包含该修复的版本。
环境排查
- Open WebUI 版本: v0.3.21(问题版本)
- LiteLLM 版本: 1.46.1
- 操作系统: Ubuntu 24.04.1 LTS
- 浏览器: Google Chrome 128.0.6613.84
- 安装方式: Docker
解决步骤
- 可优先尝试:升级 Open WebUI 至包含此修复的最新稳定版本或开发版本。根据 Issue 评论,修复已被合并到开发分支。你可以更新你的 Docker 镜像:
- 拉取最新镜像:
docker pull openwebui/open-webui:main(开发版或后续的稳定版) - 重新部署容器。
- 拉取最新镜像:
- 如果升级不可行:作为临时排查手段,可以直接向 LiteLLM 代理发送带预算限制的测试请求,以验证 LiteLLM 端是否确实返回了详细的错误信息。例如,使用
curl命令测试:curl -X POST http://host.docker.internal:4444/chat/completions -H "Content-Type: application/json" -d '{...}',查看返回的 JSON 体中是否包含 “Budget has been exceeded!”。
验证方法
在 Open WebUI 中,使用已超出 LiteLLM 预算限制的模型进行对话。如果不再看到 “Bad Request” 通用错误,而是显示类似 “Budget has been exceeded! Current cost: … Max budget: …” 的具体错误信息,则说明问题已解决。



