dsh-ofm-quota:Our Free Model 的接口配额仪表盘与自动换路

前言

在 DSH(DeepSeek Harness)里配合 dsh-our-free-model(Our Free Model,OFM)使用时,多个免费与协付渠道的积分各自独立,聚合面板上往往看不到「还剩多少」。额度用尽时,一线常见是 HTTP 429 或 QUOTA_EXHAUSTED,对话卡在中间,只能手动去模型选择器里换下一个接口。一天下来各渠道吃了多少 token,也缺少可对账的汇总。

dsh-ofm-quota(维护者 dx906,GitHub 仓库)是架在 OFM 旁边的配额管理插件:旁听每次真实派发、统计 token/积分消耗,额度耗尽时在同名模型族内自动切换备用接口,并在右侧栏用卡片展示各渠道剩余余额。它不是 OFM 的替代品,只读 OFM 与渠道包的落盘文件,不修改 OFM,两者可独立升级。插件为零运行时依赖,仅使用 Node 内置模块。

需要事先说明:DSH 内核自带的 deepseek-account(DeepSeek 官方账号)是按量计费,与 OFM 免费车道是两套体系。默认不会在用户不知情时切到官方;额度用尽且没有可用备用接口时会如实报错。只有显式配置 officialFallback 才会兜底到官方;面板里官方路由单独标为「官方 · 计费」并沉底。

这是什么

  • 名称:dsh-ofm-quota(包名 dsh-ofm-quota,当前版本 0.1.0,MIT)
  • 平台:web 与 desktop(共用同一 profile,一次安装两边生效)
  • 前置:DSH(profile / bundle / cordis 插件机制)、dsh-our-free-model、Node.js ^22.19.0 || >=24.0.0

核心功能

用量检测

插件旁听内核的 llm/stream 水位,记录每次请求实际派发到的 provider/model 与适配器回报的 token 用量(输入、输出、思考、缓存读)。

界面上会交叉展示两类数据:

来源 含义
本进程旁听 llm/stream 实时,仅覆盖安装后本进程内的请求
渠道包台账 token-ledger.json 按 direct\|provider\|accountId\|model 逐日累计,含历史,为权威值

「模型用量明细」里可看到旁听次数与渠道包权威次数的对照;差异通常表示插件安装前已有请求。

额度耗尽自动切换

触发条件覆盖内核码与 OFM 生态码(如 QUOTA_EXHAUSTED、QUOTA、ACCOUNT_QUOTA、RATE_LIMIT 等)。命中后沿同名模型族(归一化时剥掉 -free / -preview 等后缀)寻找仍有额度的备用接口;找到则通过 agent/request-error 与 agent/request 水位重跑本 step,对话不中断。官方路由不作为「同名备用」,只能是显式配置的兜底。

默认行为:找不到备用接口即报错,不自动切到按量计费的官方账号。失败接口进入冷却(默认 15 分钟),每 step 切换次数有上限(默认 3)。换路时会丢弃源路由的 reasoningEffort,避免目标适配器不认该档位。

结合刷新余额后写入的 quotaRemaining,可在触发 429 之前就提前换走仍有余额的接口。

侧边栏「接口额度」卡片

DSH 右侧栏新增卡片,按渠道展示剩余积分(同一渠道下多模型共享一池积分,不为每个模型重复同一数字)。可展开账号;「模型用量明细」默认收起。某渠道未配凭据时显示「余额未知」,不伪造为 0。

安装与启用

本包不打到 npm(private: true)。官方文档建议从源码打 tarball 装进 profile,使安装字节与审过的源码一致。桌面端的 desktop profile 由 Electron 独占,CLI 直接 dsh plugin add 可能报 profile "desktop" is managed exclusively by the Electron application,因此 README 给出的是手工装包步骤。

下面按仓库 README 的安装流程说明(需先取得源码目录,再在 profile 中引用打好的包):

# 在已 clone 的 dsh-ofm-quota 源码目录内执行
mkdir -p "$DSH_HOME/profiles/desktop/vendor"
pnpm pack --pack-destination "$DSH_HOME/profiles/desktop/vendor"

在 $DSH_HOME/profiles/desktop/package.json 中:

  1. dependencies 增加:"dsh-ofm-quota": "file:./vendor/dsh-ofm-quota-0.1.0.tgz"
  2. dsh.profile.bundles 末尾追加:"dsh-ofm-quota"

然后在 profile 目录解析依赖:

cd "$DSH_HOME/profiles/desktop"
pnpm install --frozen-lockfile --offline --ignore-scripts

若更新了 tarball,需同步 pnpm-lock.yaml 里该包的 integrity(sha512-base64),否则 --frozen-lockfile 会失败;同版本号时可能需要先 rm -rf node_modules/dsh-ofm-quota 再 --force。

装完后从托盘退出并重开 DSH。运行中的宿主仍是旧代码;启动日志中应出现 [ofm-quota] loaded build=<hash> 用于确认版本。

典型用法

  1. 重开 DSH,在右侧栏打开接口额度。
  2. 点同步——从本机落盘文件读取接口清单与历史用量,主要依赖:
数据 路径
OFM catalog $DSH_HOME/our-free-model/catalog.json
渠道包账号 $DSH_HOME/channel-pack/state.json
渠道包用量(权威) $DSH_HOME/channel-pack/token-ledger.json
  1. 点刷新余额——查询各渠道真实剩余积分(host 侧通过进程内 owner Peer 调用渠道包 credits.balances RPC,避免非 owner 访问 /api/channel-pack 的 403)。
  2. 正常对话;开启自动切换后,额度耗尽会在同名族内换接口。

配置写在 $DSH_HOME/ofm-quota/settings.json,也可通过卡片或 HTTP(/api/ofm-quota,插件自行做准入检查)修改。示例:

{
  "enabled": true,
  "autoSwitch": true,
  "maxSwitchesPerStep": 3,
  "cooldownMs": 900000,
  "windowHours": 24,
  "officialFallback": null,
  "syncCatalog": true,
  "manualQuota": {}
}

officialFallback 默认为 null,即不启用官方计费兜底;需要兜底时需显式配置该项(具体取值以仓库文档为准)。enabled 为总开关,autoSwitch 控制是否自动换路。

适用场景与注意

适合谁:已在 DSH 中使用 Our Free Model、多渠道混用,希望看清剩余积分、对账 token、并在单渠道用尽时少打断对话的开发者。

权限与安全:插件在 DSH 进程内运行,可读 $DSH_HOME 下 OFM 与 channel-pack 的落盘文件,并注册 HTTP 与 Cordis 钩子。安装前应阅读 源码 与 MIT 许可证,确认与自身环境一致。

与线索表述的差异:社区简介里常写「全部第三方不可用时兜底 DeepSeek 官方」;仓库明确默认不自动切官方计费,只有配置 officialFallback 后才兜底。以 README 为准。

其他:查询余额失败时不会把 balance: null 当成 0;宿主无 createSharedFetchHandler 时余额能力降级为 no-connection,不抛错拖垮宿主。

结尾

dsh-ofm-quota 把 OFM 分散在各控制台的积分与 token 消耗拉到 DSH 右侧栏,并在配额类失败时按同名模型自动换路,默认不把用户悄悄导到按量计费官方路由。目录与文档入口:

  • 社区目录页:https://www.skillhub.cn/plugins/dx906/dsh-ofm-quota
  • GitHub:https://github.com/dx906/dsh-ofm-quota
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜