dsh-default-reasoning-efforts:为未声明推理档位的模型自动补齐 high / xhigh / max

前言

在 DeepSeek Harness(DSH)里给模型调推理强度时,档位不是界面「画」出来的,而是 Host 侧 LLM 适配器根据 profile 里的 reasoningEfforts 解析出的模型能力。手写或新增的模型若没在配置里声明这一字段,解析结果往往是 reasoning: false:模型目录里没有档位,官方菜单连「推理等级」一行都不会出现;即便客户端强行塞档位,dsh-llm 也会在 resolveCallWithInfo() 里以 UNSUPPORTED_REASONING_EFFORT 拒绝请求。

社区里 dsh-codex-effort-slider 这类滑条控件,能否滑到某一档,同样取决于模型是否在配置里具备对应档位。下面介绍维护者 junjundesk 的 Host 插件 dsh-default-reasoning-efforts:对适配器配置中所有未声明 reasoningEfforts 的模型,自动写入 high / xhigh / max 三档,走 configEditor 正常校验与原子写路径,并刻意避开 HMR 嵌套事务导致的静默失败。

这是什么

dsh-default-reasoning-efforts 是面向 DeepSeek Harness 的 Host 插件(分类:工作流)。仓库:junjundesk/dsh-default-reasoning-efforts;社区目录页:SkillHub 条目。

它解决的是「配置缺档 → 适配器不认 → UI 与请求链路都不成立」这一端到端问题:把档位写进 provider 的模型声明,让 dsh-llm-pi-ai 的 resolveModelReasoning() → getSupportedThinkingLevels() → reasoningInfo() 整条链路能认出模型具备推理档位。插件零运行时依赖、无构建步骤,补齐逻辑幂等;与 effort 滑条类插件配合时,本插件负责把缺的档位补上,滑条负责在已有档位上操作。

为什么必须改配置

能力从配置到界面的路径在 README 里写得很清楚:

profile 配置 reasoningEfforts
  → dsh-llm-pi-ai: resolveModelReasoning() → pi-ai thinkingLevelMap
  → getSupportedThinkingLevels() → reasoningInfo() → ctx.llm.resolveModelInfo()
  → 模型目录(浏览器)→ 官方菜单「推理等级」那一行 / 滑条刻度

未写 reasoningEfforts 的模型,尤其是手写声明、不在 pi-ai 内置目录里的条目,没有可继承的能力,后果有两层:目录无档、菜单不渲染;调用侧也会被 UNSUPPORTED_REASONING_EFFORT 拦下。因此唯一可靠做法是把档位写进 provider 配置,由适配器识别。

核心功能

幂等补齐流程

插件在 apply() 中做一次可重入的配置补齐:

  1. 等待目标 entry(默认 @deepseek-ai/dsh-llm-pi-ai)出现在 configEditor 中,退避重试约 30 秒;
  2. 读取有效配置,在 providers.<route>.models[] 里找出 reasoningEfforts 未声明的模型;
  3. 通过 ctx.configEditor.edit() 写回 profile patch(校验 → 原子写 → 失败回滚,YAML 注释保留);
  4. 调用 ctx.emit('llm/adapters-updated'),已连接的浏览器会立即重拉模型目录,无需刷新页面。

没有任何模型需要补时,不写一个字节,也不触发重载循环;档位已等于目标三档的模型会跳过,第二次运行是彻底的 no-op。

HMR 事务外写入

热装即可生效,无需重启宿主。写入被刻意放在 HMR 事务之外:configEditor.edit() 内部使用 hmr.runExclusive(),若已在 HMR 事务内会拒绝嵌套(HMR transactions cannot be nested)。插件热装时 apply() 常落在事务内,且 AsyncLocalStorage 上下文会沿 setTimeout 传递,单纯「延后写」无法逃脱。实现上参照官方 hmr.watchConfig,用 AsyncLocalStorage.exit() 把写入放到事务外;写入被拒时退避重试约 37 秒,不静默吞错。

默认规则

模型状态 行为
未写 reasoningEfforts 补上 { high: high, xhigh: xhigh, max: max }
reasoningEfforts: false 不修改(显式表示无推理)
写了其它档位表 不修改
已恰好为三档 不修改(幂等)

只改 providers.*.models[].reasoningEfforts 一个字段;补的是声明,端点是否接受 xhigh/max 由上游 API 决定。

可选配置与自检

配置文件路径:$DSH_HOME/dsh-default-reasoning-efforts/config.json(不存在则使用内置默认值,修改后下次检查生效)。

{
  "enabled": true,
  "levels": { "high": "high", "xhigh": "xhigh", "max": "max" },
  "targets": ["@deepseek-ai/dsh-llm-pi-ai"],
  "providers": [],
  "includeDeclared": false,
  "dryRun": false
}

常用键含义:enabled 为 false 时插件加载但不补齐;levels 的键限于 pi-ai 七档名 off/minimal/low/medium/high/xhigh/max,值为线上拼写(off 可用 null 表示不发送参数);targets 为要处理的 entry 包名,默认仅 pi-ai;providers 为 route 白名单,空数组表示全部;includeDeclared 为 true 时会覆盖已声明模型;dryRun 为 true 时只打日志不写文件;pollSeconds 为兜底自检间隔(默认 30 秒,0 关闭)。

补齐时机:每次 DSH 启动一定会全量扫描;运行中在设置页新增模型,通常在 pollSeconds 内补上;直接手改 cordis.patch.yml 可能要等到下次启动(该环境下 HMR 未必把文件改动送进运行中的 Loader)。插件订阅多种宿主事件,同时用定时自检保证「新模型最终会被补上」。

排障可先读 $DSH_HOME/dsh-default-reasoning-efforts/status.json(仅结果变化时写入)。status 可能为 patched、no-change、dry-run、waiting-entry、read-failed、write-failed、crashed、disabled 等。

安装与启用

面板路径:设置 → 插件 → 添加插件 → 填写仓库地址或本目录绝对路径。

非 desktop profile 可用命令行(以 README 原文为准):

dsh plugin --profile web add github:junjundesk/dsh-default-reasoning-efforts

本地开发可链到目录:

dsh plugin --profile web add link:"<本目录的绝对路径>"

插件仅使用 Node 内置模块,要求 Node >=22,MIT 许可。安装前建议自行查看仓库源码与许可证;插件以当前 dsh 进程权限运行,会修改 profile 相关配置。

典型用法

  1. 安装并启用插件,确认 config.json 中 enabled 为 true(或省略文件使用默认)。
  2. 在 DSH 中为 pi-ai 适配器添加未声明 reasoningEfforts 的自定义模型。
  3. 查看 status.json 是否出现 patched 及 changedModels 列表;在浏览器模型目录中应能看到推理档位,并可与 dsh-codex-effort-slider 等控件配合。
  4. 若只想预览变更,将 dryRun 设为 true,根据日志决定是否正式写入。

开发者可在插件目录运行测试(43 项断言,含 HMR 事务逃逸回归):

node test/plan.test.mjs

适用场景与注意

适合:使用 dsh-llm-pi-ai、频繁添加自定义模型、又需要在官方 UI 或 effort 滑条上使用 high/xhigh/max 的 DSH 用户与工作流搭建者。

注意:

  • targets 默认只含 pi-ai;其它适配器 schema 不同,乱加可能导致上游拒请求。
  • 卸载或 enabled: false 后,已写入 profile patch 的 reasoningEfforts 不会自动删除,需手动改配置恢复。
  • 配置非法时会回退内置默认并在日志说明原因。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-default-reasoning-efforts 把「未声明推理档位」的缺口收敛到一次幂等的 Host 侧写配置:让 pi-ai 适配器、模型目录、官方菜单与调用校验在同一份 reasoningEfforts 上对齐。需要进一步了解参数与边界时,以仓库 README 为准。

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

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

小夜