额度按"天/周/月"算的计划:/usage 现在能告诉你还剩多少、什么时候回血

最烦的不是额度用完,是不知道还剩多少。你正在赶一个 deadline,前一句话还好好的,下一句话突然被拒:“额度已用尽”。用完了哪一条?今天的还是这个月的?大模型的那份额度是不是单独算的?什么时候回来?以前这些问题得去网页后台翻,现在 PR #142308(2026 年 10 月 22 日合入)把它搬进了终端。
先分清两种计费方式
Hermes 过去熟悉的模型是“额度点数”(credit balance):充一笔,用一点,扣到零为止。而有些订阅是按用量窗口(usage-window)算的——“今天”“这周”“这个月”,外加一条单独给大模型的 allowance;它不是余额,是配额,到点重置。
这两种东西的差别决定了界面怎么设计:余额是一条数,配额是一组进度条。所以这次改动没有去猜任何档位逻辑,而是把服务端发来的东西照着画出来。
服务端说有几条,界面就画几条
额度数据的来源有两个,形状相同:
- Portal 账号快照里的
usage_window.gauges; - API 响应头
x-nous-credits-window-gauges(在被 402 拒绝的响应上也带着)。
每条 gauge 有一个 scope 字段,说明“这条额度满了会挡住什么”:
scope: all—— 满了挡住所有付费模型(天/周/月以及以后新加的任何一条都可能是这个 scope);scope: top_tier—— 满了只挡网关标记为 top tier 的那些模型。
免费模型永远不受影响:它不消耗任何 allowance。这条规则写死在 agent/plan_limits.py 的开头,因为选择器里的“用完了”提示、限制卡片上的建议、以及那个一键切换按钮,必须用同一套判断,否则三处会互相打脸。
agent/usage_gauges.py 里还有一句注释值得原样记住:Hermes 只为它认识的 id 保留自己的措辞(因为要翻译、要适配不同界面),其他 id 直接显示服务端给的 label。也就是说,服务端新加一条 allowance,不需要等 Hermes 发版。
/usage 里长什么样
/usage 本来就是“这次会话花了多少 token、多少钱、跑了多久”,现在在支持窗口计划的账号上会多出一组进度条:一条 allowance 一条,显示已用百分比和距离重置还有多久。
在桌面端,同样的数据出现在 Settings → Billing,以 gauge 的形式展示;旁边多了一个开关 “Keep going on credits”——它决定某条 allowance 用完之后,要不要自动动用到充值的 credits。这个开关其实就是 Portal 上 Billing → Topup 里那个账号设置,桌面端只是把它做成了同一个开关的另一个入口。改它需要这个终端具备 Remote Spending(billing:manage)权限;没有权限时,点一下会直接走审批流程,界面停在“你请求的位置”,审批通过后自己生效,不会再让你点第二次。
模型选择器开始标价签
窗口计划下,选择器里列出的模型全是“已包含”的,所以显示单价没意义——它改成给每个模型打一个词:Free、Small、Medium、Large。这个词是网关按调用方在 /v1/models 的 usage_level 字段发下来的,Hermes 只负责翻译成界面文字。
配套的几件事:
- 计划推荐的模型排在最前面,其他模型归到 “Other models”(消息平台上的选择器只是把推荐的排前面,不分组);
- 某条 allowance 用完时,选择器只说一次、并告诉你什么时候重置;它挡住的模型在支持的平台上会变灰;
- 选
Large模型会给一次性提示:这会多消耗你的月度大模型额度。
其他账号(credit-grant、按量付费、免费版)在这个模块里什么都不会多出来——这条路径对他们是完全不变的。
被拒的时候,说清楚三件事
额度撞线时的报错,以前是一个笼统的“额度用尽”。现在它会说:哪条 allowance 用完了、什么时候重置、以及现在还能用什么——从计划的推荐模型里按顺序挑最多两个还能跑的,在已经有按钮的平台上渲染成按钮,其他地方就写成一句话。
还有一条设计决定,值得所有 agent 产品抄:Hermes 永远不会自己换模型。撞到用量窗口上限时,它不会走 fallback 链偷偷换一个模型继续,而是把选择权交回给你——你自己挑一个还能用的,或者等重置。fallback 链是给“这个 provider 挂了”准备的,不是给“你超配额了”准备的。
渠道上有两个细节:已经支持按钮的平台(Telegram / Discord / Slack 之类)会给一个“一键切到可用模型”;消息平台上的充值引导会指向 Portal,而不是 /topup——因为在一个群聊里,一个按钮就能花掉群主的钱。
最后是凭据池(credential pool):被额度挡住的只有那个模型,不是整个凭据。也就是说,一个凭据下别的模型照样能用,池子不会因为一条 allowance 满了就把一整把 key 全部拉黑到重置为止。
兼容性与边界
官方在 PR 里把边界写得很明确:
- 不是窗口计划的账号,每一条代码路径都和以前一样;
- 用量窗口的响应头和拒绝码只对 Nous 路由生效,别的上游服务无法触发这套界面;
- 纯增量:没有删除任何既有 config、API 或 CLI 行为。
目前的状态
PR #142308 于 2026 年 10 月 22 日合入 main(改动 200+ 文件,含 TUI、桌面、网关与 CLI 的渲染和测试),最近一次正式发布是 10 月 21 日的 v0.22.4,所以这套能力现在还在 main 上,会随下一个版本进稳定通道。
顺带区分几个容易混的东西:/usage reset 是给 Codex 计划兑换 banked reset 的(那篇在这里),Resetwatch 是第三方桌面插件、把 14 个平台的剩余额度做成一屏卡片(这里),而这次讲的是官方对“用量窗口计划”本身的支持。想弄清模型清单和选择器的其它行为,看 hermes model 命令参考。