dsh-model-think-level

modeltested: passnpmMIT

Thinking levels, image input and image generation for third-party models in the official Models page; multiple keys per provider routed by model, automatic failover between keys on failure, per-route custom request headers, and balance display.

下载量 / Downloads
5,720
依赖体积 / node_modules
27.11 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-model-think-level

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

DSH Model Think Level

![npm](https://www.npmjs.com/package/dsh-model-think-level)

![license](./LICENSE)

![node](package.json)

给 DSH 里的每一个第三方模型补齐思考等级、图片输入与生图能力。

DSH 自带的 Models 页只认得它自己目录里的模型。中转站、自建网关、聚合 API 上的模型往往没有推理档位、不能声明图片输入、更不能生图;一个供应商只能填一把密钥,配好的请求头还会被适配层自己的归属头盖掉。这个插件把这四件事一次补齐,而且全部长在官方页面上——官方的模型页、官方的供应商编辑卡、官方的输入框菜单,只是多出了本来该有的控件,没有第二套设置界面。

功能一览

  • 思考等级 — 每个模型行一个开关和一份档位表(off / minimal / low / medium / high / xhigh / max),每一档都能改真正发出去的取值。输入框菜单里一条滑杆随时切档,也能给新会话定默认档位,不设则跟随记忆。
  • 自动识别 — 内置 87 条模型知识库,叠加端点输出模态和模型名启发式,自动补上思考档位、图片输入、上下文容量;容量在模型行右侧显示为 128K / 1M。
  • 模型选择器 — 供应商 → 模型两栏、搜索、图片输入徽章、拖拽排序、按供应商启停。只列对话模型,生图模型不进切换器,也不计入模型数。
  • 多密钥 — 一个供应商放 N 把密钥,按把启停、按把圈定模型范围、按把指定协议;保存后自动探测每把密钥能服务哪些模型。
  • 自动重试 — 401/403/408/429/5xx 和「分组里没有这个模型」自动换下一把密钥,配冷却排序,把还在冷却里的密钥排到最后;请求一旦开始输出内容就不再重放。
  • 自定义请求头 — 每个路由可配任意请求头(含 user-agent),在 fetch 层按请求重新盖回去;同源冲突、与官方适配器或同类插件的争抢都会被检出。
  • 请求伪装 — 每个路由可选 Codex / Claude 两种官方 CLI 身份:客户端请求头,以及 Claude 的 Messages 请求体身份段一并补齐;默认关闭,与自定义请求头同一区块。
  • 生图 — 勾一下「生图」就能把任意模型变成生图模型,对话模型调用原生工具 generate_image 出图,支持参考图改图、多图并出、默认参数与超时。
  • 自动继续 — 会话因为断线、超时、撞上输出上限停住时,替你补一条「继续」,可展开配置等待秒数和最多重试次数。
  • 余额 — 每个供应商可选配一个只读余额接口,模型页直接显示余额,支持手动刷新。

选择模型与思考等级

输入框的模型切换器只列对话模型:被标记为「生图」的模型不出现在这里,供应商计数也不含它们。同一个菜单里,模型行下面是思考等级:

  • 每个模型行右侧显示已声明的上下文窗口(128K、1M;K/M/B/T 都是简写,也接受纯数字和千分位),留空则不显示。
  • 插件编辑器所在的行会隐藏官方自带的「推理等级」编辑区——同一个字段只留一份控件。
  • 支持图片输入的模型带视觉徽章;档位表来自模型行配置,也可以点模型页的「自动获取思考等级」让插件补齐。

安装

在插件市场里填包名 dsh-model-think-level 安装,或者用命令行:

dsh plugin add dsh-model-think-level

从源码安装:

git clone <repo> && cd dsh-model-think-level
npm ci && npm run build
dsh plugin add .

装完重启 DSH。运行环境需要 Node.js ^22.19.0 || >=24。

配置页面

官方供应商编辑卡原本是一根长列表,插件把它改成四个页签:供应商配置、模型配置、高级配置、指纹检测。生图的默认参数和自动继续不在卡片里,而在模型页标题行的「高级设置」浮层里。

供应商配置:多密钥、地址与余额

密钥列表。 官方那把「API 密钥」输入框被换成卡片式列表,每行一把密钥:

  • 行首圆点是对勾开关,亮起表示参与路由,灰色表示暂停;停用只把密钥移出分流池,别名、模型范围、协议指定全部保留。行尾是「启用」。
  • 「+ 添加另一个密钥」继续加。最后一把启用中的密钥不允许停用——否则请求会回落到适配器自己的单密钥路径,仍然用刚被停用的那把签名。
  • 悬停某一行可展开该密钥的模型范围:该供应商已添加模型的多选胶囊,留空(「全部模型」)表示不做限制。
  • 同一行还能指定这把密钥的协议,见下文「按密钥切换协议与多地址」。
  • 新建供应商时也可以先攒草稿密钥:点「创建」落库后才真正写入,第一把自动启用;刷新页面丢弃草稿。挂载前已经敲进官方输入框的值留在原处。供应商 id 撞上已存在的供应商时,草稿不会写进对方。

端点。 「API 地址」是主地址;「更多端点」里可以按地址家族各配一条:一个 OpenAI 系(Chat Completions / Responses 共用)、一个 Anthropic 系。

余额。 「API 地址」下方、「更多端点」展开区里多一行余额:填一个只读的余额接口地址(http(s)://…),该供应商在模型页列表的启用开关前会显示「余额 12.34」。没填不显示、也不占位;清空地址即撤下。

  • 请求由宿主发起(浏览器直连会撞 CORS),带该路由密钥列表里的第一把密钥:OpenAI 系协议用 Authorization: Bearer,Anthropic 系用 x-api-key。多把密钥只查第一把。超时 30 秒,不跟随重定向,密钥只发往填写的地址本身。
  • 地址保存在 key-index.json 的 balances 字段,与协议地址互不覆盖;改完立即生效,不用重启。
  • 响应支持 JSON 或纯数字,按键名认余额:balance、total_balance、available_balance、remaining、total_available、credit / credits、amount、left、remain、*_quota(大小写、下划线、连字符不敏感),同层的 currency / unit 决定 $ / ¥;OpenRouter 风格的 total_credits / total_usage 按两者之差算。认不出余额按读取失败处理,不显示金额。
  • 只在打开模型页时读一次,不轮询:每次打开、每家读一次;留在页面上不会反复请求;在配置卡里改完地址会立即重读。
  • 读取失败(超时、接口报错、认不出余额)时继续显示上一次成功的金额;从未成功过才显示「余额 —」,悬停可看宿主返回的原因。行尾刷新图标可以随时手动重取,刷新期间保留当前金额,失败仍沿用旧值。

模型配置

  • 页签顶部是「模型目录」「恢复默认模型」「获取可用模型」「自动获取思考等级」。
  • 每个模型行从左到右:模型名、上下文容量、思考档位编辑入口、输入模态(文本 / 图片 / 生图)。
  • 输入模态三档互斥。 勾「生图」即把模型标记为图像生成模型(写入该行的 inputImageGen 标记,同时清掉文本/图片声明),并把它从输入框切换器里隐藏;勾文本或图片则回到普通对话模型。「自动获取思考等级」与后台自动补全同样会识别生图模型:端点的输出模态(如 output_modalities: ["image"])、知识库与模型命名(gpt-image、dall-e、flux、seedream 等)都会被打上标记。
  • 「获取可用模型」是宿主的一次普通目录读取,插件不替你探测、也不会自动把模型写进供应商:读到的模型进官方勾选列表,你勾选后才写入。插件只是顺带观察每把密钥各自返回了什么,并在多把密钥合并时做一次保守过滤——只有每一把启用中的密钥都成功给出了目录、且没有任何一把列出某模型时,该模型不出现在合并结果里(有密钥没读到=情况未知,不过滤)。

高级配置:自定义请求头

一张「名称 / 值」表,加一行就是加一个请求头,user-agent 也在这里改。

  • 请求头存在官方供应商档案的 headers 字典里,换机器、换配置都跟着走。
  • 真正生效点在全局 fetch 接缝:每个请求都会重新盖一遍,包括列模型、探测这类请求,不只是对话请求。
  • user-agent 最长 512 字符。
  • 冲突会被检出并提示:同源上别的路由已占用同名请求头、官方 dsh-llm-pi-ai 的 transformHeaders 已经在处理这组头、或者别的同类插件也在写同一个头。

高级配置:请求伪装

「请求头」下面是同一个表单里的第二个区块:请求伪装。默认关闭,按路由保存,可选 Codex 或 Claude——让该路由的请求以对应厂商官方 CLI 的身份发出,而不是以 SDK 的默认身份。

  • 两个区块之间有一条分割线,取消 / 保存只有一组,放在最下面:它提交的是整个高级配置(请求头 + 伪装)。伪装是草稿——点选项只是改了表单,按保存才写入;按取消回到已保存的值。
  • 存的是插件自己的文件 <DSH_HOME>/dsh-model-think-level/camouflage.json,不写进官方供应商档案;换了版本、删了文件就回到关闭。
  • Codex:改 user-agent 为 codex_cli_rs/<版本>,补 originator: codex_cli_rs 和一个稳定的 x-codex-session-id;请求体不动。
  • Claude:改 user-agent 为 claude-cli/<版本>,补 x-app: cli、anthropic-version、anthropic-beta,并在 /v1/messages 的请求体里补上校验要看的身份 system 段与 metadata.user_id——tools、图片、签名块一律原样保留。请求体的改动会同步重算 content-length。
  • 与自定义请求头的优先级:伪装先落,请求头表里的同名项最后生效——你在表里显式写了 user-agent,就以你的为准;anthropic-version 只有缺失时才补,已有值保留。
  • 只影响这个路由真实发出的请求。探测密钥、余额、生图这类旁路请求不带伪装。

高级设置:生图默认参数与自动继续

模型页标题行的按钮打开「高级设置」浮层,目前有两张卡。浮层高度固定(折叠、展开都不变,内容超出时才在浮层内部滚动),两张卡都能点卡片名或右侧箭头展开:

生图。 卡片头一行是总开关,默认折叠;展开后:

  • 第一行选默认参数:尺寸 / 质量 / 张数,以及超时——下拉 5 / 10 / 15 / 30 / 60 分钟,默认 5 分钟。一次调用的凭据读取、参考图读取、参数回退、响应体与图片下载和附件保存共享这个总预算,重试不重新计时。
  • 第二行用下拉选默认生图模型,未设时显示「未设置」。没点名的工具调用就用这里的模型。
  • 下面列出所有被标记的模型,每行保留「测试」和「试一张」两个动作;尺寸/质量/张数只在第一行选一处生效。
  • 卡片只负责默认值和默认模型,没有独立的工具状态卡;工具注册失败时卡片顶部直接显示宿主给的那句原因(GET /dsh-model-think-level/image-config 的 tool.error),成功注册不显示任何提示。

自动继续。 默认关闭,细节见下文「自动继续」。

<!-- TODO(截图): 这一屏(高级设置:生图 + 自动继续)和「指纹检测」页签还没有截图,补上后插在上面两个小节里。 -->

指纹检测

每个检测结果卡可以逐行折叠/展开,默认收起:点行头的箭头或模型名展开,徽章、证据行与检测按钮始终在场。行头只留「N / 3 题」的进度,相似度等明细放在展开的结果卡里。

多密钥路由与自动重试

同一个供应商可以登记多把密钥,请求进来时按「模型 → 密钥」自动分流。

什么时候换密钥。 密钥按列表顺序排队,一个模型如果多把密钥都能访问,先走靠前的那把。命中这些情况自动换下一把能服务该模型的密钥:

  • 状态码 401 / 403 / 408 / 429 / 5xx;
  • 响应体说明「这个模型(或这个分组)没有它」——model_not_found、Model "…" is not supported by any configured account in this group、no available channel,以及中

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::31,最后更新 2026-11-06

Links

GitHub · Homepage · npm

Same category