Repository navigation
Releases: liaoyuqing/model-failover-manager
Release list
v2.8.0 — 分组模型块可直接标记失败与禁用
model-failover-manager v2.8.0
路由分组的模型块上,现在可以直接「标记失败」和「禁用参与路由」。
两种开关的区别
| 失败 | 禁用 | |
|---|---|---|
| 存哪 | 当日失败记录(与自动失败同一份) | 分组条目的 disabled 字段 |
| 多久 | 到日界线过期;会话成功一轮自动解除 | 持久,只由你手动「启用」解除 |
| 范围 | 该 provider/model(不分分组) | 所有列出它的分组 |
| 解除 | 模型块上的「恢复」或「失败模型」页签 | 模型块上的「启用」 |
手动标记失败的记录带 code=MANUAL,失败原因写明是用户手动标记,方便和真实失败区分。routable() 先判 disabled 再判失败,两个状态互不覆盖;被禁用的模型仍留在列表里(而不是悄悄消失),随时可以启用回来。
接口
POST /api/model-failover/failed/mark:{provider, model}→ 标记为当日失败POST /api/model-failover/groups/model-disabled:{provider, model, disabled}→ 写入/清除所有含该模型分组的disabled/status的每个模型新增disabled字段
验证
node .offline-check.mjs 26/26 通过,新增八条覆盖:手动标记复用失败记录、标记后被换掉、恢复生效、禁用覆盖多分组、禁用优先于恢复、解除禁用后重新入选。
资产
model-failover-manager-2.8.0.tgz —— npm pack 预构建包。
安装
dsh plugin add https://github.com/liaoyuqing/model-failover-managerv2.7.0 — 每次发消息都会重检当前模型
model-failover-manager v2.7.0
每次发送消息时,先检查这个会话要用的模型现在还能不能用。
行为
- 可用就保留:不覆盖你手动选的模型,route 会话也不再每轮被拽回组内第一名(绑定时已经切过一次,这里只做健康检查)。
- 不可用才切换:三种形态都算——被标记当日失败、超出北京时间时段、过了截止日;切换目标是分组此刻能提供的第一个可用模型。
- 模型压根不在分组里:不插手(除非它带着失败标记)。
- 判据与分组路由用的是同一套谓词,时段/截止日随时间变化、失败标记会被重置或过期,都能在下一条消息生效。
实现
「会话此刻要用的模型」需要新的一份记录:sessionController.selectModel 把选择写成 model/selection 会话事件 + 它自己的状态,从不改 Agent.options,而用户手选时插件的覆盖又被清掉,所以之前插件根本看不见手选的模型。现在按 覆盖 → 最近一次选择事件 → Agent.options 三级解析。子代理仍以 agent.options 为准(宿主从父会话 requestHeader 播种)。
GET /api/model-failover/session-info 新增 currentModel 字段,用来直接读某会话将要用的模型。
宿主模块更名为 host.v9.mjs:Loader 只改 patch 行 id 时沿用缓存模块,对已导入文件的编辑不会被拾取。
验证
node .offline-check.mjs(假 ctx 直接跑监听器与 HTTP 处理器)14/14 通过,其中四条对应本版:可用保留、不在分组不插手、出窗切换、过期切换,另加失败标记的新一轮替换。
资产
model-failover-manager-2.7.0.tgz —— npm pack 预构建包。
安装
dsh plugin add https://github.com/liaoyuqing/model-failover-managerv2.6.0 — 子代理失败可兜底,也能自己选模型
model-failover-manager v2.6.0
本版修掉「子代理模型一失败就整轮中断」,并让子代理像普通会话一样能选模型、绑分组。
一、子代理失败后能兜底续跑
根因在宿主:sessionController.selectModel 对 origin: 'subagent' 的会话一律硬拒(session/agent-busy,owned by subagent routing)。插件原来的失败路径要换模型就得调它,于是 applyActiveModel 返回 false,失败处理不再返回 {kind: 'retry'},那一轮直接结束。
现在子代理换模型绕开该接口:插件只记录目标模型并写一条 model/selection 会话事件,真正生效由 agent/request 覆写请求,重试时仍走同一条路径。失败后正常返回重试,按继承来的分组切到下一个可用模型。
二、子代理可以选中模型 / 绑定分组
- 子代理会话的模型位不再置灰,可选模型、可绑分组;
- 子代理自己绑的分组标记为「显式」,优先于继承来的父会话分组;
- 这类绑定不改写「新会话默认分组」,不会污染父会话或其他新会话;
- 新增两个接口:
GET /api/model-failover/session-info(返回生效分组、继承来源、当前覆盖模型)与POST /api/model-failover/session-model(直接设置某会话的模型)。
三、修复绑定持久化丢失标记
session-bindings.json 写入时丢了「显式」标记,重启后用户给子代理选的绑定会退化成继承。现在该字段随绑定一起落盘,旧数据无此字段时按「非显式」处理,因此早期版本误写进子代理的默认分组绑定依旧被忽略。
四、包体积
files 里仍列着历代宿主模块,每次发版都多带六份没人加载的副本。现在 tarball 只含当前宿主模块,66 KB → 44 KB;历史文件留在仓库里供回溯。
升级注意
- 宿主半文件名改为
host.v7.mjs:Loader 在 patch 行变化时只重新 apply,模块 URL 未变就沿用缓存,改文件名才能确保加载新代码。package.json的main/exports已同步,dsh plugin add安装的包不受影响。 - 配置项、数据文件格式、
engines.dsh均无变化。
验证
node .offline-check.mjs 用假 ctx 直接跑监听器与 HTTP 处理器,9 项全通过,其中三条对应本版关键路径:子代理设模型不调用 selectModel、子代理彻底失败后返回重试、新子代理沿用父会话当前模型。线上另用 /debug/sessions 与 /session-info 核对:活子代理 ownBinding 为空、inherited: true、覆盖模型落在继承分组内。
资产
model-failover-manager-2.6.0.tgz —— npm pack 预构建包,免源码构建安装。
安装
dsh plugin add https://github.com/liaoyuqing/model-failover-managerv2.5.1
model-failover-manager v2.5.1
本版新增 DSH 版本声明:package.json 的 engines.dsh。
"engines": { "dsh": ">=0.2.1-0 <0.3.0" }DSH 的插件管理与装载会按它校验运行时版本:
- 落在范围内 → 正常安装 / 激活;
- 不落在范围内 → 拦下并给出诊断,可用
dsh plugin allow-version对精确name@version+ 运行时版本放行(自担风险); - 范围含预发布(当前宿主
0.2.1-rc.1、0.2.1-alpha.4均通过),0.3.0及以上拒绝。
v2.5.0 的 tarball 早于该声明,安装期校验看不到它;要享受版本门槛请用本 Release 的资产。
资产
model-failover-manager-2.5.1.tgz —— npm pack 预构建包,内含本声明,免源码构建。
安装
dsh plugin add https://github.com/liaoyuqing/model-failover-managerv2.5.0
model-failover-manager v2.5.0
DSH 插件:会话模型选择弹窗 + 路由分组,模型彻底失败后自动切换到组内下一个可用模型。
本版本内容
- 北京时间统一口径:当日失败 / 当日计数 / 截止日 / 路由时段小时全部按 Asia/Shanghai 计算,与宿主机时区、
TZ、LANG无关 - 失败日界线可配(
config.failResetHour,默认北京时间 08:00;改值后 Loader 自动重新应用,无需重启) - 子代理继承父会话的路由分组(修复子代理一律跑默认分组的问题)
- Our Free Model 换账号真正生效(写池级冷却标记让适配器跳过刚失败的账号)
- 失败模型页签显示失败原因(错误码 + 最近一次错误信息,可展开)
- 会话模型显示位同时展示当前供应商
- 只读诊断接口
GET /api/model-failover/debug/sessions
安装
dsh plugin add https://github.com/liaoyuqing/model-failover-manager
或下载本 Release 的 tarball 资产后从本地安装(免源码构建)。
已收录 awesome-dsh-plugin
条目在 model 分类:awesome-dsh-plugin(PR #6980,2026-10-17 合并)。