dsh-model-sync:把推理端模型列表自动写进 DSH 设置

前言

在 DeepSeek Harness(DSH)里接 llm-pi-ai 推理服务时,Settings → Models 里的模型下拉往往要靠手填 id,服务端一上新模型或下线旧模型,就要人工对照 GET {baseURL}/models 或目录 catalog 再改一遍。维护者 mpetruc 的 dsh-model-sync(社区分类:模型推理)做的是:按各 provider 对外公布的列表,把模型写进设置区,让下拉框尽量与推理端一致,而不用逐条手敲。

下面介绍插件做什么、同步规则、怎么手动刷新,以及 bundle 里的配置项。版本与许可证以仓库为准:当前 package 版本 0.7.1,MIT。

这是什么

dsh-model-sync 会把每个已配置的 llm-pi-ai provider 对外公布的 model list,镜像到 DSH 的 Settings → Models,使模型下拉展示 provider 的完整列表,无需手填。

发现模型走 llm 服务的 discoverModels('llm-pi-ai', …):OpenAI 兼容路由用 GET {baseURL}/models;catalog 路由用已安装的 catalog。

社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系;插件按 DSH「一切皆插件」的方式分发与启用。

核心功能

激活时自动同步

每次激活插件都会跑一轮同步:首次启动,以及从 Plugins 页手动重新启用。llm / settings 服务就绪后约 1.5 s 执行;若配置里 intervalMinutes 为正数,还会按该间隔重复同步。

仅当某次同步至少改了一个 provider 的 models 时,才会写回 settings 对应段落。

手动按需刷新

需要立刻拉最新列表时:

  1. 打开侧边栏 Plugins
  2. 展开 dsh-model-sync 卡片
  3. 将 model-sync 那一行的开关先关再开

重新启用会重启插件,约 1.5 s 后重新读取各 provider 公布的列表。

同步结果怎么查看

日志:每次激活同步会打 [dsh-model-sync] activation summary: …,按 provider 列出新增(或 prune: true 时的删除)的 model id,或 no models added or removed。定时 interval 同步不打 summary。触发类型也会记录:activation sync(启动/重开)或 interval sync。

Plugins 页:结果写入 model-sync 设置命名空间的 lastSync,并在卡片上显示 Last sync 面板(描述与 Components 之间),含运行时间与每个 provider 一行摘要;重开开关触发同步后约 1.5 s 面板会随 settings 文档更新。

同步规则(Adds / Prune / Rejected)

Adds:尚未配置的 discovered id 会追加,并带 owner: 'model-sync';若 listing 提供 name、contextWindow、maxTokens、input 等元数据也会写入。手填项无 owner;已有项不会被重写,id、顺序和手填容量在每次同步后保留。

Prune(需 prune: true):仅删除仍带 owner: 'model-sync'、且已不再被 provider 公布的项;手填项永不 prune。

Rejected:在同一次激活周期内、且 intervalMinutes > 0 时,若某个仍被公布的、带 owner: 'model-sync' 的 id 在连续两次同步之间从配置里消失,视为用户故意删除,记入插件 state,之后不再自动加回。手动再把该 id 加回配置会清除 rejection。手动关开插件会重置内存 baseline,单次 activation sync 会把误删的 owned id 再加回来;删除检测只在 intervalMinutes 为正时持续生效。

拒绝列表等 bookkeeping 在 state 文件 <dshHome>/storages/model-sync/state.json(可用 stateFile 覆盖),不在 settings 文档里。settings 里只保留供 UI 展示的 lastSync。旧版无 owner 的项视同手填;清空某 provider 的 models 后让插件重建,可让条目全部纳入跟踪。0.7.0 起,原 settings 里 model-sync.providers 会在下次 sync 迁移到 state 并从 settings 移除。

安装与启用

README 未给出单独的 CLI 安装命令;可从社区目录页或 GitHub 仓库安装 bundle(与你在 DSH 里安装其他社区插件的方式一致)。安装前建议阅读源码与 MIT 许可证:插件以当前 DSH 进程权限运行,会调用 llm 发现接口并修改 models 相关设置。

启用后,bundle 会插入 model-sync 组件行;首次激活即触发一轮同步。Node 运行时:engines 要求 >=18。

配置

bundle 插入的 model-sync 行示例(字段含义以 README 为准):

- id: model-sync
  name: dsh-model-sync
  config:
    intervalMinutes: 0   # 0 = 仅在激活时同步(启动或重开);
                         # N = 另每 N 分钟重复一次
    #     NB: intervalMinutes > 0 才会启用 rejected 删除检测
    prune: false         # true = 移除已不再公布的、由 sync 添加的 id
    # providers: [amd-server]   # 可选:只同步列出的 provider
    # stateFile:                # 可选:rejection state 路径
    #                           # 默认 <dshHome>/storages/model-sync/state.json

按需调整 intervalMinutes、prune,必要时用 providers 限定范围。

典型用法

  1. 在 DSH 中已配置好 llm-pi-ai provider(含可访问的 baseURL 或 catalog)。
  2. 安装并启用 dsh-model-sync,等待首次 activation sync(约 1.5 s)。
  3. 打开 Settings → Models,确认下拉中出现服务端公布的模型;手填项应仍保留且不被覆盖。
  4. 推理端更新模型列表后,到 Plugins 对 model-sync 开关关再开,或设置 intervalMinutes 做周期同步。
  5. 若希望下线模型从列表里自动去掉,将 prune 设为 true;若需在周期同步中识别「用户删掉的 auto 项」,必须设 intervalMinutes > 0。

endpoint 不可用时会跳过该 provider 并告警;发现失败不会让整行插件失败。

适用场景与注意

适合:自建或频繁变更模型列表的 OpenAI 兼容推理服务、catalog 路由;希望 Settings 模型列表与 discoverModels 结果对齐、又不想手维护 dozens of model id 的 DSH / 智能体开发者。

注意:

  • 自动追加的项带 owner: 'model-sync',与手填项区分;开启 prune 前确认不会误删你仍想保留、但服务端已下线的 auto 项(手填项不受影响)。
  • rejected 逻辑依赖周期同步;只做「启动 + 手动重开」时,不会在同一激活周期外做 consecutive diff。
  • 查看 host 日志可核对 [dsh-model-sync] activation sync / interval sync 与 summary 行。

结尾

dsh-model-sync 把 llm-pi-ai provider 公布的模型列表同步进 Settings → Models,减少手填与手工对表;通过 Plugins 开关或 intervalMinutes 控制刷新,用 owner / prune / state 里的 rejected 区分手填、自动项与用户删项。

  • 目录页:https://www.skillhub.cn/plugins/mpetruc/dsh-model-sync
  • GitHub:https://github.com/mpetruc/dsh-model-sync
羽毛球分组比赛记分
小程序二维码

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

小夜