mirror of
https://github.com/fawney19/Aether.git
synced 2026-01-03 00:02:28 +08:00
refactor: 优化活跃请求状态查询逻辑
- 重命名 get_active_requests 为 get_active_requests_status - 支持从端点配置读取超时时间 - 新增 content_length_limit 错误类型
This commit is contained in:
@@ -660,7 +660,7 @@ class AdminActiveRequestsAdapter(AdminApiAdapter):
|
|||||||
if not id_list:
|
if not id_list:
|
||||||
return {"requests": []}
|
return {"requests": []}
|
||||||
|
|
||||||
requests = UsageService.get_active_requests(db=db, ids=id_list)
|
requests = UsageService.get_active_requests_status(db=db, ids=id_list)
|
||||||
return {"requests": requests}
|
return {"requests": requests}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -672,7 +672,7 @@ class GetActiveRequestsAdapter(AuthenticatedApiAdapter):
|
|||||||
if not id_list:
|
if not id_list:
|
||||||
return {"requests": []}
|
return {"requests": []}
|
||||||
|
|
||||||
requests = UsageService.get_active_requests(db=db, ids=id_list, user_id=user.id)
|
requests = UsageService.get_active_requests_status(db=db, ids=id_list, user_id=user.id)
|
||||||
return {"requests": requests}
|
return {"requests": requests}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ class ErrorClassifier:
|
|||||||
"content_policy_violation", # 内容违规
|
"content_policy_violation", # 内容违规
|
||||||
"invalid_api_key", # 无效的 API Key(不同于认证失败)
|
"invalid_api_key", # 无效的 API Key(不同于认证失败)
|
||||||
"context_length_exceeded", # 上下文长度超限
|
"context_length_exceeded", # 上下文长度超限
|
||||||
|
"content_length_limit", # 请求内容长度超限 (Claude API)
|
||||||
"max_tokens", # token 数超限
|
"max_tokens", # token 数超限
|
||||||
"invalid_prompt", # 无效的提示词
|
"invalid_prompt", # 无效的提示词
|
||||||
"content too long", # 内容过长
|
"content too long", # 内容过长
|
||||||
|
|||||||
@@ -1306,28 +1306,35 @@ class UsageService:
|
|||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_active_requests(
|
def get_active_requests_status(
|
||||||
cls,
|
cls,
|
||||||
db: Session,
|
db: Session,
|
||||||
ids: Optional[List[str]] = None,
|
ids: Optional[List[str]] = None,
|
||||||
user_id: Optional[str] = None,
|
user_id: Optional[str] = None,
|
||||||
timeout_seconds: int = 300,
|
default_timeout_seconds: int = 300,
|
||||||
) -> List[Dict[str, Any]]:
|
) -> List[Dict[str, Any]]:
|
||||||
"""
|
"""
|
||||||
获取活跃请求状态,并自动清理超时的 pending 请求
|
获取活跃请求状态(用于前端轮询),并自动清理超时的 pending 请求
|
||||||
|
|
||||||
|
与 get_active_requests 不同,此方法:
|
||||||
|
1. 返回轻量级的状态字典而非完整 Usage 对象
|
||||||
|
2. 自动检测并清理超时的 pending 请求
|
||||||
|
3. 支持按 ID 列表查询特定请求
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
db: 数据库会话
|
db: 数据库会话
|
||||||
ids: 指定要查询的请求 ID 列表(可选)
|
ids: 指定要查询的请求 ID 列表(可选)
|
||||||
user_id: 限制只查询该用户的请求(可选,用于普通用户接口)
|
user_id: 限制只查询该用户的请求(可选,用于普通用户接口)
|
||||||
timeout_seconds: pending 状态超时时间(秒),默认 5 分钟
|
default_timeout_seconds: 默认超时时间(秒),当端点未配置时使用
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
请求状态列表
|
请求状态列表
|
||||||
"""
|
"""
|
||||||
|
from src.models.database import ProviderEndpoint
|
||||||
|
|
||||||
now = datetime.now(timezone.utc)
|
now = datetime.now(timezone.utc)
|
||||||
|
|
||||||
# 构建基础查询
|
# 构建基础查询,包含端点的 timeout 配置
|
||||||
query = db.query(
|
query = db.query(
|
||||||
Usage.id,
|
Usage.id,
|
||||||
Usage.status,
|
Usage.status,
|
||||||
@@ -1336,7 +1343,9 @@ class UsageService:
|
|||||||
Usage.total_cost_usd,
|
Usage.total_cost_usd,
|
||||||
Usage.response_time_ms,
|
Usage.response_time_ms,
|
||||||
Usage.created_at,
|
Usage.created_at,
|
||||||
)
|
Usage.provider_endpoint_id,
|
||||||
|
ProviderEndpoint.timeout.label("endpoint_timeout"),
|
||||||
|
).outerjoin(ProviderEndpoint, Usage.provider_endpoint_id == ProviderEndpoint.id)
|
||||||
|
|
||||||
if ids:
|
if ids:
|
||||||
query = query.filter(Usage.id.in_(ids))
|
query = query.filter(Usage.id.in_(ids))
|
||||||
@@ -1355,6 +1364,9 @@ class UsageService:
|
|||||||
timeout_ids = []
|
timeout_ids = []
|
||||||
for r in records:
|
for r in records:
|
||||||
if r.status == "pending" and r.created_at:
|
if r.status == "pending" and r.created_at:
|
||||||
|
# 使用端点配置的超时时间,若无则使用默认值
|
||||||
|
timeout_seconds = r.endpoint_timeout or default_timeout_seconds
|
||||||
|
|
||||||
# 处理时区:如果 created_at 没有时区信息,假定为 UTC
|
# 处理时区:如果 created_at 没有时区信息,假定为 UTC
|
||||||
created_at = r.created_at
|
created_at = r.created_at
|
||||||
if created_at.tzinfo is None:
|
if created_at.tzinfo is None:
|
||||||
|
|||||||
Reference in New Issue
Block a user