Skip to content

Releases: liaoyuqing/model-failover-manager

v2.8.0 — 分组模型块可直接标记失败与禁用

Choose a tag to compare

@liaoyuqing liaoyuqing released this 20 Oct 16:04

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-manager

v2.7.0 — 每次发消息都会重检当前模型

Choose a tag to compare

@liaoyuqing liaoyuqing released this 20 Oct 03:09

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-manager

v2.6.0 — 子代理失败可兜底,也能自己选模型

Choose a tag to compare

@liaoyuqing liaoyuqing released this 19 Oct 15:41

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-manager

v2.5.1

Choose a tag to compare

@liaoyuqing liaoyuqing released this 17 Oct 07:57

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-manager

v2.5.0

Choose a tag to compare

@liaoyuqing liaoyuqing released this 17 Oct 07:50

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 合并)。