LiteLLM “Budget has been exceeded!” error is translated to “Bad Request”

用户在 Docker 环境中运行 Open WebUI (v0.3.21) 和 LiteLLM (1.46.1)。用户通过 Open WebUI 将 LiteLLM 配置为 OpenAI 兼容端点,并在 LiteLLM 中设置了用户预算限制。当用户的查询导致成本超过预算时,LiteLLM 会返回详细

LiteLLM "Budget has been exceeded!" error is translated to "Bad Request"

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

解决步骤

  1. 可优先尝试:升级 Open WebUI 至包含此修复的最新稳定版本或开发版本。根据 Issue 评论,修复已被合并到开发分支。你可以更新你的 Docker 镜像:
    • 拉取最新镜像:docker pull openwebui/open-webui:main(开发版或后续的稳定版)
    • 重新部署容器。
  2. 如果升级不可行:作为临时排查手段,可以直接向 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: …” 的具体错误信息,则说明问题已解决。

参考来源

open-webui/open-webui #5469

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 14694

发表回复

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