DSH Plugins
返回列表
🤖

dsh-stream-timeout-fix

模型推理 更新于 2026.10.18

在终端中运行以下命令:

dsh plugin install SundaeYAGO/dsh-stream-timeout-fix

将以下提示词粘贴到 DeepSeek Harness 对话框中:

在 DeepSeek Harness 中执行 dsh plugin install SundaeYAGO/dsh-stream-timeout-fix,或按 https://github.com/SundaeYAGO/dsh-stream-timeout-fix 将仓库加入 profile 依赖并启用 bundle 后重启 DSH。

插件介绍

在 DeepSeek Harness 里走流式 LLM 时,有些请求已经收到 reasoning、片段答案或 tool-call 增量,上游仍在生成,但中间会长时间没有任何字节到达。大约 304~305 秒的静默后,本地会以 TypeError: terminated 结束,并被归类为 TRANSPORT 网络故障;服务商日志却常显示客户端断开(例如 499),生成与计费仍继续,你付了钱却收不到后续输出。

根因是 Node 内置 fetch 背后的 undici 客户端:headersTimeout 与 bodyTimeout 默认均为 300 秒。bodyTimeout 按相邻 body 字节之间的空闲计时,每收到一字节会重置,因此持续缓慢输出的流可以跑很久;只有「中途长时间完全静默」才会触发,且错误信息像对端断开,容易误判为平台或线路问题。

本插件在进程级替换 undici 全局 dispatcher,让 DSH 整条 LLM 调用链(不经单独改各 provider 的 fetch)统一使用更长的超时:默认 body 约 30 分钟、headers 约 10 分钟,仍保留有限上限以便回收真正死掉的连接。它不负责重试、鉴权、路由或网关侧空闲策略;DSH 自身的 streamIdleTimeoutMs 若仍为默认 300 秒,静默仍会在约 300 秒被切断,只是错误会更诚实地表现为 TIMEOUT 而非 TRANSPORT。可通过配置项或环境变量调整两项超时,设为 0 可关闭对应时钟(一般不推荐)。

更适合第三方或自建的 OpenAI 兼容端点:高校/企业内网、LiteLLM 类网关、自托管 vLLM 等,响应耗时长且偶发流中停顿的场景。面向行为良好的大型公有云 API 通常不必安装;作者以个人用途维护,安装前建议阅读约百行源码并理解计费与等待时间可能变长的取舍。

使用场景

  • 流式响应中途长时间无数据却在约304秒后本地断开
  • 错误显示 TRANSPORT/terminated 而上游仍在生成并计费
  • 需要区分 undici 默认时钟与 DSH streamIdleTimeoutMs 两类300秒限制

适合人员

  • 使用自建或第三方 OpenAI 兼容推理网关的用户
  • 高校或企业内网部署 LiteLLM、vLLM 等长耗时流式场景
  • 愿阅读短源码并自行调高 streamIdleTimeoutMs 的 DSH 用户