feat: 成本预算与失败通知第一批(G1/G2/G5/G6/无价上报)
- G1:修正 _check_quota docstring(Local popen 30 秒轮询掐断、 Docker/同步路径只有边界检查),README 配额节同步;followup 创建不查配额是已声明设计,保持不动。 - G2:notify_failure 对插值 shlex.quote,模板错误记日志不静默 吞,命令返回值/超时/异常记 host-run.log;dispatch 前置预算门 与 goal 预算中断补 budget-exceeded 通知(没配命令时只写日志)。 - G5/G6:重试与续跑的配额检查按任务创建者查(费用记创建者名下), 维护者替他人操作不再用错人的额度;续跑 API 侧补查,超限回 402 且不改状态,不再先 200 排队再悄悄 interrupted。 - 无价上报:配额自查/管理端点返回增加 unpriced_actual_tokens (actual 且 usd_micros 为 NULL,与 CostStore 口径一致),只读 上报、不计价、不拦任务;不给 gpt-5.6-terra 编造价格。 测试:host 68、cloud 760(4 跳过)、deploy 19 全过。
This commit is contained in:
1 parent
c2f82da5e0
commit
e4b5545a24
5 files changed
+304
-38
No files matched your search
+18
-10
@@ -956,18 +956,22 @@ interrupted 且终态任务 cancel 返回 400、心跳后 sweep 不扫刚心跳
|
||||
NULL,SUM 自动跳过),按任务创建者 `created_by` 归属——一个
|
||||
用户在多个项目里花的钱都算进他自己的月度账单;项目维度的
|
||||
拆分由项目成本接口另行提供。
|
||||
- 准入:建任务、会话分支、重试在权限校验通过后、写库之前查
|
||||
配额,本月用量 >= 配额时回 402 `quota_exceeded`(附 month、
|
||||
quota_usd_micros、used_usd_micros),不建任务、不改状态。
|
||||
老用户与未设配额的用户默认不限额,行为与过去一致。但
|
||||
- 准入:建任务、会话分支、重试、续跑在权限校验通过后、写库
|
||||
之前查配额,本月用量 >= 配额时回 402 `quota_exceeded`(附
|
||||
month、quota_usd_micros、used_usd_micros),不建任务、不改
|
||||
状态。老用户与未设配额的用户默认不限额,行为与过去一致。但
|
||||
OAuth 新用户不再是“建号即不限额”:建号(created=True)时
|
||||
写一行默认配额(`CLOUD_DEFAULT_QUOTA_USD_MICROS`,默认
|
||||
10_000_000,即 $10/月;`INSERT OR IGNORE` 幂等,不覆盖管理
|
||||
员后来改过的额度),并记 `quota_default` 审计。重试按
|
||||
操作人查配额、费用仍记到原任务创建者名下(建任务与分支的
|
||||
操作人就是创建者,没有这个错位)。系统任务(GitHub webhook
|
||||
的 /fix-review,created_by 是 'system')不记到任何用户名下、
|
||||
不占配额;要把它算到项目所有者头上需另做归属。
|
||||
员后来改过的额度),并记 `quota_default` 审计。重试与续跑
|
||||
按任务创建者查配额(费用本来就记在创建者名下;维护者替
|
||||
他人重试/续跑时,操作人超限不应拦、创建者超限才应拦——
|
||||
旧版重试按操作人查是错位,本轮已改)。后续消息
|
||||
(followup)创建不查配额:排队本身不花钱,执行时轮次边界
|
||||
的配额门照常生效,不要把 followup 也改成准入校验。系统
|
||||
任务(GitHub webhook 的 /fix-review,created_by 是 'system')
|
||||
不记到任何用户名下、不占配额;要把它算到项目所有者头上
|
||||
需另做归属。
|
||||
- 无价模型 token 上限:价目表目前只有两个 sol 模型有价,默认
|
||||
模型 gpt-5.6-terra 等中转模型无价、成本行 usd 为 NULL,USD
|
||||
配额对它们永远不生效(按 0 计)。因此有配额行的用户另受一
|
||||
@@ -997,7 +1001,11 @@ interrupted 且终态任务 cancel 返回 400、心跳后 sweep 不扫刚心跳
|
||||
时开跑会有少量超支(与限流器同款 best-effort,非精确配额);
|
||||
PR 任务(_run_pr_jobs)暂不查配额。
|
||||
- 接口:`GET /users/me/quota`(自查,返回 month、quota、
|
||||
used、remaining,不限额时 quota 与 remaining 为 null);
|
||||
used、remaining,以及当月无价实际 token 数
|
||||
`unpriced_actual_tokens`——价目表里没有该模型价格的实际
|
||||
token 只上报、不计价、不拦任务,绝不编造一个价格把它折
|
||||
算进 used;不限额时 quota 与 remaining 为 null);管理端点
|
||||
的配额返回同样含 `unpriced_actual_tokens`;
|
||||
`GET /admin/quotas?user_id=` 与 `POST /admin/quotas`
|
||||
(body:user_id、quota_usd_micros,null=不限额,负数 400,
|
||||
用户不存在 404,改完记 `quota_set` 审计)。管理口径沿用
|
||||
|
||||
Reference in new issue
Block a user