
Misc. bug: ui: “Stream connection lost and could not be resumed” with slow models after 1a87dcdc
快速结论:该报错通常在使用慢速大模型(如 Mistral Small 4、Qwen 3.5 122B-A10B)通过 llama-server WebUI 进行推理时出现。优先排查 --threads-http 参数是否设置过小(例如设为2),或模型在 Prompt Processing 阶段加载缓慢导致 SSE 流超时。
问题场景
用户在使用 llama-server 从 WebUI 发起推理时,特别是使用大型模型(如 MoE 模型、70B+ 参数模型)且模型加载速度较慢的场景下触发。典型环境:llama-server 搭配 --models-preset 多模型配置,使用 --threads-http 2 等低 HTTP 线程数设置,或模型存储在 HDD 而非 NVMe 上。
报错原文
Error in sendMessage: Error: Stream connection lost and could not be resumed
Streaming error: Error: Stream connection lost and could not be resumed
[HTTP/1.1 404 Not Found 16000ms]
attachServerStream replay got HTTP 404 for conv ...
原因分析
可能原因:在提交 1a87dcdc(PR #23226)之后,流路由逻辑在判定模型状态时只检查 is_ready() 而非 is_running(),导致当模型处于 LOADING/SLEEPING 状态时,SSE 流连接被路由器拒绝,返回 404。同时,如果 --threads-http 设置过小(例如2),两次 SSE 连接(基础流 + resume 请求)会占满所有 HTTP 工作线程,导致其他请求超时,触发”could not be resumed”错误。
开发者已提交一个补丁尝试修复(将 is_ready() 改为 is_running()),但该补丁并未完全解决问题,表明可能存在更多边缘情况。
环境排查
- llama-server 版本:确认是否包含提交
1a87dcdc(可通过./llama-cli --version查看版本及编译哈希) - 模型加载速度:确认模型是否为大参数量模型(>70B)或运行在低速存储(HDD、mmap 模式从 NVMe 加载等)
- HTTP 线程数:检查
--threads-http参数是否设置过低(< 5) - 反向代理/路由器:如果使用了外部路由/代理(如 llama-swap),确认是否拦截了
/sw.js等前端请求 - 浏览器开发者工具:在 Firefox/Chrome 网络面板查看
/v1/stream/请求是否返回 404
解决步骤
- 第一步(可优先尝试):增加 HTTP 线程数。移除
--threads-http 2参数,或设置为--threads-http 8(默认至少为 5)。这样可以避免 SSE 重试连接占满所有 HTTP 线程导致超时。 - 第二步:还原提交
1a87dcdc。在最新 git master 上 revert 该提交可以消除问题(用户已验证)。 - 第三步:如果使用外部代理(如 llama-swap),检查其配置文件中的
upstream.ignorePaths规则,确保没有拦截来自 WebUI 的流请求。可尝试临时关闭代理直连 llama-server 测试。 - 第四步:考虑将模型存储在更快的存储介质(NVMe SSD 而非 HDD),或关闭
--mmap(但需注意关闭后加载更慢,可能适得其反)。 - 第五步:等待上游社区合并更完善的修复(当前已知修复仅修改了
is_ready()为is_running(),但测试表明仍不足够)。
验证方法
启动 llama-server 后,在 WebUI 中发起一次完整推理请求,观察是否还能复现 “Stream connection lost and could not be resumed” 错误。同时检查浏览器网络请求面板,确认 /v1/stream/ 接口返回 200 而非 404。



