issue: Connection to a macos 27 machine running the foundation model fm in server mode

用户通过 Docker 运行 Open WebUI (v0.10.2),在管理员面板中配置连接到一台 macOS 机器上运行的 fm serve --host 0.0.0.0 --port 1976 基础模型服务。使用 OpenAI 兼容的 /v1/chat/completions 端点,模型 ID

issue: Connection to a macos 27 machine running the foundation model fm in server mode

issue: Connection to a macos 27 machine running the foundation model fm in server mode

快速结论:Open WebUI 连接 macOS 上的 fm serve 基础模型服务器时,尽管服务器返回 HTTP 200 且 SSE 流内容格式正确,但 Open WebUI 前端无法解析该流式响应,报错 Invalid request: The data couldn’t be read because it isn’t in the correct format. 优先检查 SSE 流中每条 data: 行的 JSON 结构是否符合 OpenAI 标准格式。

问题场景

用户通过 Docker 运行 Open WebUI (v0.10.2),在管理员面板中配置连接到一台 macOS 机器上运行的 fm serve --host 0.0.0.0 --port 1976 基础模型服务。使用 OpenAI 兼容的 /v1/chat/completions 端点,模型 ID 设为 “system”。在 Workspace 中选择该模型发起聊天后,服务器返回 HTTP 200 且 SSE 流中包含多个 data 行(含角色、内容块、结束标记),但 Open WebUI 前端无法解析,抛出解析错误。

报错原文

Invalid request: The data couldn’t be read because it isn’t in the correct format.

原因分析

根据 Issue 中提供的服务器原始响应示例,fm serve 返回的 SSE 流在 JSON 结构上有两个可能引发解析失败的问题:

  • 第一条消息 data: {"model":"system","object":"chat.completion.chunk",...} 中缺少 choices[0].delta.content 字段(仅有 role),某些客户端可能会认为 chunk 结构不完整。
  • 后续 chunk 中 choices[0].delta 内缺少 role 字段(仅含 content),与标准 OpenAI 格式不一致——标准格式中第一个 chunk 应同时包含 role: "assistant"content,且后续 chunk 的 delta 可以只含 content,但必须在顶层与第一个 chunk 保持一致的结构约定。
  • 终止 chunk data: [DONE] 不符合 OpenAI 标准:标准终止符应为 data: [DONE] 且不带额外 JSON,但此处正确,因此非直接原因。

可能原因:fm serve 返回的 SSE 流没有严格遵循 OpenAI 流式 Chat Completion 格式,导致 Open WebUI 内置的 SSE 解析器报错。Issue 评论区中 bot 关联了多个 SSE 解析相关 bug(#19609、#13474、#16136、#27074),确认这是 Open WebUI 前端对非标 SSE 流处理不够健壮导致的已知问题类别。

环境排查

  • Open WebUI 版本:确认是否为 v0.10.2 或更新版本
  • 部署方式:Docker(Linux HAOS)
  • macOS 端基础模型服务:fm serve 版本及启动参数(–host 0.0.0.0 –port 1976)
  • API 端点 URL:确认配置的 URL 是否包含 /v1(例如 http://192.168.1.56:1976/v1
  • 模型 ID:确认是否在管理员面板中正确添加了模型 ID “system”
  • 自动补全端点:检查 Open WebUI 连接配置中是否选择了正确的端点类型(/v1/chat/completions)
  • 浏览器/容器日志:虽然用户表示无法获取日志,但排查时应检查 Docker 容器日志和浏览器控制台是否有更详细的 JSON 解析错误

解决步骤

  1. 验证第三方客户端兼容性:使用 curl 或 Postman 发送相同的请求并检查 SSE 响应是否能够被标准 OpenAI 客户端(如 Python openai 库)正确解析。这可以帮助确认问题在服务端还是客户端。
  2. 升级 Open WebUI 到最新版本:检查是否有比 0.10.2 更新的版本,SSE 解析问题在后续版本中可能已修复。可优先尝试此步骤。
  3. 检查 fm serve 的 SSE 输出格式:对比 OpenAI 标准 SSE 格式。标准格式要求:
    • 第一个 chunk 必须包含 choices[0].delta.rolechoices[0].delta.content(虽然 role 可以单独发出,但 content 也必须存在或紧随其后)
    • 后续 chunk 应省略 role,但必须保持 object: "chat.completion.chunk"
    • 终止 chunk 的 finish_reason 必须为 "stop"delta 为空对象 {}
    • id 字段应在所有 chunk 中保持一致
  4. 转换为符合格式:如果 fm serve 允许配置选项,尝试关闭流式("stream":false)看是否能正常响应。如果可以,说明问题仅存在于流式解析。
  5. 使用代理或中间件:如有必要,在 macOS 机器和 Open WebUI 之间添加一个转换层(如 openai-proxy 或自定义脚本),将 fm serve 的 SSE 流转换为标准 OpenAI 格式。
  6. 查看相关 Issue:参考已关联的 #19609、#13474、#16136、#27074 获取更多临时 workaround 或补丁信息。

验证方法

在修正 SSE 格式或升级 Open WebUI 后,再次发起聊天请求,观察是否能够正常接收到模型回复,且浏览器控制台或开发者工具的网络面板中不再出现 “Invalid request: The data couldn’t be read because it isn’t in the correct format.” 错误。同时确认 Open WebUI 界面上的对话记录能够正常显示流式回复。

参考来源

open-webui/open-webui #27142

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 13968

发表回复

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