dsh-image-base64:解决 LM Studio 等网关对 WebP 图像的 400 错误

前言

在使用 DeepSeek Harness (DSH) 的 vision 模型(例如 meta/muse-glimmer)时,如果服务端是 LM Studio 这类 OpenAI 兼容网关,经常会遇到 400 错误。错误信息通常是 'url' field must be a base64 encoded image.。

根本原因在于 DSH 的默认附件插件 dsh-attachment-local 会将带有 Alpha 通道的图像(如 PNG 截图)自动转码为 image/webp 格式,而 LM Studio 的网关层在协议层只接受 image/png、image/jpeg 和 image/gif,直接拒绝了 WebP 格式。

dsh-image-base64 插件通过包装附件存储的 readImageRequest() 方法,在请求发送前将不支持的图像格式转码为 PNG,从而消除这种格式不兼容问题。

是什么

这是一个 DeepSeek Harness 插件,由用户 pureexe 维护,采用 MIT 许可证。

它的核心作用是在 vision 请求发出前,利用 sharp 库将不符合网关要求的图像格式转码为 image/png。它不改变图像的存储方式,只修改发送给模型请求中的数据格式。

核心功能

  1. 格式转换:拦截 readImageRequest() 调用,检查返回的媒体类型。
  2. 转码逻辑:如果媒体类型不在接受列表中(默认为 image/png, image/jpeg, image/gif),则使用 sharp 将其重新编码为 image/png。
  3. 按需处理:原本就在接受列表中的格式会原样通过,只有会导致错误的格式才会被转码。

安装与启用

在执行安装前,请确保已安装该插件源码,例如位于 /home/pakkapon/dsh-image-base64。

  1. 在 DSH 的 profile 目录下执行安装命令:
dsh plugin --profile <name> add /home/pakkapon/dsh-image-base64
  1. 在该 profile 的 package.json 中将该插件添加到 dsh.profile.bundles 列表:
{
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "dsh-image-base64"
      ]
    }
  }
}
  1. 重启 profile(或等待自动加载,取决于配置中的 patchReload 设置)以使插件生效。

配置

插件默认只接受 [image/png, image/jpeg, image/gif],这与 LM Studio 的白名单一致。如果需要支持其他格式,可以在 profile 的 cordis.patch.yml 中针对插件 ID 进行配置。

- id: image-base64-compat
  config:
    acceptedMediaTypes: [image/png, image/jpeg, image/gif, image/webp]

注意事项

  1. 仅修改请求投影:该插件只修补了发送给模型的请求图像部分,不会改变图像在附件存储中的实际格式。
  2. 文件体积增加:转码为 PNG 是无损的,但对于原本是 JPEG 或 WebP 的大照片,PNG 编码后的文件体积通常会比原图更大。
  3. 格式协商:如果网关实际支持 WebP,建议将其加入 acceptedMediaTypes 列表,而不是依赖插件转码。

结语

对于需要在 LM Studio 等严格网关上部署 vision 模型的开发者,dsh-image-base64 提供了一个轻量级的解决方案,避免了因 MIME 类型不匹配导致的请求失败。插件源码位于 GitHub 仓库 pureexe/dsh-image-base64。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜