Skip to content

Commit b4f963d

Browse files
committed
fix: address provider capacity review feedback
1 parent e43fce7 commit b4f963d

15 files changed

Lines changed: 317 additions & 40 deletions

File tree

docs-site/src/content/docs/ja/guides/providers.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,25 @@ max input 922,000 で `*-pro` virtual ID は公開状態を維持し、wire で
2020

2121
組み込み `openai` が欠落または無効な場合、ダッシュボードの Accounts ピッカーと Codex Auth から復元できます。欠落行は正規プリセットから作成され、正規の無効行は保存済みのモードやモデル設定を置き換えずに再有効化され、非正規の `openai` 行にはその復元経路は出ません。
2222

23+
### プロバイダー概要のプール容量
24+
25+
Codex login を Pool モードで使うと、Providers の概要には任意の 1 アカウントではなく、
26+
プール全体の使用済み容量の推定値が表示されます。同じ行には現在の有効アカウントの
27+
生のクォータ使用率も表示されるため、プールの推定値と次のリクエストで使われる
28+
アカウントの状態を区別できます。
29+
30+
リセット情報がある場合は、次のリセット時刻と、その時点で回復するプール容量が表示されます。
31+
**対象範囲が不完全**という警告は、プランやクォータが不明、読み取りが古い、アカウントが
32+
一時停止中、または再認証が必要などの理由で、安全に推定へ含められないアカウントがあることを示します。
33+
34+
**期間別の対象範囲が一部不完全**という警告は、含まれるアカウントの一部が、表示中の
35+
クォータ期間のうち一部だけを報告したことを示します。概要では各期間を分けたまま、影響を受ける
36+
期間を個別に不完全と表示し、欠けた値をその期間の使用量として扱いません。
37+
38+
この推定値は表示専用です。アカウント選択、セッション affinity、自動切り替え、cooldown、
39+
その他のルーティング判断には影響しません。個別アカウントの状態とルーティング設定は
40+
[Codex Auth のアカウントプール](/ja/guides/web-dashboard/#codex-auth-and-account-pools)を参照してください。
41+
2342
出荷版 v1 config は marker 2 の単一オプション行に自動移行されます。オリジナルは
2443
`~/.opencodex/config.json.pre-openai-tiers-v2.bak` に一度保存され、次のコマンドで復元します:
2544
`cp ~/.opencodex/config.json.pre-openai-tiers-v2.bak ~/.opencodex/config.json`

docs-site/src/content/docs/ko/guides/providers.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,24 @@ max input 922,000이며 `*-pro` virtual id는 공개 상태에 유지되고 wire
2020

2121
내장 `openai` 제공자가 없거나 비활성화된 경우 대시보드 Accounts 선택기와 Codex Auth 페이지에서 복구할 수 있습니다. 없는 항목은 정규 프리셋으로 만들고, 비활성화된 정규 항목은 저장된 모드/모델 설정을 바꾸지 않고 다시 켜며, 비정규 `openai` 항목에는 그 복구 경로를 제공하지 않습니다.
2222

23+
### 프로바이더 개요의 풀 용량
24+
25+
Codex 로그인을 Pool 모드로 사용하면 Providers 개요에는 임의의 한 계정이 아니라 풀 전체의
26+
사용 용량 추정치가 표시됩니다. 같은 행에는 현재 유효 계정의 원본 quota 사용률도 표시되므로,
27+
풀 추정치와 다음 요청에서 사용할 계정의 상태를 구분할 수 있습니다.
28+
29+
리셋 정보가 있으면 다음 리셋 시각과 그때 회복되는 풀 용량을 표시합니다. **불완전한 범위**
30+
요금제나 quota를 알 수 없거나, 측정값이 오래되었거나, 계정이 일시 중지되었거나 재인증이 필요한
31+
등의 이유로 일부 계정을 안전하게 추정치에 포함하지 못했음을 뜻합니다.
32+
33+
**일부 기간의 범위가 불완전함**은 포함된 계정 중 일부가 표시된 quota 기간을 모두 보고하지
34+
않았음을 뜻합니다. 개요는 각 기간을 서로 분리한 채 영향을 받은 기간을 개별적으로 불완전하다고
35+
표시하며, 누락된 값을 해당 기간의 사용량으로 간주하지 않습니다.
36+
37+
이 추정치는 표시 전용입니다. 계정 선택, 세션 affinity, 자동 전환, cooldown 또는 다른 라우팅
38+
판단을 변경하지 않습니다. 개별 계정 상태와 라우팅 제어는
39+
[Codex Auth 계정 풀](/ko/guides/web-dashboard/#codex-auth-and-account-pools)을 참고하세요.
40+
2341
shipped v1 config는 marker 2의 단일 옵션 행으로 자동 이관됩니다. 원본은
2442
`~/.opencodex/config.json.pre-openai-tiers-v2.bak`에 한 번 보존되며 다음 명령으로 복원합니다:
2543
`cp ~/.opencodex/config.json.pre-openai-tiers-v2.bak ~/.opencodex/config.json`.

docs-site/src/content/docs/ru/guides/providers.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,27 @@ description: Все способы, которыми opencodex аутентиф
2525
канонические записи включаются без замены сохранённого режима и настроек моделей, а неканонические
2626
записи `openai` этот путь восстановления не получают.
2727

28+
### Ёмкость пула в обзоре провайдеров
29+
30+
Для входа Codex в режиме Pool обзор Providers показывает оценку использованной ёмкости всего пула,
31+
а не показатель произвольного аккаунта. В той же строке отображается исходный процент квоты текущего
32+
активного аккаунта, поэтому оценку пула можно отличить от состояния аккаунта, который будет использован
33+
для следующего запроса.
34+
35+
Когда доступны сведения о сбросе, обзор показывает время следующего сброса и ёмкость пула, которая
36+
восстановится в этот момент. **Неполное покрытие** означает, что некоторые аккаунты нельзя безопасно
37+
включить в оценку, например из-за неизвестного плана или квоты, устаревшего показания, приостановки
38+
аккаунта либо необходимости повторной аутентификации.
39+
40+
Предупреждение **о частичном покрытии окон** означает, что некоторые включённые аккаунты сообщили данные
41+
только для части показанных окон квоты. Обзор сохраняет окна раздельными, отмечает каждое затронутое
42+
окно как неполное и не считает отсутствующее значение использованием в этом окне.
43+
44+
Эта оценка предназначена только для отображения. Она не меняет выбор аккаунта, привязку сессии,
45+
автоматическое переключение, cooldown или другие решения маршрутизации. Состояние отдельных аккаунтов
46+
и настройки маршрутизации описаны в разделе
47+
[пула аккаунтов Codex Auth](/ru/guides/web-dashboard/#codex-auth-and-account-pools).
48+
2849
Поставляемые v1-конфигурации автоматически мигрируют на маркер 2 и одну строку с поддержкой опций.
2950
Исходная конфигурация один раз сохраняется в `~/.opencodex/config.json.pre-openai-tiers-v2.bak`;
3051
восстановить её можно командой

docs-site/src/content/docs/zh-cn/guides/providers.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,22 @@ bare `gpt-5.6-sol` 遵循 Providers 页面中的 Pool/Direct 选项,
1919

2020
若内置 `openai` 提供商缺失或已禁用,可在仪表盘 Accounts 选择器或 Codex Auth 页面恢复:缺失行会从规范预设创建,已禁用的规范行会在不替换已保存模式/模型设置的情况下重新启用,非规范的 `openai` 行不会提供该恢复路径。
2121

22+
### 提供商概览中的账户池容量
23+
24+
Codex 登录使用 Pool 模式时,Providers 概览显示整个账户池的已用容量估算,而不是任意一个
25+
账户的数值。同一行还会显示当前有效账户的原始配额使用率,便于区分账户池估算与下一次请求
26+
将使用的账户状态。
27+
28+
如果有重置信息,概览会显示下一次重置时间以及届时恢复的账户池容量。**覆盖不完整**表示某些
29+
账户无法安全计入估算,例如套餐或配额未知、读数过旧、账户已暂停或需要重新认证。
30+
31+
**部分窗口覆盖不完整**表示某些已计入账户只报告了部分显示的配额窗口。概览会保持各窗口相互
32+
独立,逐一标记受影响的窗口,并且不会把缺失值当作该窗口的使用量。
33+
34+
此估算仅用于显示,不会改变账户选择、会话关联、自动切换、cooldown 或任何其他路由决策。
35+
各账户状态和路由控制请参阅
36+
[Codex Auth 账户池](/zh-cn/guides/web-dashboard/#codex-auth-and-account-pools)
37+
2238
shipped v1 配置自动迁移到 marker 2 的单一选项行。原配置只保留一次到
2339
`~/.opencodex/config.json.pre-openai-tiers-v2.bak`;恢复命令:
2440
`cp ~/.opencodex/config.json.pre-openai-tiers-v2.bak ~/.opencodex/config.json`

gui/src/components/provider-workspace/ProviderOverviewDashboard.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -252,11 +252,11 @@ function ProviderCapacityQuota({ report, pending }: { report: ProviderQuotaRepor
252252
if (window.incomplete) incompleteCustomWindowLabels.add(window.label);
253253
}
254254
}
255-
const recoveryRows: Array<{ label: string; window: CapacityWindowView }> = showsAggregate && aggregation ? [
256-
...(aggregation.fiveHour ? [{ label: t("codexAuth.fiveHour"), window: aggregation.fiveHour }] : []),
257-
...(aggregation.weekly ? [{ label: t("codexAuth.weekly"), window: aggregation.weekly }] : []),
258-
...(aggregation.monthly ? [{ label: t("codexAuth.monthly"), window: aggregation.monthly }] : []),
259-
...(aggregation.customWindows ?? []).map(window => ({ label: window.label, window })),
255+
const recoveryRows: Array<{ key: number; label: string; window: CapacityWindowView }> = showsAggregate && aggregation ? [
256+
...(aggregation.fiveHour ? [{ key: 0, label: t("codexAuth.fiveHour"), window: aggregation.fiveHour }] : []),
257+
...(aggregation.weekly ? [{ key: 1, label: t("codexAuth.weekly"), window: aggregation.weekly }] : []),
258+
...(aggregation.monthly ? [{ key: 2, label: t("codexAuth.monthly"), window: aggregation.monthly }] : []),
259+
...(aggregation.customWindows ?? []).map((window, index) => ({ key: index + 3, label: window.label, window })),
260260
] : [];
261261
const formatPercent = (value: number) => new Intl.NumberFormat(locale, { maximumFractionDigits: 1 }).format(value);
262262
const formatRecoveryAt = (value: number) => new Intl.DateTimeFormat(locale, {
@@ -280,9 +280,9 @@ function ProviderCapacityQuota({ report, pending }: { report: ProviderQuotaRepor
280280
)}
281281
{aggregation && (
282282
<div className="pws-capacity-details">
283-
{recoveryRows.flatMap(({ label, window }) => (
283+
{recoveryRows.flatMap(({ key, label, window }) => (
284284
window.nextRecoveryAt !== undefined && window.nextRecoveryPercent !== undefined
285-
? [<div className="pws-capacity-recovery" key={label}>
285+
? [<div className="pws-capacity-recovery" key={key}>
286286
<span>{t("pws.capacity.nextRecovery")} · {label} · {formatRecoveryAt(window.nextRecoveryAt)}</span>
287287
<strong>{t("pws.capacity.recoveryShare", { percent: formatPercent(window.nextRecoveryPercent) })}</strong>
288288
</div>]

gui/src/components/provider-workspace/ProviderWorkspaceShell.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ export default function ProviderWorkspaceShell({
276276
writeSessionListCache(quotasCacheKey, next);
277277
})
278278
.catch(() => {
279+
if (cancelled) return;
279280
// Keep last-good only inside the same server freshness bound.
280281
setQuotaReports(prev => {
281282
const next = freshQuotaReportRecord(prev) ?? {};

gui/src/i18n/de.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1380,7 +1380,7 @@ export const de: Record<TKey, string> = {
13801380
"pws.dashboard.title": "Anbieterübersicht",
13811381
"pws.dashboard.subtitle": "Verwalten Sie alle Ihre Modellanbieter an einem Ort.",
13821382
"pws.dashboard.rateLimits": "RATE LIMITS",
1383-
"pws.capacity.estimate": "Konfiguriert gewichtete Pool-Schätzung",
1383+
"pws.capacity.estimate": "Pool-Schätzung anhand konfigurierter Gewichtungen",
13841384
"pws.capacity.currentAccount": "Aktuelles effektives Konto",
13851385
"pws.capacity.nextRecovery": "Nächste Kapazitätswiederherstellung",
13861386
"pws.capacity.recoveryShare": "+{percent} % Pool-Kapazität",

gui/src/i18n/ru.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,7 @@ export const ru: Record<TKey, string> = {
10421042
"pws.capacity.currentAccount": "Текущая активная учётная запись",
10431043
"pws.capacity.nextRecovery": "Следующее восстановление ёмкости",
10441044
"pws.capacity.recoveryShare": "+{percent}% ёмкости пула",
1045-
"pws.capacity.incomplete": "Неполное покрытие: исключено аккаунтов: {excluded}, неизвестных планов: {unknown}",
1045+
"pws.capacity.incomplete": "Неполное покрытие: исключено аккаунтов: {excluded}, в том числе с неизвестным планом: {unknown}",
10461046
"pws.capacity.partial": "Частичное покрытие окон: для {count} аккаунтов доступны не все показанные окна лимитов",
10471047
"pws.capacity.windowPartial": "Частично",
10481048
"pws.capacity.windowPartialA11y": "{window}: неполное покрытие аккаунтов",

gui/src/provider-workspace/report.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ export function capacityAggregationFromReport(report?: ProviderQuotaReportView):
104104
? row.currentAccount as Record<string, unknown>
105105
: null;
106106
const customWindows = Array.isArray(row.customWindows)
107-
? row.customWindows.flatMap(value => {
108-
if (!value || typeof value !== "object" || Array.isArray(value)) return [];
109-
const custom = value as Record<string, unknown>;
107+
? row.customWindows.flatMap(entry => {
108+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) return [];
109+
const custom = entry as Record<string, unknown>;
110110
const window = capacityWindow(custom);
111111
return typeof custom.label === "string" && window ? [{ label: custom.label, ...window }] : [];
112112
})

0 commit comments

Comments
 (0)