优化hash计算,只取前段,避免url路径影响

This commit is contained in:
root
2026-01-28 15:13:57 +08:00
parent f77f7ba6de
commit 54eb769332
2 changed files with 69 additions and 24 deletions
+30 -11
View File
@@ -1,6 +1,7 @@
import os
import yaml
import hashlib
from urllib.parse import urlparse # ✅ 必须导入
import re
from typing import Dict, Any
@@ -63,23 +64,38 @@ def clean_model_name(name):
def generate_api_base_hash(api_base):
"""
[同步更新] 生成 api_base 的 Hash,强制忽略 URL 的路径部分。
保持与 daily_limit.py v20 逻辑完全一致。
"""
if not api_base:
return "default"
# Logic matches daily_limit.py v18
# === 新增标准化代码 ===
# 1. 去除首尾空格 (strip)
# 2. 去除末尾的斜杠 (rstrip('/'))
# 这样 '.../v3/' 和 '.../v3' 会生成相同的 Hash
normalized_base = api_base.strip().rstrip('/')
# ====================
return hashlib.md5(api_base.encode()).hexdigest()[:8]
try:
# 1. 预处理:去空格
s = api_base.strip()
# 2. 解析 URL
parsed = urlparse(s)
# 3. 提取 Scheme 和 Netloc (域名+端口)
# 如果解析成功且包含 scheme 和 netloc,则重组
if parsed.scheme and parsed.netloc:
clean_base = f"{parsed.scheme}://{parsed.netloc}".lower()
else:
# 兜底:如果不是标准 URL,或者解析失败,尝试简单的去斜杠和小写化
clean_base = s.rstrip('/').lower()
except Exception:
# 极端情况下的兜底
clean_base = api_base.strip().rstrip('/').lower()
# 4. 计算 Hash
return hashlib.md5(clean_base.encode()).hexdigest()[:8]
def main():
print("🔍 Generating Daily Limit Keys from config.yaml...\n")
print("🔍 Generating Daily Limit Keys from config.yaml (Robust Mode)...\n")
# 1. Load Env
env_vars = load_env(ENV_FILE)
@@ -119,10 +135,13 @@ def main():
api_base_raw = litellm_params.get("api_base", "")
# Resolve env vars for hash generation
# ⚠️ 这里非常重要:必须先解析出真实的 URL,再进行 Hash
api_base_resolved = resolve_env_var(api_base_raw, env_vars)
# Generate components
clean_upstream = clean_model_name(upstream_model)
# 使用同步后的 Hash 逻辑
base_hash = generate_api_base_hash(api_base_resolved)
# Generate final key