dsh-model-hub:按 API 通道与模型家族两级选择 DeepSeek Harness 模型

前言

在 DeepSeek Harness(DSH)里接多条 API 通道时,原生模型选择器往往是「provider 平铺 + 模型平铺」:同一个 DeepSeek 账号可能混着账号池与官方 API;接一个 OpenRouter 一类的中转站,列表里会突然多出几百个模型,全部挤在一层里滚动。要找某个 Claude 或 Qwen,成本会随模型数量线性上升。

社区插件 dsh-model-hub(维护者 awawuming,分类:模型推理)只做一件事:把模型列表改成「通道 → 家族」两层目录,并在输入框右侧提供一个与原生控件并存、共享同一份会话模型状态的下拉选择器。下面介绍它是什么、能做什么,以及如何安装与使用。

这是什么

dsh-model-hub 是 DSH 的 Web 客户端插件(dsh.client.platform = web),当前包版本 0.1.0,许可证 MIT。它通过 cordis.patch.yml 向宿主插入 Loader(id: model-hub),在对话输入区右侧注册槽位 conversation.input.right,加载构建产物 lib/client.js。

插件不接管原生单槽模型控件(conversation.input.model),而是新增并列按钮,显示「当前通道 / 当前模型」。模型数据来自平台服务 modelDirectories:directoryFor(sessionId) 提供快照 store 与 load() / select({ provider, model }),选择结果走与会话一致的 selectModel 流程,原生控件会同步更新。

核心功能

两级菜单与「全部模型」

  1. 根面板(API 通道):DeepSeek 账号、DeepSeek 官方、自建中转站、本地 Ollama 等各占一行,带类型标签(账号 / 官方 / 中转站 / 本地 / 自定义)与模型数量,当前通道打勾。
  2. 通道面板(模型家族):进入某通道后,模型按家族分组,组头吸顶;家族顺序在 README 中有固定列表(如 DeepSeek → OpenAI GPT → Anthropic Claude → Google Gemini → Qwen → … → 其他)。
  3. 全部模型(按类别):跨所有通道按家族聚合,行尾标出所属通道,适合只认家族、不确定模型落在哪个通道时浏览。

OpenRouter 等中转站模型 id 较多时,README 说明这种结构比原生一层平铺更易检索(具体体验因通道与模型数量而异)。

搜索与选择

  • 根面板:按通道名与模型名过滤,可直接命中模型。
  • 通道面板:按模型名子串匹配,忽略大小写与 - / _ / . 分隔符。
  • 点击模型行即提交到当前会话;点击当前已选模型仅关闭菜单。
  • 会话被占用(如 session/writer-held)等错误在菜单底部以中文提示展示,不静默丢弃操作。

交互与实现约束

菜单使用 role=menu、role=menuitemradio 等无障碍属性;支持点击外部或 Esc 关闭;展开方向优先向上并限制在视口内。样式通过 style[data-plugin-css=dsh-model-hub] 注入,仅依赖宿主提供的 react / react-dom,无额外 npm 运行时依赖。

分类逻辑在 src/classify.mjs 中实现,构建时内联进 lib/client.js:通道侧根据 provider 名称、baseURL、ollama/localhost 等规则归类;模型侧先看 OpenRouter 风格 vendor/model 前缀,再按 id 关键字与通道兜底,认不出的归入 other。

安装与启用

DSH 生态采用「一切皆插件」思路;SkillHub 目录页 为社区收录,与 DeepSeek / 幻方无官方从属关系。安装前请自行查看 GitHub 仓库 源码与 MIT 许可证;插件在当前 DSH 进程权限下运行,与任何 DSH 插件一样,只安装你信任的来源。

方式一:插件管理器(推荐写法)

DSH「插件」页支持从本地路径或 git 地址安装插件包。安装完成后,profile 配置层会插入与手动 patch 相同的 id: model-hub 记录,效果与下文方式二一致。具体入口与表单以你使用的 DSH 版本界面为准。

方式二:桌面端 profile 本地 link(Windows 示例)

README 给出的桌面端 profile 路径为 %USERPROFILE%\.dsh\profiles\desktop\。在已将 dsh-model-hub 包置于本机某目录(例如 D:\开源文件\dsh-model-hub)的前提下:

  1. 建立 junction,使 profile 的 node_modules 指向该目录(Windows 下 README 示例不需要管理员权限):
cmd /c mklink /J "%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-model-hub" "D:\开源文件\dsh-model-hub"
  1. 在 %USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml 末尾追加:
- insert:
    - id: model-hub
      name: dsh-model-hub
  1. 桌面端会热加载 profile(dsh-hmr);浏览器页面按 Ctrl+R 刷新后,输入框右侧应出现「通道 / 模型」按钮。

仓库发布的 files 已包含预构建的 lib/client.js,按上述方式挂载时无需在本地执行 npm run build。

卸载

删除 junction,并去掉 cordis.patch.yml 中上述三行 insert 配置,刷新页面即可。

典型用法

点输入框右侧的「通道 / 模型」按钮:

  1. 在根面板选择 API 通道;顶部搜索可直接按模型名跨通道过滤。
  2. 进入通道后按家族浏览,或继续输入关键字缩小列表。
  3. 点击一行 → 菜单关闭,当前会话模型切换,原生模型控件同步。
  4. 若不知道模型在哪个通道,可使用「全部模型(按类别)」按家族查找,再根据行尾通道名确认来源。

切换模型后,如需调整原生控件中的推理等级(如 High),仍在原生模型控件中操作;本插件菜单不提供推理等级切换(README 已知限制)。

适用场景与注意

适合谁

  • 同时配置 DeepSeek 账号、官方 API、中转站(OpenRouter 等)或本地 Ollama,模型条目多、需要按通道与家族浏览的 DSH 用户。
  • 希望在不改原生单槽控件的前提下,多一个并列的快速选型入口的开发者。

开发与验证环境(README)

  • 平台:DSH Web / 桌面端。
  • 开发与验证版本:DeepSeek Harness 0.2.1-rc.2。
  • 依赖注入服务:slots、modelDirectories(模型选择 UI 自带),无需额外安装插件。

分类与兼容性

  • 分类为启发式规则,冷门模型可能落在「其他」;中转站 id 变体(如 ~openai/…、accounts/、Bedrock 点号 id 等)在 README 中列出已处理案例,仍可能随上游 id 变化需要更新。
  • 修改分类可编辑 src/classify.mjs,维护者流程为 npm test → npm run build → 刷新页面(HMR 按客户端 bundle 的 mtime 重载)。

结尾

dsh-model-hub 把 DSH 里冗长的模型平铺列表收成「先通道、再家族」的两级菜单,并保留搜索与跨通道按类别视图,针对多通道、多模型(尤其中转站长列表)的选型痛点。需要安装或贡献分类规则时,可访问目录页 awawuming/dsh-model-hub 与源码仓库 github.com/awawuming/dsh-model-hub。

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

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

小夜