[Bug]: /v1/images/edits with no `image` part returns 500 with a raw Python TypeError instead of 400

请求 POST /v1/images/edits 时缺少必需的多部分(multipart)字段 image ,服务端会把客户端缺少参数的请求当作内部异常处理,返回 HTTP 500 并泄漏 Python 函数签名,而不是返回本应更合适的 400。优先确认请求体是否包含 image 文件字段,并检查

快速结论:请求 POST /v1/images/edits 时缺少必需的多部分(multipart)字段 image,服务端会把客户端缺少参数的请求当作内部异常处理,返回 HTTP 500 并泄漏 Python 函数签名,而不是返回本应更合适的 400。优先确认请求体是否包含 image 文件字段,并检查 LiteLLM 版本是否已包含修复。

适用环境:Issue 已确认在 LiteLLM 代理环境出现,使用 Docker 镜像 ghcr.io/berriai/litellm:1.101.0,复现版本为 v1.101.0;其他 Python、CUDA、显卡或客户端版本信息在 Issue 中未给出。

最快修复方案:升级到 LiteLLM v1.106.0 或更高版本;该问题已在 PR #43787 中修复,并在 v1.106.0 发布。若暂时无法升级,可优先尝试在客户端侧校验并补齐 image 多部分字段,避免发出缺少该字段的请求。

注意事项:Issue 中说明在 current main 上已验证缺少 image 的请求返回 400;升级后问题仍然存在时,应在原 Issue 重新打开并反馈。客户端侧补齐 image 字段只是绕过方式,不会改变服务端对缺少必需字段的响应语义。

问题场景

用户通过 LiteLLM 代理调用 OpenAI 兼容的图片编辑接口 POST /v1/images/edits,请求中使用了 model 和 prompt 等多部分字段,但没有携带必需的 image 文件字段。该场景在 LiteLLM 1.101.0 Docker 代理上可复现。

报错原文

{"error":{"message":"aimage_edit() missing 1 required positional argument: 'image'",
          "type":"internal_server_error","param":null,"code":"500"}}

原因分析

最可能的原因是请求缺少必需的 image 多部分字段后,LiteLLM 没有在进入图片编辑处理前做参数校验,而是直接调用内部函数并触发 Python TypeError。该异常随后被包装为 internal_server_error,因此返回 500 并暴露内部函数签名。Issue 指出这属于客户端错误,正确状态码应为 400;同时指出 500 会让 OpenAI SDK 默认认为请求可重试,从而造成无效重试放大。

环境排查

  • 确认 LiteLLM 版本:Issue 在 v1.101.0 复现,修复版本为 v1.106.0。
  • 确认部署方式:Issue 使用 Docker 镜像 ghcr.io/berriai/litellm:1.101.0 的代理模式。
  • 检查请求是否为 multipart/form-data,并确认是否包含 image 文件字段,而不仅是 model 与 prompt。
  • 确认客户端或网关是否会在收到 500 后自动重试;若存在重试,需同时排查无效请求被放大的情况。
  • Issue 未提供 Python、CUDA、PyTorch、显卡或具体图片模型的版本信息,这些项目无法据此确认。

解决步骤

  1. 先检查调用 /v1/images/edits 的请求体,确认 multipart 中已包含名为 image 的文件字段;若缺失,补上该字段后再发起请求。
  2. 将 LiteLLM 升级到 v1.106.0 或更高版本,以获得 PR #43787 中的修复。
  3. 升级后使用缺少 image 字段的请求进行回归验证,预期应返回 400,而不是 500。
  4. 如果升级后仍然返回 500,保留请求与响应信息,并在原 Issue #42185 中重新打开反馈。

验证方法

向 /v1/images/edits 发送不包含 image 多部分字段的请求,确认响应状态码为 400,且不再出现 aimage_edit() missing 1 required positional argument: 'image' 这类内部 TypeError。Issue 评论称已在 current main 验证缺少 image 的请求返回 400。

参考来源

BerriAI/litellm #42185

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 30798

发表回复

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