dsh-model-switchboard:在 DSH 里统一开关所有模型的可见性

前言

在 DSH(DeepSeek Harness)里接多个 LLM provider、再叠上若干插件动态注册的模型之后,输入框上方的模型选择器往往会变得很长。内置的「Models」设置页只能管在配置里声明过的 provider;像 dsh-our-free-model 这类插件带来的 our-free-model、our-free-model-region 等模型,在选择器里能看见,却在内置页面上找不到入口,也就没法关掉。

下面介绍社区插件 dsh-model-switchboard(维护者 DriverWangNB):在设置页增加「模型开关」分区,把运行时段全部 provider 与模型摊开,支持逐模型或按 provider 整组关闭;关掉的模型会从所有模型选择器里消失,且不必刷新页面。

这是什么

dsh-model-switchboard 是 DSH 的客户端侧插件,定位是「模型开关」:控制 DSH 会话界面里哪些模型对用户可见。关闭状态不写进任何 provider 配置,只影响运行时列表过滤,不会改动既有配置内容。

在 SkillHub 插件目录 中归类为「客户端」;源码与说明见 GitHub 仓库,许可证为 MIT。包当前版本为 0.1.1,要求 Node.js >= 22.0.0。

核心功能

根据 README 与 package.json 描述,插件提供以下能力:

  1. 设置页「模型开关」:列出运行时段全部 provider 与模型(含插件动态注册、内置 Models 页管不到的那批)。
  2. 逐模型开关与按 provider 整组开关;provider 开关有三种 UI 状态:显示中(蓝)、部分显示(橙)、已关闭。
  3. 即时生效:关闭后模型从输入框上方选择器、/model 弹窗、子代理模型设置等处消失,无需刷新页面。
  4. 工具:list_models 只读列出当前实际生效的模型;dmm_probe 用于自检插件加载、adapter 包装与广播链路。
  5. HTTP API:GET /api/dsh-model-switchboard/state,以及 toggle、bulk、reset 等 POST 接口,便于脚本或集成侧读写开关状态。

开关状态持久化在 ~/.dsh/dsh-model-switchboard/disabled.json,重启 DSH 后仍保留。

安装与启用

安装方式是在 DSH profile 的 package.json 里声明依赖,并把包名登记进 dsh.profile.bundles。README 给出三种依赖源,键名必须是 dsh-model-switchboard:

npm 版本号:

"dependencies": {
  "dsh-model-switchboard": "^0.1.0"
}

GitHub:

"dependencies": {
  "dsh-model-switchboard": "github:DriverWangNB/dsh-model-switchboard"
}

国内 Gitee 镜像(与 GitHub 内容同步,包名仍为 dsh-model-switchboard):

"dependencies": {
  "dsh-model-switchboard": "git+https://gitee.com/link77/dsh-models-manager.git"
}

登记 bundle:

"dsh": {
  "profile": {
    "bundles": [
      "dsh-model-switchboard"
    ]
  }
}

然后执行 pnpm install,重启 DSH。

从旧包名 dsh-model-manager(≤0.3.3)升级时,状态目录已改名;旧的 ~/.dsh/dsh-model-manager/disabled.json 不会被读取。若要保留原关闭项,请手动复制到新目录 ~/.dsh/dsh-model-switchboard/。

典型用法

进入 设置 → 模型开关,按 README 中的交互规则操作:

操作 结果
点 provider 开关(原本全开) 整组关闭,组员一起显示关闭
点 provider 开关(原本整组关闭或部分显示) 整组全部打开
点某个组员开关 只切换那一个
在整组关闭的状态下点某个组员 该组退出整组关闭,只有这个组员和组是开的

需要核对当前目录时,可调用插件提供的 list_models 工具,查看各 provider 实际生效的模型数及被隐藏项。

工作原理(简要)

Host 侧用 Proxy 包装 ctx.llm.adapters 里每个 registration 的 adapter,只替换 reg.adapter,在 listModels / listAllModels 返回前按开关状态过滤,不修改原 adapter 实现。这样可避免对已是 Proxy 的渠道 adapter 直接改方法而引发递归(例如 channel-pack 场景下的栈溢出)。

状态变更后插件会广播 llm/adapters-updated,客户端模型目录据此重拉;否则页面可能仍使用启动时的缓存,表现为「开关无效」。

适用场景与注意

适合谁:长期在 DSH 里挂多 provider、多插件模型,希望用一张表统一隐藏不用的模型、缩短选择器列表的开发者。

注意:

  • 插件随当前 DSH 进程运行,安装前请自行查看仓库源码与 MIT 许可证,确认符合你的安全与合规要求。
  • 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本文介绍的是社区维护的独立包。
  • peer 依赖包括 @deepseek-ai/cordis、@deepseek-ai/dsh-llm 等,需与当前 DSH 版本匹配。

结尾

dsh-model-switchboard 补上内置 Models 页管不到的动态模型,用设置页「模型开关」和持久化的 disabled.json 统一控制可见性,并配合广播让各选择器即时同步。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye