Visol-456/dsh-llm-fallback ↗★ 3
@visol-456/dsh-llm-fallback
Provider fallback chain for the DeepSeek Harness LLM seam
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Visol-456/dsh-llm-fallback说明文档
阅读完整 README ↗@visol-456/dsh-llm-fallback
English | 中文
DeepSeek Harness 的 provider fallback chain 插件——当主 provider 失败时,同一请求会自动在下一个配置的 (provider, model) 条目上重试,限流、超时或临时不可用的 provider 不会直接终结一轮对话。
DeepSeek Harness
dsh-plugin生态的社区插件,不属于官方仓库。
开发原因
由于众所周知的原因,deepseek要涨价了,对于我一个学生直接用不起了,于是只能去投奔opencode-go。然而,opencode-go的海外链接非常不稳定,挂了代理都不行,在长程任务中经常出错暂停,单 provider 部署在服务不稳定时会直接失败:
- 限流与配额错误
- 服务端错误、5xx 抖动
- 超时与传输层故障
本插件为每条链维护一份按优先级排序的 (provider, model) 路由表,跟踪连续可切换失败(熔断器),并自动把请求故障切换到下一个健康条目。后续请求会继续使用当前服务条目,直到冷却结束、对链头的一次探测成功为止。
快速开始
npm i @visol-456/dsh-llm-fallback
在 cordis.yml 中挂载插件:
- name: '@visol-456/dsh-llm-fallback'
config:
fallbacks:
- provider: pi-ai
model: glm-4.5
switchCodes: [EMPTY_RESPONSE, RATE_LIMIT, SERVER, UNKNOWN_MODEL, TIMEOUT, TRANSPORT]
failureThreshold: 1
cooldownMs: 30000
请求本身永远是链头(你在 UI 里选的 provider/model,或部署默认值),永不被改写。fallbacks 列出请求失败后按顺序切换的备用目标。省略 fallbacks 键合法且插件保持休眠,所有请求原样放行;等你在 Web 界面的 Settings -> 回退链 页保存备用目标之后再生效。
部署到 web profile(dsh web)
A. dsh plugin add(推荐)
本包声明了 dsh.bundle,安装后会作为 profile 层自动激活(无需手写 patch 文件——随包附带的 cordis.patch.yml 会以无备用目标挂载插件,目标在 UI 里创建):
dsh plugin --profile web add @visol-456/dsh-llm-fallback
B. 手动 patch 覆盖层
创建一个覆盖层文件(是 patch 列表,不是裸条目列表),用 --patch 应用:
# cordis.yml
- insert:
- id: llm-fallback
name: '@visol-456/dsh-llm-fallback'
dsh web --patch ./cordis.yml
patch 语法(最大的坑)
-
每个挂载条目必须有
id。 -
新增条目必须放在顶层
- insert:列表里(参照 harness 的examples/web-schedule/cordis.yml)。 -
裸条目列表会被静默拒绝:报
patch: id is required for non-insert patches/entry "xxx" not found,而且dsh web启动不打印任何错误(只有一行dsh web: http://...)。 -
用以下命令诊断组合配置树(含 patch 错误):