alaxrpg/dsh-adaptive-model-router0

dsh-adaptive-model-router

Adaptive model discovery, evaluation, tiering, and subagent routing for DeepSeek Harness

包名
dsh-adaptive-model-router
版本
0.1.1
许可证
MIT
最近更新
2026年8月25日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:alaxrpg/dsh-adaptive-model-router

配置

可视化配置

在 DSH Web profile 中,插件会在 webServer 可用时注册一个不依赖外网 CDN 的本地配置页:

http://127.0.0.1:3080/adaptive-model-router/config

端口请以 DSH 启动时输出为准。页面可编辑启用状态、难度策略、刷新周期、路由/回退、分档阈值、评价权重以及 Provider 的人工档位、别名和回退模型。保存时页面回传读取到的 settings revision,Host 只对白名单路径调用 SettingsProvider.mutate():Provider/别名删除可立即生效,浏览器未获取的 discovery、凭据、外部源、probe 和内部路径不会被重写;过期 revision 会被拒绝。提交后通过 SettingsScope.watch() 热重载路由运行时。

安全边界:

  • 页面和 API 只由当前 DSH 同源提供;修改请求必须使用 loopback Host(127.0.0.1localhost[::1])、匹配的 Origin 和 application/json,且请求体有大小上限。
  • apiKey、外部源 headerstoolNamesubagentProviderdataDir 和 discovery 连接参数不会发送到浏览器,API 也拒绝写入这些字段。
  • Provider 删除按层区分:settings.yaml 用户层中的 Provider 会被真正删除(unset);由 profile 组合基座(cordis.patch.yml 的插件 config)定义的 Provider 无法通过浏览器删除——删除请求会改写为 enabled: false 的用户层覆盖,避免“删不掉又悄悄复活”的假象,真正移除需修改基座配置。
  • 悬挂或缓慢的请求体读取有超时上限;非预期错误只返回通用提示,不回显内部路径。
  • 付费 evaluation.probes 只读显示当前启用状态,不能通过页面启用或修改预算;默认仍为关闭。
  • CLI profile 没有 webServer 时只不注册页面,路由工具和 settings 热重载不受影响。

DSH 0.1.0-rc.6 的内置“插件配置”页面并不会根据任意第三方 Schemastery schema 自动生成表单,Host API proxy 也对可从 Web 访问的 settings namespace 使用显式白名单。因此本插件按官方的 webServer 路由扩展点提供自带页面,不修改 DSH core 或安装目录。参见 DeepSeek Harness ArchitectureExtension Cookbook。DSH 当前仍是 developer preview,升级后应重新验证此集成边界。

官方设置面板“插件配置”卡片

自 DSH 0.1.0-rc.7 起,Host API 已全量暴露第三方 settings 命名空间,官方设置面板新增“插件配置”标签页,通过 settings.plugin.item 槽以命名空间为键配对浏览器卡片。本插件随包提供浏览器半身(package.jsondsh.client 声明 + exports["./client"]),因此在 DSH Web profile 的 设置 → 插件 → 插件配置 中会显示“自适应模型路由”卡片,可编辑:启用开关、难度模式、默认档位,以及每个 Provider 的启用与 easy/normal/hard 三档模型(下拉含已发现模型,未指定时标注当前自动档位模型)。保存走 revision-fenced 的嵌套路径 mutate,与独立页面同一套写语义。

浏览器半身源码在 src-client/,构建产物为 lib/client.js(lazy-CJS factory 格式)。修改源码后需重新构建:

npm run build:client

构建依赖(esbuild)与宿主提供的 client 服务声明在 package.jsondsh.client.inject。插件集变更需重启 DSH 生效。

最小配置:

adaptive-model-router:
  enabled: true
  providers: {}

完整默认值和单 Provider 人工三档配置见 examples/settings.yaml。关键配置如下:

配置默认值说明
difficulty.defaultTiernormal自动难度无法可靠判断时使用
refresh.runOnStarttrue启动后执行一次刷新
refresh.intervalMinutes360周期刷新间隔
refresh.jitterMinutes15最多附加的随机抖动
refresh.staleAfterHours72自动策略过期界线
routing.unavailableActionfallback显式 Provider/模型不可用时回退并记录原因,或用 error 直接报错
evaluation.minimumConfidence0.60自动路由最低置信度
evaluation.probes.enabledfalse是否允许真实调用探测
evaluation.probes.estimatedCostUsd未设置模型价格未知时,每个 probe 请求预留的最坏费用;未设置则拒绝探测
classification.strategythresholdsthresholds 或 Provider 内 percentile
routing.staleActionlast-known-good策略过期后的动作

每个 Provider 的 tiers.easy/normal/hard 支持:

  • mode: auto:选择最新、未过期、置信度合格的自动评价结果。
  • mode: prefer:优先指定 model,不可用时回到自动选择。
  • mode: manual:固定指定 model
  • locked: true:周期刷新不能替换该档的人工结果。

同一模型可人工配置到全部三个档位;只有一个可用模型时无需伪造三个不同候选。

可视化配置

在 DSH Web profile 中,插件会在 webServer 可用时注册一个不依赖外网 CDN 的本地配置页:

http://127.0.0.1:3080/adaptive-model-router/config

端口请以 DSH 启动时输出为准。页面可编辑启用状态、难度策略、刷新周期、路由/回退、分档阈值、评价权重以及 Provider 的人工档位、别名和回退模型。保存时页面回传读取到的 settings revision,Host 只对白名单路径调用 SettingsProvider.mutate():Provider/别名删除可立即生效,浏览器未获取的 discovery、凭据、外部源、probe 和内部路径不会被重写;过期 revision 会被拒绝。提交后通过 SettingsScope.watch() 热重载路由运行时。

安全边界:

  • 页面和 API 只由当前 DSH 同源提供;修改请求必须使用 loopback Host(127.0.0.1localhost[::1])、匹配的 Origin 和 application/json,且请求体有大小上限。
  • apiKey、外部源 headerstoolNamesubagentProviderdataDir 和 discovery 连接参数不会发送到浏览器,API 也拒绝写入这些字段。
  • Provider 删除按层区分:settings.yaml 用户层中的 Provider 会被真正删除(unset);由 profile 组合基座(cordis.patch.yml 的插件 config)定义的 Provider 无法通过浏览器删除——删除请求会改写为 enabled: false 的用户层覆盖,避免“删不掉又悄悄复活”的假象,真正移除需修改基座配置。
  • 悬挂或缓慢的请求体读取有超时上限;非预期错误只返回通用提示,不回显内部路径。
  • 付费 evaluation.probes 只读显示当前启用状态,不能通过页面启用或修改预算;默认仍为关闭。
  • CLI profile 没有 webServer 时只不注册页面,路由工具和 settings 热重载不受影响。

DSH 0.1.0-rc.6 的内置“插件配置”页面并不会根据任意第三方 Schemastery schema 自动生成表单,Host API proxy 也对可从 Web 访问的 settings namespace 使用显式白名单。因此本插件按官方的 webServer 路由扩展点提供自带页面,不修改 DSH core 或安装目录。参见 DeepSeek Harness ArchitectureExtension Cookbook。DSH 当前仍是 developer preview,升级后应重新验证此集成边界。

官方设置面板“插件配置”卡片

自 DSH 0.1.0-rc.7 起,Host API 已全量暴露第三方 settings 命名空间,官方设置面板新增“插件配置”标签页,通过 settings.plugin.item 槽以命名空间为键配对浏览器卡片。本插件随包提供浏览器半身(package.jsondsh.client 声明 + exports["./client"]),因此在 DSH Web profile 的 设置 → 插件 → 插件配置 中会显示“自适应模型路由”卡片,可编辑:启用开关、难度模式、默认档位,以及每个 Provider 的启用与 easy/normal/hard 三档模型(下拉含已发现模型,未指定时标注当前自动档位模型)。保存走 revision-fenced 的嵌套路径 mutate,与独立页面同一套写语义。

浏览器半身源码在 src-client/,构建产物为 lib/client.js(lazy-CJS factory 格式)。修改源码后需重新构建:

npm run build:client

构建依赖(esbuild)与宿主提供的 client 服务声明在 package.jsondsh.client.inject。插件集变更需重启 DSH 生效。

最小配置:

adaptive-model-router:
  enabled: true
  providers: {}

完整默认值和单 Provider 人工三档配置见 examples/settings.yaml。关键配置如下:

配置默认值说明
difficulty.defaultTiernormal自动难度无法可靠判断时使用
refresh.runOnStarttrue启动后执行一次刷新
refresh.intervalMinutes360周期刷新间隔
refresh.jitterMinutes15最多附加的随机抖动
refresh.staleAfterHours72自动策略过期界线
routing.unavailableActionfallback显式 Provider/模型不可用时回退并记录原因,或用 error 直接报错
evaluation.minimumConfidence0.60自动路由最低置信度
evaluation.probes.enabledfalse是否允许真实调用探测
evaluation.probes.estimatedCostUsd未设置模型价格未知时,每个 probe 请求预留的最坏费用;未设置则拒绝探测
classification.strategythresholdsthresholds 或 Provider 内 percentile
routing.staleActionlast-known-good策略过期后的动作

每个 Provider 的 tiers.easy/normal/hard 支持:

  • mode: auto:选择最新、未过期、置信度合格的自动评价结果。
  • mode: prefer:优先指定 model,不可用时回到自动选择。
  • mode: manual:固定指定 model
  • locked: true:周期刷新不能替换该档的人工结果。

同一模型可人工配置到全部三个档位;只有一个可用模型时无需伪造三个不同候选。