mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-03 01:40:21 +08:00
feat(admin,pool,billing): 端点级模型测试、Provider 自动置顶、缓存 TTL 分级计费展示与账号状态增强
- 模型测试支持指定端点:新增 ModelTestDialog 组件,多端点时弹窗选择,单端点直接测试; 后端 test-model-failover 接口新增 endpoint_id 参数,支持 global/direct 模式下按端点过滤候选 - 创建 Provider 时优先级自动置顶(provider_priority 默认 None,后端取 min-1), 显式指定优先级时 shift 已有行;前端创建时不发送 priority,更新时保留 - 缓存计费 UI 增强:RequestDetailDrawer 支持 5min/1h 缓存创建 token 分级展示, 含按 TTL 匹配单价和分行成本计算;ModelDetailDrawer/ModelsTab 标签区分 5min/1h 缓存创建 - Pool 批量操作额度筛选拆分为「无5H限额」和「无周限额」,按 | 分隔 segment 匹配 - KeyFormDialog 优化非 vertex_ai 时布局,API 密钥输入内联到 grid 右列 - Codex refresher 结构化错误标记:401/402/403 使用 [OAUTH_EXPIRED]/[ACCOUNT_BLOCK] 前缀, 新增 deactivated_workspace 识别与分类 - 前后端 accountBlock 关键词同步:新增 token invalidated、deactivated_workspace 识别, OAuth 失效提示清理 block 前缀后展示 - PoolConfig 新增 batch_concurrency 配置(默认 8,上限 32) - 预设模型新增 gpt-5.4;TestResultDialog 响应式布局与 key 脱敏优化
This commit is contained in:
@@ -69,6 +69,22 @@ def _get_fixed_provider_template(provider_type: str | None) -> Any | None:
|
||||
return None
|
||||
|
||||
|
||||
def _resolve_new_provider_priority(
|
||||
current_min_priority: int | None, requested_priority: int | None
|
||||
) -> tuple[int, bool]:
|
||||
"""Resolve insertion priority for a newly created provider.
|
||||
|
||||
Returns ``(priority, needs_shift)``. When the caller explicitly specifies
|
||||
a priority we need to shift existing rows; when auto-topping we simply pick
|
||||
``min - 1`` so no shift is required.
|
||||
"""
|
||||
if requested_priority is not None:
|
||||
return int(requested_priority), True
|
||||
if current_min_priority is not None:
|
||||
return int(current_min_priority) - 1, False
|
||||
return 100, False
|
||||
|
||||
|
||||
def _merge_pool_advanced_config(
|
||||
*,
|
||||
provider_config: dict[str, Any] | None,
|
||||
@@ -265,7 +281,7 @@ async def create_provider(request: Request, db: Session = Depends(get_db)) -> An
|
||||
- `quota_reset_day`: 配额重置日期(1-31)(可选)
|
||||
- `quota_last_reset_at`: 上次配额重置时间(可选)
|
||||
- `quota_expires_at`: 配额过期时间(可选)
|
||||
- `provider_priority`: 提供商优先级(数字越小优先级越高,默认 100)
|
||||
- `provider_priority`: 提供商优先级(数字越小优先级越高;不传时自动置顶,并将原有提供商顺延一位)
|
||||
- `is_active`: 是否启用(默认 true)
|
||||
- `concurrent_limit`: 并发限制(可选)
|
||||
- `max_retries`: 最大重试次数(可选)
|
||||
@@ -458,6 +474,20 @@ class AdminCreateProviderAdapter(AdminApiAdapter):
|
||||
failover_rules_in_payload=validated_data.failover_rules is not None,
|
||||
)
|
||||
|
||||
current_min_priority = db.query(func.min(Provider.provider_priority)).scalar()
|
||||
target_priority, needs_shift = _resolve_new_provider_priority(
|
||||
current_min_priority=current_min_priority,
|
||||
requested_priority=validated_data.provider_priority,
|
||||
)
|
||||
if needs_shift:
|
||||
db.query(Provider).filter(
|
||||
Provider.provider_priority.isnot(None),
|
||||
Provider.provider_priority >= target_priority,
|
||||
).update(
|
||||
{Provider.provider_priority: Provider.provider_priority + 1},
|
||||
synchronize_session=False,
|
||||
)
|
||||
|
||||
# 创建 Provider 对象
|
||||
provider = Provider(
|
||||
name=validated_data.name,
|
||||
@@ -469,7 +499,7 @@ class AdminCreateProviderAdapter(AdminApiAdapter):
|
||||
quota_reset_day=validated_data.quota_reset_day,
|
||||
quota_last_reset_at=validated_data.quota_last_reset_at,
|
||||
quota_expires_at=validated_data.quota_expires_at,
|
||||
provider_priority=validated_data.provider_priority,
|
||||
provider_priority=target_priority,
|
||||
keep_priority_on_conversion=validated_data.keep_priority_on_conversion,
|
||||
is_active=validated_data.is_active,
|
||||
concurrent_limit=validated_data.concurrent_limit,
|
||||
|
||||
Reference in New Issue
Block a user