
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 解析错误
解决步骤
- 验证第三方客户端兼容性:使用 curl 或 Postman 发送相同的请求并检查 SSE 响应是否能够被标准 OpenAI 客户端(如 Python
openai库)正确解析。这可以帮助确认问题在服务端还是客户端。 - 升级 Open WebUI 到最新版本:检查是否有比 0.10.2 更新的版本,SSE 解析问题在后续版本中可能已修复。可优先尝试此步骤。
- 检查 fm serve 的 SSE 输出格式:对比 OpenAI 标准 SSE 格式。标准格式要求:
- 第一个 chunk 必须包含
choices[0].delta.role和choices[0].delta.content(虽然 role 可以单独发出,但 content 也必须存在或紧随其后) - 后续 chunk 应省略
role,但必须保持object: "chat.completion.chunk" - 终止 chunk 的
finish_reason必须为"stop"且delta为空对象{} id字段应在所有 chunk 中保持一致- 转换为符合格式:如果
fm serve允许配置选项,尝试关闭流式("stream":false)看是否能正常响应。如果可以,说明问题仅存在于流式解析。 - 使用代理或中间件:如有必要,在 macOS 机器和 Open WebUI 之间添加一个转换层(如
openai-proxy或自定义脚本),将fm serve的 SSE 流转换为标准 OpenAI 格式。 - 查看相关 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 界面上的对话记录能够正常显示流式回复。

![[Bug] Disabled Weaviate document vectors are not deleted by segment ID](https://www.chat-gpts.plus/wp-content/uploads/2026/07/39174-10c10356-768x403.jpg)

