优化hash计算,只取前段,避免url路径影响
This commit is contained in:
+30
-11
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user