mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
feat(pool): 新增账号配额展示并清理 Codex 旧限额字段
- 后端池子 Key 列表新增 account_quota 字段,按 provider_type 生成配额摘要(codex/kiro/antigravity) - 前端 PoolManagement 新增“配额”列与进度条展示,桌面端与移动端同步支持 - Provider 详情页移除 Codex code_review 限额展示,仅保留周限额与 5H 限额 - 清理 codex usage parser/realtime quota 中 code_review 相关解析与比较逻辑 - 同步更新调度与配额相关测试,改为忽略无关历史字段
This commit is contained in:
@@ -25,7 +25,6 @@ _COMPARE_IGNORE_FIELDS = frozenset(
|
||||
"updated_at",
|
||||
"primary_reset_seconds",
|
||||
"secondary_reset_seconds",
|
||||
"code_review_reset_seconds",
|
||||
}
|
||||
)
|
||||
_CACHE_TTL_SECONDS = 30.0
|
||||
|
||||
@@ -202,12 +202,10 @@ def parse_codex_wham_usage_response(data: dict[str, Any]) -> dict[str, Any] | No
|
||||
|
||||
Free 账号:
|
||||
- rate_limit.primary_window: 周限额
|
||||
- code_review_rate_limit.primary_window: 代码审查周限额
|
||||
|
||||
Team/Plus/Enterprise 账号:
|
||||
- rate_limit.primary_window: 5H 限额
|
||||
- rate_limit.secondary_window: 周限额
|
||||
- code_review_rate_limit.primary_window: 代码审查周限额
|
||||
"""
|
||||
if data is None:
|
||||
return None
|
||||
@@ -261,18 +259,6 @@ def parse_codex_wham_usage_response(data: dict[str, Any]) -> dict[str, Any] | No
|
||||
target_prefix="primary",
|
||||
)
|
||||
|
||||
# 解析 code_review_rate_limit (代码审查限额)
|
||||
code_review_limit = _as_dict(data.get("code_review_rate_limit"), "code_review_rate_limit")
|
||||
code_review_primary = _as_dict(
|
||||
code_review_limit.get("primary_window"), "code_review_rate_limit.primary_window"
|
||||
)
|
||||
_write_window(
|
||||
result,
|
||||
source=code_review_primary,
|
||||
source_field="code_review_rate_limit.primary_window",
|
||||
target_prefix="code_review",
|
||||
)
|
||||
|
||||
# 解析 credits
|
||||
credits = _as_dict(data.get("credits"), "credits")
|
||||
has_credits = credits.get("has_credits")
|
||||
@@ -333,16 +319,6 @@ def parse_codex_usage_headers(headers: Mapping[str, Any] | None) -> dict[str, An
|
||||
window_minutes_key="x-codex-secondary-window-minutes",
|
||||
source_field="headers.secondary_window",
|
||||
)
|
||||
# 兼容未来可能出现的 code review header(当前反代可缺失)
|
||||
code_review_primary = _read_header_window(
|
||||
headers=normalized_headers,
|
||||
used_percent_key="x-codex-code-review-primary-used-percent",
|
||||
reset_seconds_key="x-codex-code-review-primary-reset-after-seconds",
|
||||
reset_at_key="x-codex-code-review-primary-reset-at",
|
||||
window_minutes_key="x-codex-code-review-primary-window-minutes",
|
||||
source_field="headers.code_review.primary_window",
|
||||
)
|
||||
|
||||
# 与 wham/usage 解析保持一致:
|
||||
# - metadata.primary_* 统一表示周限额
|
||||
# - metadata.secondary_* 统一表示 5H 限额
|
||||
@@ -368,13 +344,6 @@ def parse_codex_usage_headers(headers: Mapping[str, Any] | None) -> dict[str, An
|
||||
target_prefix="primary",
|
||||
)
|
||||
|
||||
_write_window(
|
||||
result,
|
||||
source=code_review_primary,
|
||||
source_field="headers.code_review.primary_window",
|
||||
target_prefix="code_review",
|
||||
)
|
||||
|
||||
# 当前窗口挤占占比(有值才记录)
|
||||
primary_over_secondary_limit = _coerce_optional_float(
|
||||
normalized_headers.get("x-codex-primary-over-secondary-limit-percent"),
|
||||
|
||||
@@ -33,7 +33,7 @@ def is_key_quota_exhausted(
|
||||
|
||||
Requirements:
|
||||
- Kiro: account-level quota. When remaining == 0, skip this key; allow again when remaining > 0.
|
||||
- Codex: only consider weekly quota + 5H quota (ignore code review quota).
|
||||
- Codex: only consider weekly quota + 5H quota.
|
||||
If either remaining is 0%, skip this key.
|
||||
- Antigravity: quota is per-model; do not disable the account.
|
||||
When the requested model's quota is 0%, skip this key.
|
||||
|
||||
Reference in New Issue
Block a user