fan56/dsh-llm-net-retry

fan56★ 0JavaScript最后同步: 2026-08-22

在 GitHub 打开

dsh plugin: bounded retry for gateway network_error failures the stock retry policy cannot classify

README 摘要

dsh-llm-net-retry English DeepSeek Harness(dsh)插件:重试网关以 finish reason: "network error" 上报的模型请求失败——这类失败被 dsh 原生重试策略归为不可重试, 导致整个 turn 直接硬失败。 背景 一些 OpenAI 兼容网关(如 OpenCode Zen)把自身上游连接的瞬时失败 作为流的终止 finish reason 上报,而不是走 HTTP/传输层错误。截至 dsh 0.1.1-rc.2 ,两条 adapter 路径都把它误分类: 路径 产出的失败 原生分类 llm-pi-ai ( openai-completions ) Provider finish reason: network error PI AI ERROR ——不可重试 llm-deepseek model stopped: network error ,code NETWORK ERROR 不可重试 dsh-llm-retry 只重试 provider retryableCodes 里的码( TRANSPORT 、 RATE LIMIT 、 SERVER 、 TIMEOUT 、 EMPTY RESPONSE ),于是没人重试,turn——包括 subagent turn——直接失败。 而这类故障立即重试几乎总能成功。 opencode 在上游修过同样的问题: 40282c1、 e0b9e68。 dsh 本体的修复已备好并充分测试(fork 分支 fix/network-error-retryable ; dsh 目前不接受外部 PR,已按官方渠道报告至 Discussions 3949)。 在修复合入前,本插件就是解决方案;合入后它也无害:只在整个 agent/request-error waterfall 弃权时才行动,且绝不触碰 llm-retry 自身的重试计数。 工作原理 插件挂在 agent/request-error waterfall 的 末端 : 1. 先调用 next() ——provider 的策略执行器( dsh-llm-retry )先决策。任何一方决定重试, 该决策原样透传。 2. 只有当所有 listener 都弃权,且失败消息命中漏网的 network 变体—— network error / network-error / network error ,或 pi-ai 对未识别网关 stop reason 的 Provider finish reason: 渲染——才调度本插件自己的有界重试。 3. 重试持久化且可见: llm/retry / llm/retry-started session 事件,schema 与 llm-retry 兼容,TUI 无需改动即可展示…

在 GitHub 查看完整 README →
工具/开发deepseek-harnessdsh-pluginretryagent

分类