DSH XD Pool
XDTrees/dsh-xdpool把本机 WorkBuddy 桌面 App 登录过的所有账号自动并入 DSH 模型池:多账号轮换自动容错、实时积分,模型目录按模型标注积分倍率与限时免费 / 夜间折扣。
在模型设置页为每个 pi-ai 路由新增上下文窗口与压缩阈值字段,并在输入框右下角按厂商提供思考强度选择器,写入 llm-pi-ai 容量、reasoningEfforts 与 compaction-basic 补丁行。
English | 中文
在 DSH Web 的 设置 → 模型 页面,为每个 pi-ai 提供方路由加一组「上下文窗口 / 压缩阈值 / 保留预算」输入框。填一次,窗口和压缩时机就按你写的绝对 token 数生效,不需要重启。
接入第三方网关时,路由常常是手工声明的(自己写 api + baseURL + models)。这类路由的模型 id 往往匹配不到 pi-ai 内置目录——例如 my-gateway 下的 grok-4.6 与目录里的 x-ai/grok-4.6 并不是同一条路由——于是适配器的容量解析走到最后一级回退 defaultContextWindow,也就是 262144。而压缩后端只接受一个比例 thresholdRatio,无法直接表达「到 600k 就压缩」。
本插件把这两件事变成两个输入框:
| 字段 | 写入位置 | 效果 |
|---|---|---|
| 上下文窗口 | llm-pi-ai 设置的 providers.<路由>.defaultContextWindow | 该路由下未被自身条目和内置目录描述的模型,容量立即变为你填的值 |
| 压缩阈值 | profile 的 cordis.patch.yml 中 compaction-basic 的 modelPolicies[].thresholdRatio | 后端计算 floor(上下文窗口 × 比例),即你要的绝对阈值 |
| 保留预算(可选) | 同上,modelPolicies[].retainTokens | 压缩时逐字保留的近期上下文;留空沿用后端默认 16% 比例 |
| 思考强度 | llm-pi-ai 设置的 providers.<路由>.models[].reasoningEfforts | 输入框右下角的选择器按厂商识别等级,选中的等级随请求发给模型 |
压缩阈值按 阈值 / 窗口 换算成比例写入,所以之后你再改窗口,阈值比例会按新窗口重新换算——改窗口后请重新点一次「应用」,让比例跟着更新。
手工声明的路由没有目录条目,适配器因此把它的模型当作非推理模型——模型选择器里只会显示「当前模型未提供推理等级」。本插件把强度调节放在输入框右下角,紧挨模型选择器,不占用配置卡片:
models[i].reasoningEfforts,再切换会话强度——否则适配器会因「模型不支持该等级」拒绝这次选择。内置厂商档案,按模型 id 匹配、第一个命中的生效:
| 厂商 | 匹配 | 等级 |
|---|---|---|
| xAI | grok | off low high max |
| OpenAI | gpt / chatgpt / o1…o9 | minimal low medium high |
| Anthropic | claude | low medium high |
| DeepSeek | deepseek | off high |
gemini / gemma | minimal low medium high | |
| Qwen | qwen | off low medium high |
| Z.ai | glm / z-ai | off high |
| Moonshot | kimi / moonshot | off high |
| MiniMax | minimax | off low medium high |
发出去的 wire 值就是等级名本身(openai-completions 发 reasoning_effort,openai-responses 发 reasoning.effort)。网关用别的拼写时,改 settings.yaml 里对应模型 reasoningEfforts 的右侧值即可,选择器里显示的名字不受影响。
选中的等级会被持久记录在会话日志的 request/header 中,并随请求发给模型。
compaction-basic 的阈值公式是 thresholdTokens = floor(contextWindow × thresholdRatio),而 contextWindow 在每一次 agent/pre-step 都会通过 llm.resolveModelInfo() 重新解析。因此只写比例就够了:官方引擎的持久事务、回放复用与溢出恢复全部保留,本插件只提供它本来就接受的两个数字。
dsh plugin --profile web add dsh-context-budget
重启一次 dsh web,然后打开 设置 → 模型,展开任意 pi-ai 提供方的编辑卡片,「上下文预算」区就在卡片内。
写入成功后 profile 的 patch 监视器(patchReload: live)会在约 1 秒内重新组合,无需再次重启。
写入前会在宿主端校验,不合法直接拒绝并给出原因:
(0, 1),且大于 compaction-basic 的默认保留比例 0.16——否则后端会在加载时拒绝该配置;modelPolicies 需要精确的 provider/model 对)。cordis.patch.yml 是你自己的配置层,插件只碰自己写的那一段:
cordis.patch.yml.contextbudget.bak;provider/model 是否落盘,失败立即回滚原文;- id: compaction-basic 行,插件会拒绝写入并告诉你行号,而不是覆盖你的配置。llm-pi-ai 路由生效;llm-deepseek 的模型目录编辑在官方页面里已经能改 contextWindow。defaultContextWindow 是回退值,不会覆盖模型条目里已经显式写过的 contextWindow,也不会覆盖内置目录已描述的模型。对纯目录路由(models 省略)请改用逐模型填写。CONTEXT_WINDOW_EXCEEDED 失败,然后靠溢出恢复多花一次摘要请求。maxTokens 不在本插件的字段里,默认 32768;窗口设 1M 时实际可用输入约 968k。dsh plugin --profile web remove dsh-context-budget
卸载只会移除插件本身。它写下的两处内容需要你自行决定:
llm-pi-ai 设置里的 defaultContextWindow —— 想恢复 262144 就删掉该字段;cordis.patch.yml 里 # dsh-context-budget managed block 标记的那一段 —— 整段删掉即可,其余内容不受影响。每次写入前都会留一份 cordis.patch.yml.contextbudget.bak,可直接用来比对或还原。
node --check lib/index.js
node --check client.js
node test/pure.test.mjs # 校验规则 + 受管块写入/回滚
node test/integration.test.mjs # apply() 注册与 patch 路径解析
node test/apply.test.mjs # 完整写入流程(mock 上下文)
node test/client.test.mjs # 客户端插槽注册与卡片渲染
两组测试都不需要运行中的 Harness。
MIT