Перейти к основному содержимому
K

dsh-model-capabilities

kalospacer/dsh-model-capabilities

Добавляет страницу настроек для объявления уровня рассуждений по каждой модели и поддержки зрения в маршрутах провайдера pi-ai.

Установка

dsh plugin --profile web add github:kalospacer/dsh-model-capabilities

README

dsh-model-capabilities

给 DSH 的设置里加一页 模型能力:为 pi-ai 路由编辑上下文窗口、最大输出 token 数、输入类型(文本 / 图片等模态)和思考强度映射。改的每一项都通过 settings.mutate 真正写回配置,不是展示页。

安装与使用

dsh plugin --profile web add github:Kalospacer/dsh-model-capabilities#main

安装后重启 DSH Web Host,打开 设置 → 模型能力。

页面分两级:列表页列出全部可配置模型(模型名 + 一行小摘要),点哪一行就进哪一行的 详情页。窄屏自动转单列布局;移动端、暗色模式均跟随宿主。

详情页从上到下依次为:模型名与别名 → 快速预设 面板 → 上下文窗口与最大输出 token 数(左右并排)→ 输入类型(文本 / 图片勾选)→ 思考强度映射 → 底部 保存 / 放弃更改。

  1. 首次进入一个没有任何已保存能力字段的模型时,插件会用 OpenRouter 目录的保守匹配自动填一次初始值(只填在内存草稿里,不会静默写盘)。
  2. 若自动匹配没找到、或想换成另一个模型的元数据,可在 快速预设 里手动搜索并 采纳此预设:采纳会把上下文、最大输出、输入类型全量套到当前草稿,思考映射保持原状。
  3. 核对 / 修改后点 保存 真正写回 llm-pi-ai 配置;点 放弃更改 丢弃未保存草稿。

仅在模型能力页打开时扫描当前模型与宿主推送的新模型;不修改 DSH 自己的模型发现流程,也不在后台探测或发送聊天请求。

四项能力

设置DSH 字段说明
上下文窗口contextWindow正整数;支持 128k、1m 输入,k = 1024;留空继承上游目录
最大输出 token 数maxTokens正整数;预填按 128k 封顶(上游标称更小就用上游值)——上游给的是理论峰值,DSH 会把它当作每次请求的预留输出,照抄会把自动压缩阈值压塌
输入类型input继承上游目录 / 自定义「文本」「图片」勾选;host 原本的 audio/video 等模态原样保留
思考强度reasoningEfforts继承上游目录 / 不支持思考 / 自定义各档位的实际发送值

数字字段留空表示继承;清空已保存的覆盖值后保存,会删除这个字段的覆盖。

「最大输出 token 数」下方会实时显示一行自动压缩阈值估算:DSH 的压缩插件在会话 token 超过 min(0.8×窗口, 窗口−输出上限−65536) 时自动压缩上下文(默认值,见 DSH compaction-basic)。输出上限填得越大阈值越低;估算结果 ≤ 0 时 DSH 会直接报配置错误,本行也会给出警示。该行为纯只读提示,不参与保存。

思考值不是通用档位名

左侧是 DSH 的界面选项,右侧是模型或当前线路实际接受的字符串。两者不一定同名:

reasoningEfforts:
  off: none
  low: low
  high: high
  xhigh: extra
  • 选择 off 时,发送 none,而不是擅自改成 off。
  • 选择 xhigh 时,可以发送 extra;也可以手动填写当前网关要求的其他值。
  • 非 off 选项必须有实际发送值。low: null 不是“默认发送 low”,会被当前宿主拒绝。
  • off: null 是特例,表示关闭选项不发送思考参数。
  • reasoningEfforts: false 表示不支持推理,不等同于 off → none。

自动映射仅处理明确的界面别名(none → off、extra → xhigh),右侧原值保留大小写。不会按数组位置映射,也不猜测 ultra、supra 等未知值的强弱;遇到未知值或冲突时显示提示,思考设置保持原状,允许手动修正。

OpenRouter 匹配与默认值

数据源:https://openrouter.ai/api/v1/models。

  • context_length → 上下文窗口。
  • top_provider.max_completion_tokens → 最大输出 token(按 128k 封顶后预填;原始标称值在详情页「标称最大输出」灰框中只读展示,供对照)。
  • architecture.input_modalities → 图像/文本能力。
  • reasoning.supported_efforts → 思考真实值。
  • reasoning.default_effort 仅展示参考,不写入宿主未声明的字段。

名称搜索采用 token 边界与稀有词加权的匹配方式。不存在于目录中的自拟前缀可以忽略;只有版本与有效名称完整吻合,或 ID/slug 精确吻合且没有歧义时才自动补齐。模糊结果仍能手动选取,但不会自动认领成某个模型。置信标签表示名称匹配质量,不是官方正确率。

OpenRouter 是聚合目录,不保证其发送值等同于每条接入线路的原生 API。 保存前应核对线路实际接受的值;插件不会因为模型叫 Claude 就把所有 xhigh 擅自改成 extra。目录没有思考枚举时,也不会补一套猜测的 low / medium / high。

不覆盖已有修正

  • 自动填只在「这个模型还没有任何已保存能力字段」时触发一次,填在内存草稿里,绝不静默写盘;保存动作由用户发起。
  • 已保存的上下文、最大输出、输入类型、思考映射任何一项存在,该模型就被视为「老模型」,进入详情页不再重新自动填。
  • 快速预设 采纳是全量套用:会覆盖当前草稿里的上下文 / 最大输出 / 输入类型,但思考映射保持原状——目录里那些 supra / ultra 等未映射值仍由用户手动核对。
  • 输入类型只切换「文本」「图片」两个明确开关;host 原本的 audio、video 等陌生模态原样保留,不会被静默清空。
  • 浏览器记忆已经处理过的模型,避免放弃草稿后刷新又自动塞回。浏览器存储禁用时只在当前页面内记忆。
  • 未保存的修改保留在当前页面内,离开或刷新时浏览器会提示;草稿不是持久化设置。

目录在浏览器缓存 6 小时,共享一次请求。联网失败时可以保留旧缓存并标记;没有缓存时仍可完整使用手动配置。公开目录请求不携带线路密钥、Cookie,也不会把本地模型名称发送到 OpenRouter;搜索在本地完成。

保留原有保存模式

  • 手写模型路由编辑自己的 models 数组;同一路由的多模型修改合并为一次数组写入,不丢失邻居条目。
  • Catalog 路由只写 modelOverrides.<modelId>.<field>,不把整个官方目录替换成手写列表。
  • 修改其他字段时,原有 compat、audio/video 等输入模态、扩展思考值都保持不变。
  • 保存使用草稿建立时的 revision。其他窗口更新后不会默默换用新 revision 强行覆盖;草稿保留,显式加载最新设置并按字段重新核对。

只对 llm-pi-ai 的配置路由生效。实际能力写入 DSH 自己的设置,卸载插件后已保存配置仍在;插件不使用 CPA,也不读写 CPA 配置。

开发与验证

pnpm install
pnpm run check

check 包含类型检查、发布 bundle 构建、原有宿主兼容性冒烟和新增能力检查。新增检查覆盖真实 wire 值、保守匹配、四项元数据、继承、双保存路径、revision 冲突和目录缓存。

可选的真实浏览器验证(不增加插件运行时依赖):

npm install --prefix .client-build/browser-tools --ignore-scripts --no-audit --no-fund react@18.3.1 react-dom@18.3.1 playwright@1.58.2
$env:DSH_TEST_CHROME = 'C:\path\to\chrome.exe'
node scripts/browser-smoke.mjs

浏览器验证运行实际 lib/client/index.js、React 与 Chromium,宿主 RPC 使用隔离 fixture,不修改正在使用的 DSH 配置。涵盖自动回填、手动修正、两种保存路径、新模型推送、冲突重试、继承、只读、离线、移动端与深色模式。截图保存在 .client-build/artifacts/。

源码按宿主类型、设置存储、模型草稿、OpenRouter、推荐转换、页面工作区和编辑组件拆分,发布入口仍为 lib/client/index.js。

MIT

Похожие плагины