fix: 幂等检查提前到 token_counter 之前,第二次 pre-hook 不打印 Pre-reserve
This commit is contained in:
+16
-15
@@ -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 账户。
|
||||
|
||||
Reference in New Issue
Block a user