dsh-model-picker:给 dsh web GUI 换一个双栏模型选择面板

前言

用 dsh web GUI 做智能体开发时,模型选择器是高频交互点。默认实现是单列长滚动的分组列表,提供商和模型一多,定位一个目标要滚很久,也没有跨提供商的搜索。DSH 的理念是「一切皆插件」,composer 的模型选择座位同样可以由插件顶替。下面介绍的 dsh-model-picker 就是做这件事的。

这是什么

dsh-model-picker 为 dsh web GUI 的模型选择器提供增强面板:左侧提供商栏 + 右侧模型列表,两侧独立滚动,支持跨提供商搜索,替代默认的单列长滚动分组列表。由 Sanqi-normal 维护,MIT 许可证,当前版本 1.0.2。

核心功能

  • 左栏按提供商纵向排列,独立滚动,带模型计数徽章;右栏显示当前提供商的模型,同样独立滚动——几十个提供商、上百个模型也能顺畅浏览
  • 默认选中当前模型所属的提供商,点击任意提供商即切换
  • 顶部搜索框跨提供商匹配提供商名 / 模型名 / 描述,大小写不敏感;结果带提供商名,点选即切换
  • 保留推理档位切换(当前模型支持时显示在底部),以及加载 / 错误 / 重试 / 空态
  • 与内置 /model 弹层共享同一份模型目录(ctx.modelDirectories),任一处切换另一处立即同步,composer 的模型阻塞逻辑不受影响
  • 界面跟随系统深浅色主题,文案中英文自动切换

工作原理

插件以持久化 bundle 的方式接入:package.json 里的 dsh.bundle.patch 指向 cordis.patch.yml,由 dsh plugin add 的 reconcile 自动加入 profile 的 dsh.profile.bundles 层。

Client 半(lib/client.js)通过 exports["./client"] + dsh.client 被 web 前端加载,注册到 composer 的 conversation.input.model 座位(priority -1,顶替默认实现);数据复用内置 ui-model-selection 的 ctx.modelDirectories 每会话目录(session.models / session.selectModel),不引入第二份状态——这也是面板和 /model 弹层能即时同步的原因。

Host 半(lib/host.js)是空实现:Node 侧 loader 以包根入口导入它,浏览器专属的 lib/client.js 只在 ./client 导出下被 web 端加载,因此 Host 半无网络请求、无持久化状态。两个入口在 exports 中分开声明:

"exports": {
  ".": "./lib/host.js",
  "./client": "./lib/client.js"
}

安装与启用

推荐从 npm registry 安装,无 git 克隆 / prepare 脚本步骤:

dsh plugin --profile web add dsh-model-picker

也可以从 GitHub 源码安装:

dsh plugin --profile web add github:Sanqi-normal/dsh-model-picker

源码安装会执行包内 prepare 脚本,如被 pnpm 拦截,把提示的包名加入 profile 的 pnpm-workspace.yamlallowBuilds 后重试。

安装后重启 web 服务生效:

pnpm dsh web

环境要求:Node ^22.19.0 || >=24.0.0;peerDependencies 为 react ^18.2.0@deepseek-ai/cordis@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-slots

日常使用

1、打开任意会话,点击 composer 工具行右端的模型选择器(发送按钮左侧)。

2、左栏点击提供商,右栏随之切换该提供商的模型;右栏点击模型即选中,当前模型带 ✓ 标记。

3、顶部输入关键词,右栏切换为跨提供商搜索结果;点击左侧任意提供商即退出搜索并切换。

4、当前模型支持推理档位时,菜单底部出现档位按钮(含「提供方默认」)。

适用场景与注意事项

适合在 web GUI 里维护多个提供商、上百个模型,需要快速浏览或搜索切换的场景;也适合希望面板选择与 /model 弹层保持一致、不引入第二份状态的场景。

注意以下几点:

  • 需要 web profile 已装载 @deepseek-ai/dsh-client-ui-model-selection(web-app 内置,通常已存在);缺失时选择器座位保持空置,回退安全
  • 动态安装后需重启 web 服务生效,与所有 profile bundle 一致
  • 仅影响 composer 的模型选择座位;/model 弹层保持原样,但与面板共享同一份当前选择
  • 插件以当前 dsh 进程权限运行,安装前建议检查源码与许可证

小结

dsh-model-picker 把默认的单列长滚动列表换成双栏面板加跨提供商搜索,复用内置模型目录,不引入第二份状态,Host 半也没有网络请求和持久化开销,属于安装即用的界面增强插件。

插件目录页:https://www.skillhub.cn/plugins/Sanqi-normal/dsh-model-picker
GitHub 仓库:https://github.com/Sanqi-normal/dsh-model-picker

(目录页为社区独立站点,与 DeepSeek / 幻方无官方从属关系。)

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

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

Xiaoye