From 82502dda05f64daf8fee288f9ff6ef7858079e0b Mon Sep 17 00:00:00 2001 From: vibe-code Date: Wed, 12 Aug 2026 14:58:04 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=89=8D=E7=BD=AE=E9=97=B8=E9=97=A8=20r?= =?UTF-8?q?eserve=20=E6=94=B9=E7=94=A8=20token=5Fcounter=20=E7=B2=BE?= =?UTF-8?q?=E7=A1=AE=E4=BC=B0=E7=AE=97=E8=BE=93=E5=85=A5=20token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit reserve 从单凭 max_tokens fallback 50k 改为: reserve = litellm.token_counter(messages) + max_tokens(声明值) - 输入 token 精确计数(未知模型 fallback cl100k_base,对中文偏高更安全) - 输出用请求声明的 max_tokens,未声明时 fallback PREBLOCK_RESERVE_TOKENS - 修复 2M 采集上限被单个大请求(176k output)击穿的问题 --- volc_limit_sync.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/volc_limit_sync.py b/volc_limit_sync.py index 709fbe1..f1b968d 100644 --- a/volc_limit_sync.py +++ b/volc_limit_sync.py @@ -827,16 +827,30 @@ class DailyLimitHandler(CustomLogger): if not data or not data.get("model"): return None - # 预留本次请求的预估消耗:优先真实 max_tokens(零采集损失), - # 未设置/非法时 fallback 常量,避免并发请求集体撞线超限。 + # 预留本次请求的预估消耗 = 输入 token(精确) + 输出上限(max_tokens) + # 输入用 litellm.token_counter 精确计数(未知模型 fallback cl100k_base, + # 对中文偏高更安全);输出用请求声明的 max_tokens,未声明时 fallback 常量。 try: - reserve = float( + max_out = float( data.get("max_tokens") or data.get("max_completion_tokens") or PREBLOCK_RESERVE_TOKENS ) except (TypeError, ValueError): - reserve = float(PREBLOCK_RESERVE_TOKENS) + max_out = float(PREBLOCK_RESERVE_TOKENS) + + input_tokens = 0 + try: + from litellm import token_counter as _tc + input_tokens = _tc( + model=data.get("model", ""), + messages=data.get("messages", []), + ) + except Exception: + # token_counter 出错时保守:用 PREBLOCK_RESERVE_TOKENS 兜底输入 + input_tokens = PREBLOCK_RESERVE_TOKENS + + reserve = input_tokens + max_out blocked = _check_request_block(data["model"], reserve=reserve) if not blocked: