mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-03 01:40:21 +08:00
feat(usage): 改进请求追踪与缓存预热
- 区分请求重试与故障转移:新增 has_retry 标识亲和缓存重试 - 修正候选 TTFB 计算:记录候选自身的首字节时间而非全局时间 - Streaming 状态同步 rate_multiplier,支持按 API 格式配置 - 新增缓存预热服务:启动时预热仪表盘统计、热力图、每日统计 - 优化缓存 TTL 配置:仪表盘统计 2 分钟、热力图和每日统计 10 分钟 - 自动刷新间隔从 10 秒调整为 5 秒
This commit is contained in:
51
src/services/cache/provider_cache.py
vendored
51
src/services/cache/provider_cache.py
vendored
@@ -25,6 +25,41 @@ class ProviderCacheService:
|
||||
|
||||
CACHE_TTL = CacheTTL.PROVIDER # 5 分钟
|
||||
|
||||
@staticmethod
|
||||
def compute_rate_multiplier(
|
||||
rate_multiplier: Optional[float],
|
||||
rate_multipliers: Optional[dict],
|
||||
api_format: Optional[str] = None,
|
||||
) -> float:
|
||||
"""
|
||||
计算 rate_multiplier 的纯函数(无数据库/缓存依赖)
|
||||
|
||||
优先返回指定 API 格式的倍率,如果没有则返回默认倍率。
|
||||
规则:
|
||||
- 如果指定了 api_format 且 rate_multipliers 存在:
|
||||
- 如果 rate_multipliers[api_format] 存在,返回它
|
||||
- 否则返回 1.0(rate_multipliers 存在但该格式未配置)
|
||||
- 否则返回 rate_multiplier 或 1.0
|
||||
|
||||
Args:
|
||||
rate_multiplier: 默认倍率
|
||||
rate_multipliers: 按 API 格式的倍率配置字典
|
||||
api_format: API 格式(可选),如 "CLAUDE"、"OPENAI"
|
||||
|
||||
Returns:
|
||||
计算后的 rate_multiplier
|
||||
"""
|
||||
if api_format and rate_multipliers:
|
||||
format_upper = api_format.upper()
|
||||
if format_upper in rate_multipliers:
|
||||
return float(rate_multipliers[format_upper])
|
||||
else:
|
||||
# rate_multipliers 存在但该格式未配置,使用默认值 1.0
|
||||
return 1.0
|
||||
else:
|
||||
# rate_multipliers 不存在或未指定 api_format,回退到默认倍率
|
||||
return rate_multiplier or 1.0
|
||||
|
||||
@staticmethod
|
||||
async def get_provider_api_key_rate_multiplier(
|
||||
db: Session, provider_api_key_id: str, api_format: Optional[str] = None
|
||||
@@ -64,19 +99,9 @@ class ProviderCacheService:
|
||||
|
||||
# 3. 计算倍率并写入缓存
|
||||
if provider_key:
|
||||
# 优先使用 rate_multipliers[api_format]
|
||||
# 如果 rate_multipliers 存在但未配置该格式,默认为 1.0
|
||||
# 只有当 rate_multipliers 完全不存在时,才回退到 rate_multiplier
|
||||
if api_format and provider_key.rate_multipliers:
|
||||
format_upper = api_format.upper()
|
||||
if format_upper in provider_key.rate_multipliers:
|
||||
rate_multiplier = provider_key.rate_multipliers[format_upper]
|
||||
else:
|
||||
# rate_multipliers 存在但该格式未配置,使用默认值 1.0
|
||||
rate_multiplier = 1.0
|
||||
else:
|
||||
# rate_multipliers 不存在或未指定 api_format,回退到默认倍率
|
||||
rate_multiplier = provider_key.rate_multiplier or 1.0
|
||||
rate_multiplier = ProviderCacheService.compute_rate_multiplier(
|
||||
provider_key.rate_multiplier, provider_key.rate_multipliers, api_format
|
||||
)
|
||||
|
||||
await CacheService.set(
|
||||
cache_key, rate_multiplier, ttl_seconds=ProviderCacheService.CACHE_TTL
|
||||
|
||||
Reference in New Issue
Block a user