Saltar al contenido principal
F

dsh-provider-quota

fulisike/dsh-provider-quota

一个更好用的供应商限额设置插件

Instalar

dsh plugin --profile web add github:fulisike/dsh-provider-quota

README

DSH provider quota

English · 中文

DeepSeek Harness 的提供方共享限流插件,带原生 GUI 设置入口。所有模型共享滚动 RPM、输入与输出合计 TPM、7 天 token 额度;跨进程串行请求并持久记账。官方 dsh-llm-retry 负责恢复,本插件不会在同一 waterfall 中重复调用 next()。

安装

需要 Node.js 24.9+ 和兼容的 DSH 0.2.2。在 DSH 的“插件 → 添加插件”输入仓库 URL,或用 DSH 的命令安装:

dsh plugin --profile web add github:Fulisike/dsh-provider-quota#main

仓库提交了包含运行依赖的 ESM 产物,安装时无需构建,也不依赖嵌套的 node_modules 链接。安装后重启 DSH 并刷新页面,在“设置 → 提供方限流”选择已经配置的提供方,调整参数并点击“保存并应用”。新安装默认不限制任何提供方;第一次保存会启用所选提供方的共享额度。界面支持中英文,字段变更走 DSH 原生配置表单,保留密钥和其他提供方设置。

从源码安装也可以:

git clone https://github.com/Fulisike/dsh-provider-quota.git
cd dsh-provider-quota
npm install --omit=dev --ignore-scripts
dsh plugin --profile web add .

源码版 DSH 从 DSH 仓库根目录运行 pnpm dsh plugin --profile web add /absolute/path/to/dsh-provider-quota;GitHub 安装命令也可在该目录用 pnpm dsh 执行。Desktop 通过自己的插件管理器安装;不要用普通 npm CLI 修改保留的 desktop profile。

超过 30 万 token 时

单分钟额度包含输入和输出。LOCAL_REQUEST_TOO_LARGE 表示本地预计的一次调用已经超限,还没有发送;多等一分钟不能缩小这次调用。页面中的“输入 token”累计值也不等于单次请求大小。

默认先计算完整请求的输入估计、最大输出和 4096 token 余量。单次可以容纳时保留历史,仅滚动窗口余额不足时排队等待;单次预算放不下时,通过 DSH 原生压缩服务生成摘要,每步最多恢复一次。Web 从当前 Agent 绑定的预设读取隔离的压缩服务;headless 使用自身上下文中的服务。主请求默认最大输出为 16384 token,实际结算改用提供方返回的 usage。

可选的固定提前压缩阈值位于高级设置,默认 -1,表示只按单次预算触发插件压缩。关闭插件的自动压缩开关不会关闭 DSH 自身的压缩策略或 /compact。若单个用户输入、工具结果或固定提示本身太大,原生服务可能找不到可压缩范围;此时需要拆分输入或开新会话。摘要请求同样经过共享额度检查,摘要输出上限由原生压缩后端配置决定;profile 层的 compaction-basic 配置不会修改 Web 预设内的独立后端。

常用设置与高级设置

默认显示三个共享额度、单次最大输出、自动压缩开关、无输出等待时间和最多重试次数。三个额度均支持 -1 表示不做该项限制;0 无效。最大输出仍须为正数,以便发送前预留预算。只取消一个额度不会取消其他额度、文件锁串行或提供方返回的 429 冷却。

参数默认值
滚动 60 秒请求数10
滚动 60 秒 token 总数300000
滚动 7 天 token 总数1000000000
自动压缩开启
主请求最大输出16384 token

高级设置保留以下粒度:

参数默认值
最短发送间隔7000 ms
固定提前压缩阈值-1,仅按预算压缩
单次额外余量4096 token
初始输入估计系数1.25
窗口边缘余量250 ms
文件锁检查间隔500 ms
429 共享冷却下限60000 ms

最短发送间隔也支持 -1,表示不额外设置发送间隔;固定提前压缩阈值的 -1 表示取消固定阈值,预算不足时仍可自动压缩。余量、安全系数、队列轮询、冷却、超时和重试次数不接受 -1。重试次数为 0 时关闭失败重试。

连接区提供 900 秒无输出等待、1800 秒单次最长等待和 12 次有界重试的建议值。秒数字段支持 3 位小数,底层仍保存整数毫秒;初始与最大退避及抖动比例位于高级设置。保存使用 normal 策略并沿用既有重试错误码。限流与连接设置分别校验和保存,后者失败会明确提示前者是否已经保存。

限流参数保存后在线生效,正在发送的请求保留其已捕获的参数。更换提供方前先保存或放弃当前修改。高级配置仍可写入 profile 的 cordis.patch.yml;不要同时启用其他限流插件。

存储与限制

计数默认存放在 $DSH_HOME/storages/provider-quota,默认 home 为 ~/.dsh;也可在 provider-quota.config.stateDirectory 配置绝对目录。代码和仓库不包含密钥、会话或个人用量。使用同一统计目录的进程共享文件锁,每个提供方最多一条请求在途,跨进程不保证 FIFO。

发送前保存输入估计与输出预留,结算时使用实际 usage;缓存读写计入输入,reasoning 不会重复相加。缺少 usage 的尝试保留预留,可能高估;输入估计会根据实际 usage 向上校准。token 窗口保守地从结算时起算,RPM 从发送时起算。计数损坏会阻止调用,崩溃留下的预留不会被当作零消耗。

本地计数无法覆盖其他客户端、其他机器或安装前未记录的用量,也无法完全复现提供方 tokenizer 和限流口径;仍可能遇到 429。周额度不足时停止并显示最早释放部分额度的时间。排队可取消,卸载会等待在途请求结算。关闭插件不会删除账本。

开发与验证

npm install --ignore-scripts
npm run build
npm test
npm pack --dry-run

修改 index.js 或 config.js 后,运行 npm run build 并提交 dist/index.js 和 THIRD_PARTY_NOTICES.txt。包测试把发布文件复制到没有依赖的临时目录,再运行同一组行为测试,验证实际导出入口不需要 node_modules。

端到端测试需要本地 DSH 源码及已经构建的产物;通过 DSH_SOURCE_ROOT 指定仓库目录,再运行 npm run test:integration。测试只请求本机模拟 HTTP 服务,验证 429 恢复、失败尝试、日志与实际输出上限,不调用真实 API。GUI 通过 DSH 的 slots、locale、configForms 和认证 connection 注册,不增加独立应用入口。

同样设置 DSH_SOURCE_ROOT 后,npm run test:git-install 会建立一次性 Git 仓库和全新 DSH home,通过 DSH 自带的 pnpm 执行 Git 安装,验证 Web 激活、原生设置保存,再对安装后的入口运行模拟 429 恢复测试。

npm run test:web 在真实 Web profile 中验证标准模式对话,以及隔离预设内“超大请求 → 原生摘要 → 继续回复”的完整链路;Git 安装测试也运行这条用例。测试只使用本机模拟服务。

从 2.0.x 升级

重新执行安装命令并重启 DSH。原有额度、账本和明确配置的提前压缩阈值保留。新建配置默认采用预算驱动压缩;既有配置如需同样行为,将高级设置中的固定提前压缩阈值改为 -1。Web 的自动压缩通过预设服务接口接入,不再要求 Agent 根上下文直接提供压缩服务。

许可证:MIT。

Plugins relacionados