dsh-model-catalog-sync
v0.3.9-beta.0
Published
Synchronize provider model metadata into the native DSH llm-pi-ai catalog
Maintainers
Readme
dsh-model-catalog-sync
English | 中文
dsh-model-catalog-sync 是独立的 DeepSeek Harness Web 插件。它把打包的单密钥提供方目录安装到 DSH 原生提供方所有权下,也可以把提供方模型列表同步到原生 llm-pi-ai 目录;原生“模型”页面、模型选择器和后续会话请求直接使用安装/同步结果,不需要修改 DSH 源码或重启。
功能
- 浏览、搜索、筛选、预览并安装打包的 Models.dev/OpenCode 派生目录中只需一个 API 密钥即可使用的提供方。
- 对已有
openrouter等提供方在其原生 settings 路径原位替换,绝不创建重复路由或插件私有可运行提供方。 - 只通过 DSH Credentials 保存 typed key;密钥不会进入设置、状态、快照、RPC 响应、日志或 Client store。
- 同时管理多个明确配置的
llm-pi-aiprovider route。 - 在替换预览弹窗中点击“刷新”按需获取提供方实时模型列表;不会自动获取任何模型。
- 有密钥或无密钥都能刷新:弹窗里输入的密钥只用于这一次获取;继承的凭据没有值时请求直接不带 Authorization 头发出,公开列表仍然可以加载。
- 默认解析 OpenAI-compatible
GET /models,也能用 RFC 6901 JSON Pointer 适配其他 JSON 返回。 - 接口缺失的元数据由 provider 默认值、带条件的模型 Glob 规则和精确模型映射补齐。
- 向原生模型写入
contextWindow、maxTokens、input、reasoningEfforts、compat.thinkingFormat和compat.supportsReasoningEffort。 - 提供方不声明图片或推理能力时,可在“模型同步”页面强制开启。
- 按模型、按字段记录所有权,保护原生页面中的人工修改和人工删除标记。
- 每次写入前保存快照,提供有界历史、进程中断恢复、版本预览和无需重启的回退。
- 每次操作通过 DSH 凭据引用解析密钥;真实密钥不会进入设置、浏览器 RPC、日志或快照。
要求与安装
需要带 Settings、Storage Domain、Connection 和原生 Models 页面的 DSH Web profile,以及 Node.js ^22.19.0 或 >=24.0.0。
在插件目录构建并打包:
pnpm install --ignore-workspace
pnpm run build
pnpm pack --pack-destination dist把 tarball 安装到 Web profile:
dsh plugin --profile web add ./dist/dsh-model-catalog-sync-0.3.9.tgz
dsh --profile web --dump-config打开 DSH 设置中的“模型同步”。原生“模型”页面继续保留,并展示本插件写入的模型目录。
打包的单密钥提供方目录
插件附带一份由公开 Models.dev/OpenCode 元数据生成的静态提供方/模型目录。“模型同步”页面提供可搜索的目录,只列出可用一个 API 密钥使用的提供方。每一行都有安全的原生替换预览、只写 API 密钥输入框,以及对已配置提供方的显式覆盖确认。预览弹窗预填一个可编辑的模型列表 URL(实际生效的 /models 地址),"全选/清空"旁的"刷新"按钮用它抓取提供方自己的列表——输入了密钥就用刚输入的密钥,否则用已存凭据或不带凭据——刷新后的模型列表会取代打包快照用于安装,自定义 URL 会写入该提供方的同步配置。安装提供方会在其现有 settings 路径写入完整 DSH 原生 profile,并替换插件同步配置、所有权、tombstone 和人工覆盖。之后的普通同步仍通过字段级所有权保护人工模型编辑。
只使用 DSH 原生所有者:广泛的 OpenAI 兼容目录使用 llm-pi-ai,官方 deepseek-official 路由使用 llm-deepseek。运行时不会抓取 Models.dev、运行 OpenCode、加载 AI SDK 适配器或创建第二个 provider adapter。
配置与数据优先级
在“模型同步”页面选择需要管理的原生 provider,填写模型列表接口、认证引用、字段指针、规则映射、精确模型映射和快照数量。完整 YAML 示例见 English README。
source.endpoint 默认使用原生 provider 明确配置的 baseURL 加 /models。pi-ai 内置目录隐藏的 endpoint 不属于公开 API,因此原生 profile 没有 baseURL 时必须填写 source.endpoint。
最终字段优先级是:人工覆盖、提供方返回、精确模型映射、按顺序匹配的规则、provider 默认值、原生 llm-pi-ai 继承。插件无法确定的字段会省略,让原生安装目录继续回答。
inherit-provider 使用原生 apiKeyEnv 并以 Bearer 方式发送;引用的凭据没有值时请求不带 Authorization 头继续发出,因此无密钥也能刷新公开列表。credential 使用独立凭据引用、请求头和 scheme;none 不发送凭据。额外请求头中的密钥必须使用凭据引用,不能把 Authorization 或 API key 作为网页可读的 literal。
与原生“模型”页面的关系
“模型同步”负责手动刷新、高级能力、快照和回退。“保存并应用”由 Host 先保存快照,再通过带 revision 的 ctx.settings.mutate() 写入 llm-pi-ai.providers.<provider>.models。原生“模型”页面立即刷新,llm-pi-ai 在下一次请求使用新目录。
原生字段与插件最后写入值不同时,该字段自动转为人工所有,后续同步不覆盖。人工删除的插件模型会形成 tombstone,只有点击“恢复插件管理”才重新加入。提供方不再返回的纯自动模型按成功缺失次数删除;存在人工字段的模型保留并标记为 not-returned,由用户明确删除或保留。
快照、回退与安全
完整安装会同时捕获安装前的原生 profile 和插件同步 profile;普通同步快照只包含当前 provider 的原生用户层 models 路径和插件所有权状态,不包含凭据或其他 provider 字段。Storage Domain 先持久化快照和 pending checksum,Settings 再提交原生配置。启动恢复只接受“提交前”或“提交后”两个已知 checksum;第三种值会阻止自动写入并要求人工检查。
提供方请求拒绝重定向,并限制超时、响应字节、模型数量、JSON 深度、节点数、字符串和数字。网络错误、非法 JSON、重复模型、配置校验失败、revision 冲突、原生 schema 拒绝、Storage Domain 错误和恢复冲突都不会改变最后一次成功的原生目录。
插件不会直接写 settings.yaml 或快照文件。普通同步只管理自身配置中列出的 provider,并且只修改这些 provider 的原生 models 路径;显式目录安装会替换完整原生 profile 路径和插件同步 profile。配置 RPC 仅允许 loopback 页面调用。
Model Experience
同步后的模型能力
模型看到的内容
插件不增加任何提示词。模型能否接收图片、提供哪些推理等级以及发送何种兼容参数,由同步后的原生元数据决定。
Token 影响
contextWindow 影响请求准入限制;明确配置的 maxTokens 会成为原生适配器的输出默认值。插件本身不增加 Token。
KV Cache 影响
目录同步不改变请求前缀。切换模型、推理等级、图片附件或 provider 序列化方式可能通过原生适配器影响缓存复用。
已知限制
- 提供方发现是一次 JSON HTTP GET;OAuth 登录和刷新仍由提供方负责,但可以引用已有 token。
- 插件不会通过真实模型请求验证能力。强制声明的图片或推理能力仍可能被提供方拒绝。
- 原生 Models 页面没有子 slot,因此同步控件位于独立“模型同步”页面;两页共享同一原生目录。
