feat: 每日消耗任务触发时点 23:00 改为 23:20

- volc_limit_sync:_maybe_trigger_daily_consume 改分钟级判断(23:20 起触发),
  线程内 0-10 分钟随机抖动保留,实际执行窗口 23:20~23:30
- volc_consume:main 手动运行门卫同步 23:20 窗口(--force/--dry-run 不受限)
- docs/volc-quota-notes §9:consume clamp2 余额快照滞后在最新思路(§4.2 量化
  L=149,616)下确认为必改项,方向待定;消耗任务口径同步收紧标记 [x]
- 全仓文档/注释 23:00 统一同步为 23:20(AGENTS/README/docker-compose/两 docs)
This commit is contained in:
vibe-code
2026-08-13 06:08:26 +00:00
parent f86aa59af1
commit 6a2760bd03
7 changed files with 43 additions and 38 deletions
+9 -7
View File
@@ -2,7 +2,7 @@
# 🚀 VolcConsume — 火山免费额度自动消耗任务
# ==========================================
# 与 volc_limit_sync.py 合并方案的一部分(见 docs/merge-auto-consume.md):
# - 每日北京时间 23:00 由 volc_limit_sync 守护线程触发(可手动 --force)
# - 每日北京时间 23:20 由 volc_limit_sync 守护线程触发(可手动 --force)
# - 洗掉 CONSUME_MONITOR_DAYS 天内过期的资源包额度(FIFO 下即队列头部),
# 防止 30 天过期蒸发导致"启动资金"缩水(免费额度规则:消耗 X → 次日返还 X)
# - 直连 Ark API(Bearer token,绕过 LiteLLM 限额,避免消耗任务自杀)
@@ -12,7 +12,7 @@
#
# 手动运行:
# python volc_consume.py --dry-run # 只算计划不消耗
# python volc_consume.py --force # 忽略 23:00 时间限制立即执行
# python volc_consume.py --force # 忽略 23:20 时间限制立即执行
import os
import sys
import time
@@ -471,7 +471,7 @@ def run_consume_model(model, source_groups, order, packages=None, dry_run=False)
def _run_requests(model, plan, balance_snapshot, source_groups, order):
"""
循环发送消耗请求。速率:目标 1 小时内完成(23:00 触发,00:00 结算)。
循环发送消耗请求。速率:目标 1 小时内完成(23:20 触发,00:00 结算)。
"""
burned = 0
fail_count = 0
@@ -481,7 +481,7 @@ def _run_requests(model, plan, balance_snapshot, source_groups, order):
# 任务轻松(单次间隔 > MAX_SLEEP_BASE)→ 正常模式 15-40s 伪装,不赶时间
# 任务极重(间隔 < 2s)→ 极速模式 1-3s(本场景 plan≤2M 实际不会触发)
# 其余 → 动态 ±5s
# 目标:23:00 触发、00:00 结算,1 小时内完成(plan=2M ≈ 47 次 × 27s ≈ 21 分钟)
# 目标:23:20 触发、00:00 结算,1 小时内完成(plan=2M ≈ 47 次 × 27s ≈ 21 分钟)
est_per_req = (MIN_INPUT_CHARS + MAX_INPUT_CHARS) / 2 + 1000
est_requests = max(1, plan / est_per_req)
interval = int(3600 / est_requests)
@@ -594,10 +594,12 @@ def main():
force = "--force" in sys.argv
if not force and not dry_run:
beijing_hour = (time.gmtime(time.time()).tm_hour + 8) % 24
if beijing_hour != 23:
beijing_struct = time.gmtime(time.time() + 8 * 3600)
beijing_hour = beijing_struct.tm_hour
beijing_min = beijing_struct.tm_min
if beijing_hour != 23 or beijing_min < 20:
vls.log(
f"⏰ 当前北京时间 {beijing_hour} 时,非 23:00 触发窗口。加 --force 强制执行",
f"⏰ 当前北京时间 {beijing_hour}:{beijing_min:02d},非 23:20 触发窗口。加 --force 强制执行",
level="WARNING",
)
return