Skip to content

[Bug] SVG 矢量图被作为模型图片输入发送,导致不支持该格式的模型返回 400 #946

Description

@inorilzy

问题描述

SVG 矢量图作为附件加入会话后,被识别为图片并显示缩略图;发送给不支持 SVG 图片输入的模型时,请求以 HTTP 400 / PROVIDER_ERROR 失败。

客户端能够预览 SVG,不代表模型接口能够接收 SVG 作为图片输入。 目前用户需要等到请求失败后才能发现格式不兼容,影响图片问答和基于附件生成 HTML 等任务。

本次已观察到的矢量格式为 SVG,不推断其他矢量格式或所有模型均有相同行为。

复现步骤

以下根据用户提供的两张截图及描述整理,尚未使用原始 SVG 文件独立复现:

  1. 在 PI-Desktop 中打开可发送图片附件的会话。
  2. 将 SVG 矢量图作为附件加入输入框(截图中的附件名为 pasted-*)。
  3. 输入“这个图片里有什么?”或“帮我生成一份 HTML”,然后发送。
  4. 观察到附件按图片展示,但模型请求返回图片格式无效的 400 错误。

截图中分别使用 gpt-6-sol 和 grok-4.7,均出现该问题。具体粘贴来源、原始文件内容及尺寸尚未提供。

预期行为

  • 区分“可以预览的图片格式”和“当前模型接口支持的图片输入格式”,不能仅因 SVG 的 MIME 为 image/svg+xml 就直接发送为模型图片内容。
  • 对不支持 SVG 的接口,不发送原始 SVG 图片载荷;可以按普通文件/文本附件处理,或在需要视觉输入时安全转换为受支持的位图格式。
  • 如无法处理,应在发送前明确提示格式限制,保留附件和用户输入,而不是让请求以泛化的服务商错误失败。
  • 现有受支持位图的预览及发送行为不应受影响。

实际行为与错误信息

附件已被当作图片展示并发起请求,随后出现“AI 服务返回了错误”及 PROVIDER_ERROR。

gpt-6-sol

截图中的 API 错误为 HTTP 400,code: invalid_value、param: input、type: invalid_request_error:

The image you provided does not represent a valid image. Please check your input and try again with one of the supported image formats: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].

grok-4.7

截图中的 API 错误为 HTTP 400 / Client specified an invalid argument:

Downloaded response does not contain a valid JPG, PNG, WebP, or ICO image.

以上为用户截图中的报错摘录,不代表所有模型或接口具有相同格式支持范围。

环境信息

  • 操作系统:Windows(依据截图中的文件路径判断)。
  • 应用版本:未提供,截图中未显示。
  • 模型:gpt-6-sol、grok-4.7。
  • 安装方式、具体服务商及接口配置:未提供。
  • 证据来源:用户提供的两张会话截图;本报告摘录了关键现象和报错,未上传原始截图。

建议验收与回归覆盖

  • SVG 附件不会作为原始 SVG 图片载荷发送给不支持该格式的模型。
  • 覆盖粘贴、拖入、文件选择等附件入口,验证 MIME、附件分类与发送行为一致。
  • 从添加附件、发送到收到结果或发送前提示,覆盖完整用户路径;测试在模型接口边界使用桩,不依赖真实付费 API。
  • 若采用格式转换,发送的实际字节与 MIME 一致,并验证转换失败时不会丢失输入或静默发送原始 SVG。
  • 当前模型已支持的 PNG/JPEG 等位图仍可正常发送。

修复范围聚焦于附件格式与模型输入兼容性,不要求所有模型新增 SVG 支持。

静态代码线索

核对基线:faf91368b9b8afb03cbef5950d668745795f9b6f(本地检出的源码版本,不代表截图中的应用版本,也不声称已验证最新上游或完成端到端复现)。

  1. 粘贴附件分类 使用 mimeType.startsWith("image/")。因此,当剪贴板文件携带 image/svg+xml 时,它会被判为图片。
  2. 发送前附件准备 同样接受 image/*;内联条件主要检查模型是否支持视觉输入及附件大小,不能据此保证模型支持 SVG。
  3. 运行时构造图片内容块 沿用附件 MIME,没有在该处拒绝 SVG 或将其转换成位图。

入口差异: 该基线的普通文件选择/路径导入依赖扩展名映射,.svg 不在其图片扩展名表中,可能作为普通文件处理;不要将“所有 SVG 导入方式均会失败”作为已确认事实。SVG 源码作为纯文本粘贴也属于不同路径。上述线索仅确认给定 image/svg+xml 时的代码行为,具体剪贴板 MIME 仍需结合原始文件验证。

现有 composer-paste-files.test.mjs 和 composer-clipboard.test.mjs 可作为附件分类与粘贴入口的回归测试基础,再覆盖附件准备到模型请求边界的完整路径。

Activity

  1. yg2224 commented on Sep 23, 2026

    @yg2224
    Contributor

    我来认领这个问题。我会先核对当前附件分类与发送链路,确保 SVG 不再作为不兼容的原始图片载荷发送,并补充回归测试。

  2. inorilzy commented on Sep 23, 2026

    @inorilzy
    ContributorAuthor

    下班折腾完才看到,我自己来吧,我已经做了一部分了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions