From 6dfaa3f34ce051b5f036c1542653aa923affe7f0 Mon Sep 17 00:00:00 2001 From: vibe-code Date: Tue, 18 Aug 2026 11:05:48 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B9=82=E7=AD=89=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E6=8F=90=E5=89=8D=E5=88=B0=20token=5Fcounter=20=E4=B9=8B?= =?UTF-8?q?=E5=89=8D,=E7=AC=AC=E4=BA=8C=E6=AC=A1=20pre-hook=20=E4=B8=8D?= =?UTF-8?q?=E6=89=93=E5=8D=B0=20Pre-reserve?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- volc_limit_sync.py | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/volc_limit_sync.py b/volc_limit_sync.py index 7c83aab..9060366 100644 --- a/volc_limit_sync.py +++ b/volc_limit_sync.py @@ -1158,6 +1158,22 @@ class DailyLimitHandler(CustomLogger): # 输出侧:思考模型 usage 含 reasoning tokens 且不受 max_tokens 限制, # 故取 max(请求声明 max_tokens, THINKING_RESERVE_FLOOR) 兜底思考开销, # 防短文本 + 小 max_tokens 请求 reserve 低估(实测 34 vs 实际 150+)。 + # 幂等防重:litellm 对同一请求可能调用两次 async_pre_call_hook + # (proxy 级 + deployment 级),第二次预扣会重复占 inflight 且 + # 结算只释放一次 → 残留累积。已有 reserve 标记时跳过预扣(含 + # token_counter 精确计数等昂贵路径)直接放行。 + # 假设:deployment-level hook 收到的是同一 data dict 引用(litellm + # pre_call_hook 循环体 data=result 赋值,就地修改会带过去)。若 + # litellm 升级为深拷贝 data 传给第二次 hook,此检查失效,需改用 + # 请求级唯一 ID(如 litellm_call_id)做去重。部署后留意日志确认 + # 第二次 pre-hook 是否被跳过(Pre-reserve 只应打印一次)。 + try: + _existing_meta = data.get("metadata") or {} + if isinstance(_existing_meta, dict) and PREBLOCK_RESERVE_META_KEY in _existing_meta: + return data + except Exception: + pass + try: declared = ( data.get("max_tokens") @@ -1189,21 +1205,6 @@ class DailyLimitHandler(CustomLogger): level="DEBUG", ) - # 幂等防重:litellm 对同一请求可能调用两次 async_pre_call_hook - # (proxy 级 + deployment 级),第二次预扣会重复占 inflight 且 - # 结算只释放一次 → 残留累积。已有 reserve 标记时跳过预扣直接放行。 - # 假设:deployment-level hook 收到的是同一 data dict 引用(litellm - # pre_call_hook 循环体 data=result 赋值,就地修改会带过去)。若 - # litellm 升级为深拷贝 data 传给第二次 hook,此检查失效,需改用 - # 请求级唯一 ID(如 litellm_call_id)做去重。部署后留意日志确认 - # 第二次 pre-hook 是否被跳过(Pre-reserve 只应打印一次)。 - try: - _existing_meta = data.get("metadata") or {} - if isinstance(_existing_meta, dict) and PREBLOCK_RESERVE_META_KEY in _existing_meta: - return data - except Exception: - pass - blocked = _check_request_block(data["model"], reserve=reserve) if not blocked: # 放行:Lua 原子闸门已把 reserve 预扣进 inflight 账户。