fix: dynamic 限额缺失时 fallback 保守兜底(FALLBACK_LIMIT 90万)

免费模型余额常态 <2M(昨日采多少返多少),stable_limit 缺失窗口
(首次同步前/新增模型/TTL 过期)此前 fallback 裸奔到静态 2M,
余额不足的模型会被烧穿扣费。改为 min(static, FALLBACK_LIMIT=90万)。
This commit is contained in:
vibe-code
2026-08-11 13:38:32 +00:00
parent 96b81d52c4
commit b7df36bb4e
3 changed files with 14 additions and 4 deletions
+11 -3
View File
@@ -95,6 +95,11 @@ SYNC_INTERVAL = 60
CHECK_INTERVAL = 10
THRESHOLD = 300000
# stable_limit 缺失时(首次同步前/新增模型/TTL 过期)的保守兜底限额。
# 免费模型余额常态 < 2M(昨日采多少返多少),若 fallback 裸奔到采集上限 2M,
# 余额不足的模型会被烧穿扣费。宁可短时收紧,不可裸奔。
FALLBACK_LIMIT = int(os.getenv("FALLBACK_LIMIT", "900000"))
# Redis Config
REDIS_HOST = os.getenv(
"REDIS_HOST", "redis"
@@ -437,9 +442,12 @@ def get_effective_limit(clean_model, api_base, current_usage=None):
except (ValueError, TypeError):
effective_limit = calculate_effective_limit(static_limit, None)
else:
# Fallback: If daemon hasn't calculated stable limit yet, use old logic?
# Or just use static. Safer to wait for daemon.
effective_limit = calculate_effective_limit(static_limit, None)
# Fallback: 如果 daemon 尚未计算 stable limit(首次同步前/新增模型/TTL 过期),
# 用保守兜底(FALLBACK_LIMIT),绝不裸奔到采集上限 —— 免费模型余额常态 < 2M,
# 裸奔 2M 会把余额不足的模型烧穿扣费。
fallback = float(static_limit) if static_limit is not None else float(FALLBACK_LIMIT)
fallback = min(fallback, float(FALLBACK_LIMIT))
effective_limit = calculate_effective_limit(fallback, None)
# Legacy fallback (Optional: Enable if you want immediate loose limits before first sync)
# dynamic_remaining = redis_client.get(f"limit:dynamic:volcengine:remaining:{clean_model}")