dsh-model-fallback
提供可视化拖拽排序的多渠道模型回退链管理 适合需要配置备用模型、在主模型失效或限流时自动无缝切换的用户。
同名包的其他仓库
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:yn2aa/dsh-model-fallback说明文档
阅读完整 README ↗配置回退链
打开 设置 → 模型回退链,页面自上而下是:回退链管理区(最顶部)、可用模型清单、候选编辑面板、冷却中的模型、最近改派记录。
后三块只在按下某条链的「编辑」按钮后才出现,并且只属于那一行链——没在编辑时,页面只剩管理区、冷却与历史,不会占用版面。
建一条链
- 可用模型清单是一张表格,排版与 DSH 自带的模型选择器一致:每个渠道一行渠道标题(如
WorkBuddy (国际版)、LobsterAI (有道)),下面是该渠道的模型行。表头给出每一列的含义:模型名称、计费倍率、上下文窗口、来源。- 上下文窗口的单位是token,为了省地方没有专门写在上面,用鼠标悬停提示就能看到。
- 表头在滚动时固定在上方
- 来源列是最终写进
chains.json的provider/model标识。 - 排序有三档:清单打开时「计费倍率」已按升序排好(
↑,便宜的在前,可以慢慢挑选便宜的模型),点一下变降序(↓),再点一下进入≡全局排序:整个清单变成一条不分渠道的扁平列表,来源列只是信息、不再决定行的位置。第四次点击回到分组升序。「上下文窗口」列同理。价格或窗口查不到的模型在两个方向上都排在最后——翻转排序不会把「未知」顶到真实数字前面。 - 每个渠道标题可以折叠:点渠道标题行(左侧有
▸/▾记号)即收纳或展开该渠道的模型,折叠只是视图、不写入任何配置;分组下有匹配行时才显示该组。 - 清单本身可以整块折叠:点「可用模型清单(N)」那一行(左侧有
▸/▾记号)即收起整张表格,选完模型后不再占版面;标题行始终留着,就是展开的入口。折叠只是视图、不写入任何配置。当前编辑的那条链的主模型显示在同一行右侧的「当前主模型:」后面。 - 清单与候选选择器的可视高度约 12 行(440px / 340px),超出滚动。
- 搜索框匹配模型名、渠道名和标识(例如输入
kimi或workbuddy都行),不只是标识。 - 清单直接来自运行中的内核枚举,渠道新增或停用模型后清单会跟着变,不需要改插件代码;上下文窗口查不到时显示「未知」,不会进行编写。
- 在要当主模型的那一行左侧勾选单选框,再点搜索框右侧的「设为回退链主模型」,即新建一条链。清单顶部若还没有任何链,会显示「还没有配置任何回退链。插件不会干预任何请求,行为与安装前一致。」——没有链时插件完全不介入。
- 同一个主模型可以有多条链(例如两套候选配置轮换用)。但同一时刻,同个主模型的链中只有一条能被启用:启用第二条时,第一条会被自动停用,并弹出一条可关闭的提示。
- 新建的链会立刻进入编辑状态:管理区多出一行,名字按
回退链1、回退链2……自动递增,下面是可用模型清单与候选编辑面板。 - 新建的链三类触发条件默认全部勾选(限流 / 服务端错误 / 超时与网络错误),尝试深度默认 3。如果新链默认全部关闭,你可能会以为插件坏了;勾选项就在下面,随时可以关掉不需要的类别。
- 点该链上的「添加候选(勾选即加入)」,在展开的清单里勾选候选模型:勾一个就加入一个,取消勾选就移除——勾选状态本身就是链的内容,所以清单不会和链不一致;已经在链上的候选仍然列出来,否则就没有可取消的勾选框了,并且显示为已勾选。
- 勾选时页面不会跑动:新增的候选行渲染在这张清单的上方,会让清单整体下移;插件会在重排前记下清单的位置,渲染完成后把页面滚回原处,所以鼠标下的勾选框不会溜走。哎我的小巧思,很多插件作者没有留意到这个使用体验问题。
- 链建好后候选列表也可以收起:点链标题左侧的「候选模型(N)」(带
▸/▾记号)即收纳该链的候选行,只留链标题——每条链各自独立折叠。折叠记号统一放在左侧,与「可用模型清单」的折叠记号对齐。
- 用拖动(鼠标按住候选前的
⠿图标)或↑/↓按钮调整候选顺序。拖动的作用域只限本链,不会影响其它链。顺序在拖放结束的瞬间写入;一次拖动只产生一次顺序写入。 - 需要时调整该链的触发条件(可多选)。粗体是条件,后面的灰字是说明:
- 限流——TPM/RPM 或额度用尽,上游返回限流错误、或账号全部在限流中时改派。典型是每分钟 token 用量超限。
- 服务端错误——HTTP 5xx,上游返回服务端错误时改派。适合应对服务端临时故障。
- 超时与网络错误——请求超时或连接中断时改派。
取消勾选的类别不会触发改派,错误照常报给用户。
插件认的失败码是
RATE_LIMIT/SERVER/TIMEOUT/TRANSPORT/QUOTA_EXCEEDED/ACCOUNT_QUOTA,外加「HTTP 状态 ≥ 500」这一兜底。QUOTA_EXCEEDED按限流处理,是因为「账号全被限流」与「每分钟用量超限」同型——换个账号或模型就能救。反过来,AUTH/INVALID_REQUEST这类错误改派也治不了,所以故意不接。
- 设置尝试深度:一次失败最多尝试几个候选。用尽后不再重试,直接向用户报告主模型的原始失败原因(而不是最后一个候选的错误)。
管理已建好的回退链
设置页最顶部是一块「回退链(N)」清单,每条链占一行,这一块就是全部管理入口:名称(没起名字就显示主模型标识)、主模型标识、候选数量与尝试深度,右侧是操作。
- 编辑——每行右侧的按钮,按下才展开属于这条链的「可用模型清单」与候选编辑面板(再按一次收起)。同一时刻只会有一条链在编辑;按下另一行的编辑会替换掉当前面板。折叠与展开都只是视图状态,不会写盘。
- 启用——取消勾选后这条链不参与改派,但它对主模型的配置原样保留;勾回来即恢复。停用的行会变暗。停用一条链与「没有这条链」在运行时完全等价。
- 重命名——双击链名把名称变成输入框,改完按回车或点开别处即保存(按 Esc 取消)。名称只是给人看的标签;链的身份是它自己的
id(没起名字就显示主模型标识),所以换名字不影响改派。留空则回落到主模型标识。 - 删除——第一次点击变成「确认删除」,再点一次才真的删除。这是两步确认,毕竟这个删除不能撤销。
没有链时,管理区正中有一个「添加链」按钮:点它直接建一条空链(主模型待定,名字取下一个 回退链N),随后在可用模型清单里给它挑主模型。有链之后,这个按钮挪到管理区标题行右侧。
「可用模型清单」面板标题行右侧的「当前主模型:」显示的是正在编辑的那条链的主模型(名称、倍率与标识);链还没挑主模型时显示「尚未选择」,没有链时不显示这一句。
新增链有两条路:管理区里的「添加链」(建一条空链再挑主模型),或在可用模型清单里单选 + 「设为回退链主模型」(直接用挑中的模型建链)。
要批量操作也可以直接编辑 chains.json。
链数据存在 /model-fallback/chains.json。界面不保存自己的副本:每次读取都回到同一份文件,所以别的程序改了它,界面下次读到的就是新顺序。
候选不可用时会发生什么
渠道临时停用某个模型时,该候选会留在链上并标成橙色「不可用」加原因,不会被静默删除。渠道恢复后它自动回到正常呈现,位置和顺序都不变——不需要重新配置。