deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
GitHub: https://github.com/Kazusa1085/dsh-awesome-model-setting
A DeepSeek Harness web plugin that adds a Model Capabilities page to the settings panel, so model capabilities can be edited graphically instead of hand-writing settings.yaml.
一个用于 DeepSeek Harness 的网页插件:在设置面板里增加一页 模型能力,用图形界面编辑模型能力,不用再手写 settings.yaml。
It lists every model of every registered provider route and edits the four things that decide whether a model is usable as declared:
它列出每条已注册路由下的全部模型,并可编辑决定「这个模型能不能按你想要的方式用」的四类设置:
From GitHub / 从 GitHub 安装:
dsh plugin --profile web add github:Kazusa1085/dsh-awesome-model-setting
Or from a local checkout / 或从本地目录安装:
dsh plugin --profile web add ./dsh-awesome-model-setting
Then restart dsh web and open Settings → 模型能力 / Model Capabilities.
然后重启 dsh web,打开 设置 → 模型能力。
The page shows what a model actually accepts right now: your settings document merged with the adapter's own model catalog.
页面显示模型当前实际生效的能力:你的设置文档与适配器自带模型目录合并后的结果。
This distinction matters. llm-pi-ai routes ship a built-in catalog, so a catalog route can already be multimodal with nothing in settings.yaml. The native llm-deepseek adapter ships no catalog of its own, so there you must declare everything yourself. The row's expanded view says which one applies:
这个区别很重要。llm-pi-ai 的路由自带内置目录,所以目录路由即使 settings.yaml 里什么都没写,也可能已经是多模态;而 llm-deepseek 原生适配器没有目录,必须自己声明。展开一行可以看到值来自哪里:
| Hint / 提示 | Meaning / 含义 |
|---|---|
| 配置文件声明 | Written in your settings.yaml / 你写在配置文件里 |
| 供应商目录声明 | Inherited from the provider catalog / 来自 pi-ai 内置目录 |
| 路由默认值 | No catalog entry either; the route's defaultInput applies / 目录也不认识这条路由,退回路由默认值 |
A 「路由声明」 tag next to a model's icon means its multimodal capability comes from the provider catalog rather than from you. It disappears once you declare the modality yourself.
模型图标后面的 「路由声明」 标签表示该模型的多模态能力来自供应商目录,而不是你声明的。你一旦显式声明并保存,标签就消失。
Numeric inputs (context window, output cap, image pixel budget, image byte cap):
数字输入框(上下文窗口、最大输出 token、图像像素预算、单图字节上限):
继承 <value> and the collapsed row shows it in its summary.
— 生效值仍然可见:字段标签显示 继承 <value>,收起状态的行摘要也会显示它。This button clears the capability fields this page manages (input / inputModalities, context window, output cap, image budgets) from the model's entry, so the model falls back to its default declaration.
该按钮会清掉此模型条目上本页管理的能力字段(input / inputModalities、上下文窗口、最大输出、图像预算),让它回到默认声明。
name — a name is a label (often the provider's own, e.g. a usage multiplier), not a capability.
— 它不会清掉显示名称——名称是标签(常常是供应商自己的,例如计费倍率),不是能力。deepseek-v4-pro and deepseek-v4-flash-vision-exp declare fields identical to the adapter defaults, so the button stays hidden for them.
— 它只在你声明的输入模态确实不同于适配器自带默认时出现。「写了字段」不等于「改了字段」:deepseek-v4-pro 与 deepseek-v4-flash-vision-exp 写的值和默认完全一样,所以不会出现这个按钮。llm-pi-ai catalog routes the button appears when you declared input explicitly (the catalog's own values are not readable from the browser, so an exact comparison is not possible there).
— 对 llm-pi-ai 目录路由,只要显式写了 input 就会出现该按钮(浏览器读不到目录本身的值,因此无法做精确比较)。Toggling a modality on a model whose capability comes from the provider catalog shows a confirmation: “供应商声明此模型支持 X,您正在试图改为 Y,确定吗?”
对能力来自供应商目录的模型切换模态时,会先弹出确认:「供应商声明此模型支持 X,您正在试图改为 Y,确定吗?」
Every llm-pi-ai route has a 从供应商加载 button. It asks the adapter which models that route can serve and lists them under the group, marking each one 已声明 (already in your document), 加入 (available to add), or 目录提供 (already served because the route lists no models of its own).
每条 llm-pi-ai 路由都有一个 从供应商加载 按钮:向适配器询问该路由能提供哪些模型,列在分组下方,并标记 已声明(你文档里已有)、加入(可加入)、目录提供(该路由没有自己的列表,已由目录全部提供)。
/models to that route's baseURL and interrogates the endpoint, using the credential its apiKeyEnv names. The wait is bounded to 15 seconds and every failure is reported in the panel (unreachable, 401/403, non-JSON, no data array).
— 手工声明的路由(你自己的网关,或 LM Studio 这类本地服务),适配器会在该路由的 baseURL 后拼 /models 去问那个端点,用 apiKeyEnv 指名的凭据;等待上限 15 秒,任何失败都在面板里说明(连不上、401/403、非 JSON、没有 data 数组)。{ id } entry, so the model keeps following the catalog instead of freezing its current values.
— 加入写入的是最小条目 { id },因此该模型继续跟随目录,而不是把当前值固化下来。重置为默认参数 appears on every route the adapter itself ships (DeepSeek 官方适配器, Opencode-Go, …) and resets every model in that group back to its default input modalities, context window, output cap and image budgets.
重置为默认参数 出现在适配器自带的每条路由上(DeepSeek 官方适配器、Opencode-Go……),把该分组下每个模型的输入模态、上下文窗口、最大输出与图像预算恢复为默认值。
What counts as "hand-declared" is not "is it a relay". The only question is whether pi-ai ships a catalog entry for that route.
opencode-gois a relay too, but pi-ai knows it, so it has defaults. A relay, gateway or local server you wrote intosettings.yamlyourself — itsbaseURL,apiand model list typed by hand — is one pi-ai has never heard of, so it has none, and this page will not offer to reset it.判断「手工声明」的标准不是「它是不是中转站」,而是 pi-ai 内置目录里有没有它。
opencode-go本身也是中转站,但 pi-ai 认识它,所以有默认值;而你自己手写baseURL、api和模型清单加进settings.yaml的中转站、网关或本地服务,pi-ai 从没听说过它,就没有默认值,这一页也不会提供重置。
settings.mutate) with the namespace revision, so a concurrent edit from another tab or an external settings.yaml edit is refused as a conflict instead of being overwritten.
— 写入走官方设置通道(settings.mutate)并携带命名空间 revision;来自另一个标签页或外部编辑 settings.yaml 的并发写入会以冲突被拒绝,而不是被覆盖。Search by model id, display name or route name; filter by 全部 / 仅多模态 / 仅未保存; collapse whole groups; and toggle all rows with one button. Long ids are ellipsized — hover to see the full text.
可按模型 id、显示名或路由名搜索;按 全部 / 仅多模态 / 仅未保存 筛选;整组折叠;一个按钮展开或收起全部。过长的 id 会省略号截断,悬停可见完整文本。
/plugins/dsh-awesome-model-setting/effective-models) that reports effective model capabilities. It returns detached leaf data (ids, names, modality strings, numbers) and performs no writes and no network requests.
— Host 侧只注册一个只读 JSON 路由(/plugins/dsh-awesome-model-setting/effective-models),返回生效的模型能力。它只返回分离出的叶子数据(id、名称、模态字符串、数字),不写任何东西,也不发起任何网络请求。text and image as input modalities. The harness content model, both LLM adapters, the underlying @earendil-works/pi-ai library and the attachment pipeline all agree on this. Audio, video and PDF input do not exist yet. The checkboxes are read from the live settings schema, so a future modality would appear automatically without a plugin update.
— DSH 目前的输入模态只有 text 和 image:harness 内容模型、两个 LLM 适配器、底层 @earendil-works/pi-ai 库与附件管线一致如此。音频、视频、PDF 输入目前并不存在。勾选框的值域是从实时设置 schema 读取的,所以将来新增模态会自动出现,无需更新插件。models list you have narrowed only serves the models you listed; catalog models outside that list are not reachable and are therefore not shown.
— 一旦你收窄了某条路由的 models 列表,适配器只服务你列出的模型;列表之外的目录模型无法访问,因此也不会显示。This plugin was developed and checked against a local DSH install using the web profile. Verified end-to-end:
本插件在本地 DSH 安装的 web profile 上开发并检查。已验证跑通的路径:
llm-deepseek, llm-pi-ai) render with their effective capabilities.
— 插件加载、设置页出现在 模型 与 插件 之间,两个 namespace(llm-deepseek、llm-pi-ai)都能渲染出生效能力。opencode-go): answers locally with the whole catalog.
— 目录路由(opencode-go)的供应商发现:本地返回完整目录。{ id } entry, and the model immediately reports the catalog's modalities.
— 加入发现到的模型只写入 { id },该模型随即报出目录声明的模态。opencode-go (16 models).
— 整组「重置为默认参数」:只清除该分组条目上本页管理的字段,保留名称,且不触碰任何其它分节。若条目里声明的值与目录本来就一致,重置后生效值不变——已在 opencode-go(16 个模型)上实测。Not verified yet — these code paths exist and are guarded, but have not been exercised against a live target. They may not work:
尚未验证 —— 以下路径代码存在、也有防护,但没有对着真实目标跑过,有可能不工作:
/models to that route's baseURL, sends the credential named by apiKeyEnv, bounds the wait to 15 s and reports every failure — but it has never been run against a live endpoint. An endpoint that does not speak an OpenAI-compatible /models listing will not work.
— 手工声明路由的端点发现(本地 LM Studio、私有中转站)。代码会在该路由的 baseURL 后拼 /models、带上 apiKeyEnv 指名的凭据、等待上限 15 秒并报告每种失败——但从未对着活的端点跑过。不支持 OpenAI 兼容 /models 的端点无法工作。llm-deepseek and llm-pi-ai. The page understands only those two families.
— 除 llm-deepseek 和 llm-pi-ai 之外的适配器。本页只认识这两个家族。If something does not work, please open an issue with the message the page shows (or the browser console error), the DSH version, and the structure of the relevant settings.yaml section — with keys redacted.
如果有东西不工作,请开 issue 并附上页面显示的提示(或浏览器控制台报错)、DSH 版本,以及相关 settings.yaml 分节的结构(密钥请打码)。
image icon, inlined as SVG because the DSH frontend ships no icon font.
— 图像图标取自 Font Awesome Free v7.3.1 的 image 图标,以内联 SVG 形式内嵌,因为 DSH 前端没有打包图标字体。@deepseek-ai/dsh-client-ui-settings-models plugin and of dsh-deepseek-status.
— 页面结构参考了官方 @deepseek-ai/dsh-client-ui-settings-models 插件与 dsh-deepseek-status 的做法。MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。