dsh-model-detector
已验证dsh-model-detector · v0.0.12 · MIT · Web 界面
DSH 模型检测:对任意 pi-ai 提供方(含 DeepSeek 官方 API 路由),拉取线上最新模型并用 models.dev 自动富化模态/容量/推理后写入;支持手动编辑现有模型参数(多模态、思考档位等)
安装
dsh plugin add dsh-model-detector 用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。
源码
标签
作者
说明文档
dsh-model-detector
简体中文 · English

中文文档
定位
为任意 pi-ai 提供方(以及 DeepSeek 官方 API 路由 deepseek-official)检测其线上最新模型,用 models.dev 自动富化正确元数据(模态 text/image、上下文容量、输出上限、推理能力)后写回,并提供手动编辑现有模型参数的能力。入口:设置 → 模型检测。
特性
- 实时拉取:直接打提供方
/models,拿到线上最新模型 id,无视模板目录的滞后。 - 能力自动富化:以 models.dev 为唯一权威能力源(上下文 / 输出 / 模态 / 推理),跨提供方回退,聚合网关亦可命中。
- 双命名空间写入:自动识别提供方属于
llm-pi-ai(pi-ai 适配器)还是llm-deepseek(DeepSeek 官方 API 内置适配器),按各自 schema 写入正确字段(inputvsinputModalities)。 - 手动编辑现有模型:逐条改参数——是否支持多模态、上下文、输出上限、思考档位、
compat;也可手填模型号新增。手填的模型号默认没有模态声明,在这里勾上「图像」即可让适配器接受图片。 - 思考档位按模型富化:从 models.dev
reasoning_options读取每个模型自己的推理等级(如 Muse Spark → Minimal/Low/Medium/High/Xhigh、Qwen3.8 Flash → Low/Medium/Xhigh、Kimi K3 → Max),翻译成 DSH 的reasoningEfforts写回,让第三方模型在 DSH 中可设置思考强度。绝不套用统一档位;纯开关/无档位模型不写,交给 pi-ai 目录兜底。DeepSeek 官方适配器的档位是路由级(off/low/high/max),插件在编辑页提供统一开关。 - 四级优先级:当前提供方 models.dev → 全局 models.dev → 内置 manifest(薄覆盖)→ 保守默认。
- 卡片式交互:分页 + 搜索防抖 + 勾选应用,海量模型不卡顿;每张卡清晰标注数据来源与推理档位。
- 来源透明:区分「查得到」与「默认兜底」,models.dev 未收录时给出提示,不把默认当查得。
- 同名变体可分辨:网关常把同一模型按区域挂成多条 id(
cn:deepseek-v4.1-flash、global:deepseek-v4.1-flash),富化后收录名完全一样,选择器里两条一模一样。插件在「仅前缀不同且同时出现」时把前缀补进展示名(cn:DeepSeek V4.1 Flash/global:DeepSeek V4.1 Flash);前缀也分不开时(同前缀、仅区域后缀不同)退回原始 id,保证展示名唯一。模型id一字不动,路由不受影响。
为什么做这个
DSH 原生对 pi-ai「模板(目录)提供方」的发现只回答内置目录(滞后,且可能缺失新模型);对「自定义提供方」只走线上 /models,拿不到模态(线上端点不声明模态)。两者都无法同时给出「最新模型 + 正确模态」。
本插件把这两件事拼起来:
线上 GET /models(最新 id)
↓ 合并
models.dev(自动、社区维护的模态/容量/推理/思考档位)—— 主源
↓ 覆盖
内置 manifest(薄覆盖,仅兜底 models.dev 缺/错的个别模型;thinkingLevelMap 人工档位优先)
↓ 兜底
保守默认(text + 262144 / 32768)
模态归一化:models.dev 可能标注 video/pdf/audio,而 DSH 只支持 text/image,插件归一为——含 image → [text, image],否则 [text]。
名字级匹配(关键修复):同一系列常有纯文本与多模态两条线(deepseek-v4-flash vs deepseek-v4-flash-vision-exp)。归一化会剥掉尾部版本/日期/-expires-on-0910 之类的噪声段,因此手填的内测模型号 deepseek-v4.1-flash-expires-on-0910 与两者都「版本级等效」——取第一个命中会落到纯文本条目。插件改为在等效候选里优先能力更丰富者(含 image),精确同名命中仍永远优先。另有家族级兜底:清单里完全没有该模型号时,若同族条目声明了 image 则继承模态。
思考档位 → DSH reasoningEfforts:DSH 对模型的思考强度由 profile 层的 reasoningEfforts(档位 → wire 值)驱动,菜单只显示适配器公布的档位。插件从 models.dev reasoning_options 读取每个模型声明的档位(wire 值 = 档位名,none → off),manifest 的人工 thinkingLevelMap 优先(如 deepseek 的 {high, max} + compat.thinkingFormat: deepseek)。只有档位声明(非纯开关)才写,且只保留 pi-ai 词汇表(off/minimal/low/medium/high/xhigh/max)内的档位,避免 DSH 校验拒绝整个提供方。
同名变体的展示名消歧:归一化匹配必须剥掉区域前缀(cn: / global:),否则富化率 0%;但展示名不能跟着剥——cn:deepseek-v4.1-flash 与 global:deepseek-v4.1-flash 富化后都会得到同一个收录名,写进 DSH 后模型选择器里两条一模一样,用户无法判断该选哪个区域。插件因此在「仅前缀不同 + 同时出现」时把前缀补进展示名;若前缀仍不足以区分(同前缀、差别只在被归一掉的区域后缀如 -sg),则退回原始 id——展示名唯一是硬保证,id 始终一字不动。
来源判定:每个模型合并后标 source:
| source | 含义 |
|---|---|
models-dev |
命中 models.dev(权威社区数据,含跨厂商回退) |
manifest |
命中内置薄覆盖清单(dsh 专属字段 + 缺口) |
default |
未收录,保守默认 |
安装
推荐:从 npm registry 安装(npm:dsh-model-detector)
dsh plugin --profile web add npm:dsh-model-detector
安装后重启 dsh web 并刷新页面,设置页左侧出现「模型检测」。
其它来源:GitHub 源
dsh plugin --profile web add github:1204244136/dsh-model-detector,或本地联调dsh plugin --profile web add link:C:\path\to\dsh-model-detector。
使用
模式一:发现新模型
- 打开 设置 → 模型检测。
- 选择提供方(下拉列出你已配置的所有提供方,含
deepseek-official(官方 API)与各 pi-ai 路由如opencode-go、volcengine)。 - 点「获取最新模型」——插件拉取该提供方
/models,用 models.dev 富化模态 / 容量 / 推理。 - 在分页列表里搜索或勾选想要保留的模型(
vision、kimi、image等关键词可快速定位)。 - 点「应用所选」——把富化后的模型写进该提供方(pi-ai 写
llm-pi-ai.providers.<route>.models;DeepSeek 官方写llm-deepseek.models)。
说明:插件会解析提供方的
apiKeyEnv凭据去请求/models(DeepSeek 官方路由默认DEEPSEEK_API_KEY;线上拉取失败时只回退 models.dev / 内置清单,绝不用该提供方的旧配置兜底(本插件的目的是拿"线上"信息)。
模式二:编辑现有模型参数(多模态 / 思考档位)
切到「编辑现有模型」→ 点「读取现有模型」,列出该提供方现有模型(profile 已配置的 + 适配器默认目录的),每条可改:
| 字段 | 说明 |
|---|---|
| 展示名 / 上下文 / 输出上限 | 直接填数字 |
| 输入模态(文本 / 图像) | 手填的模型号默认纯文本——勾上「图像」适配器才接受图片 |
| 思考档位(pi-ai) | 逐档开关 + wire 值(off 表示不传参数) |
compat(pi-ai,高级) |
JSON 编辑,如 {"thinkingFormat":"deepseek"} |
| 推理档位 / thinking(DeepSeek 官方) | 路由级设置,所有模型共用 |
- 「采纳建议」按钮用 models.dev / 清单的建议值回填。
- 顶部输入框可手填任意模型号新增(例如内测模型
deepseek-v4.1-flash-expires-on-0910)。 - 保存只改这一条:pi-ai 目录路由在无
models列表时写modelOverrides(只覆盖该模型,目录其余照常服务);否则就地更新models条目。其余字段与其它提供方配置原样保留。
典型场景:
deepseek-v4.1-flash-expires-on-0910是内测模型,官方GET /models与 models.dev 都未收录,只能在界面手填模型号——此时适配器看不到inputModalities,图片一律被拒(UNSUPPORTED_CONTENT)。用本插件「编辑现有模型」勾上「图像」保存即可;插件清单也已内置该模型号(模态按同族推断为 text+image),点「获取最新模型」时若线上返回它也会自动带上模态。
性能特性
- 分页渲染:每页 80 行 + 上一页 / 下一页 + 范围显示,DOM 只渲染一页。
- 搜索防抖:已发现列表的搜索 300ms 防抖,不逐键重渲染大数组。
- 不自动全选海量结果:结果 ≤200 才自动全选;更大则提示手动勾选。
Host API
插件注册 webServer 前缀路由 /dsh-model-detector/api:
| 方法 | 路径 | 作用 |
|---|---|---|
GET |
/providers |
列出可检测提供方(route/displayName/api/baseURL/模型数/ns) |
POST |
/discover |
拉取该提供方 /models + models.dev 富化 → 统一形状模型列表 |
POST |
/current |
列出该提供方现有模型(profile + 适配器目录)+ models.dev/清单建议值 |
POST |
/save-model |
写入单条模型参数(保留其它字段;自动选 models / modelOverrides) |
POST |
/remove-model |
删除单条模型(models 条目或 modelOverrides 条目) |
POST |
/route-settings |
写入 DeepSeek 官方路由级设置(reasoningEffort / thinking) |
POST |
/apply |
批量把所选模型写入该提供方 |
/discover 响应还带诊断字段:modelsDevLoaded / modelsDevProviders / modelsDevError / providerInModelsDev / sourceCounts,以及 ns / target(写入目标),便于区分来源,避免把「默认」误当「查得」。
此外提供一个只读 agent 工具 _dsh_model_detector_status(查询各提供方概览)。
两套模型 schema(写入目标)
llm-pi-ai(pi-ai 适配器) |
llm-deepseek(DeepSeek 官方 API) |
|
|---|---|---|
| 路由 | 任意,如 opencode-go、deepseek |
deepseek-official |
| 模型字段 | id/name/contextWindow/maxTokens/input/reasoningEfforts/compat |
id/name/description/contextWindow/maxTokens/inputModalities/imagePixelBudget/imageMaxBytes |
| 模态键 | input: ['text','image'] |
inputModalities: ['text','image'](min(1),空数组非法) |
| 推理档位 | 模型级 reasoningEfforts |
路由级 reasoningEffort(off/low/high/max) |
| 目录覆盖 | modelOverrides[id](无 models 列表时) |
无(只能写 models 列表) |
DeepSeek 官方适配器在收到图片时硬判定
models.find(id)?.inputModalities?.includes('image') !== true→ 抛UNSUPPORTED_CONTENT。没写inputModalities就等于纯文本——这是"手填模型号不支持多模态"的根因。
配置
插件 Config 仅一个字段:
# profile cordis.patch.yml 覆盖
- override:
- id: dsh-model-detector
config:
title: 模型检测 # 设置页标题
仓库结构
├── package.json bundle 清单(dsh.bundle.patch / dsh.client / exports)
├── cordis.patch.yml bundle patch:把 host 行 dsh-model-detector 插入组合
├── docs/preview.png 设置页效果图
├── lib/ 构建产物(host lib/index.js + client lib/client.js)
├── src/
│ ├── index.ts host 入口:webServer API(7 个接口)+ 状态工具
│ ├── api.ts host 业务:命名空间解析 / 发现合并 / 双 schema 写入 / 手动编辑
│ ├── manifest.ts 内置薄覆盖清单 + DeepSeek 官方目录(可扩展任意提供方)
│ └── client/ React 设置页(发现 / 编辑两种模式,DSH 设计语言)+ 样式
└── scripts/build.mjs 跨平台构建/类型检查(自动探测 tsc,无需 bash/本地 TypeScript)