feat(config): add antigravity credits visual toggle

This commit is contained in:
Supra4E8C
2026-04-12 00:41:53 +08:00
Unverified
parent 62cc7cc92d
commit 5cbfbe8fea
8 changed files with 40 additions and 5 deletions
@@ -936,6 +936,15 @@ export function VisualConfigEditor({
disabled={disabled}
onChange={(quotaSwitchPreviewModel) => onChange({ quotaSwitchPreviewModel })}
/>
<ToggleRow
title={t('config_management.visual.sections.quota.antigravity_credits')}
description={t(
'config_management.visual.sections.quota.antigravity_credits_desc'
)}
checked={values.quotaAntigravityCredits}
disabled={disabled}
onChange={(quotaAntigravityCredits) => onChange({ quotaAntigravityCredits })}
/>
</SectionGrid>
</ConfigSection>
+13 -1
View File
@@ -647,6 +647,12 @@ function getNextDirtyFields(
nextValues.quotaSwitchPreviewModel === baselineValues.quotaSwitchPreviewModel
);
}
if (Object.prototype.hasOwnProperty.call(patch, 'quotaAntigravityCredits')) {
updateDirty(
'quotaAntigravityCredits',
nextValues.quotaAntigravityCredits === baselineValues.quotaAntigravityCredits
);
}
if (Object.prototype.hasOwnProperty.call(patch, 'routingStrategy')) {
updateDirty('routingStrategy', nextValues.routingStrategy === baselineValues.routingStrategy);
}
@@ -827,6 +833,7 @@ export function useVisualConfig() {
quotaSwitchProject: Boolean(quotaExceeded?.['switch-project'] ?? true),
quotaSwitchPreviewModel: Boolean(quotaExceeded?.['switch-preview-model'] ?? true),
quotaAntigravityCredits: Boolean(quotaExceeded?.['antigravity-credits'] ?? true),
routingStrategy: routing?.strategy === 'fill-first' ? 'fill-first' : 'round-robin',
@@ -929,11 +936,16 @@ export function useVisualConfig() {
if (
docHas(doc, ['quota-exceeded']) ||
!values.quotaSwitchProject ||
!values.quotaSwitchPreviewModel
!values.quotaSwitchPreviewModel ||
!values.quotaAntigravityCredits
) {
ensureMapInDoc(doc, ['quota-exceeded']);
doc.setIn(['quota-exceeded', 'switch-project'], values.quotaSwitchProject);
doc.setIn(['quota-exceeded', 'switch-preview-model'], values.quotaSwitchPreviewModel);
doc.setIn(
['quota-exceeded', 'antigravity-credits'],
values.quotaAntigravityCredits
);
deleteIfMapEmpty(doc, ['quota-exceeded']);
}
+3 -1
View File
@@ -1270,7 +1270,9 @@
"switch_project": "Switch Project",
"switch_project_desc": "Automatically switch to another project when quota is exceeded",
"switch_preview_model": "Switch to Preview Model",
"switch_preview_model_desc": "Switch to preview model version when quota is exceeded"
"switch_preview_model_desc": "Switch to preview model version when quota is exceeded",
"antigravity_credits": "Antigravity Credits Retry",
"antigravity_credits_desc": "Retry once with enabledCreditTypes=[\"GOOGLE_ONE_AI\"] when Antigravity returns quota_exhausted 429"
},
"streaming": {
"title": "Streaming Configuration",
+3 -1
View File
@@ -1269,7 +1269,9 @@
"switch_project": "Переключить проект",
"switch_project_desc": "Автоматически переходить на другой проект при превышении квоты",
"switch_preview_model": "Переключить на preview-модель",
"switch_preview_model_desc": "Переключаться на preview-версию модели при превышении квоты"
"switch_preview_model_desc": "Переключаться на preview-версию модели при превышении квоты",
"antigravity_credits": "Повтор Antigravity Credits",
"antigravity_credits_desc": "При ответе Antigravity quota_exhausted 429 повторять запрос один раз с enabledCreditTypes=[\"GOOGLE_ONE_AI\"]"
},
"streaming": {
"title": "Настройки стриминга",
+3 -1
View File
@@ -1270,7 +1270,9 @@
"switch_project": "切换项目",
"switch_project_desc": "配额耗尽时自动切换到其他项目",
"switch_preview_model": "切换预览模型",
"switch_preview_model_desc": "配额耗尽时切换到预览版本模型"
"switch_preview_model_desc": "配额耗尽时切换到预览版本模型",
"antigravity_credits": "Antigravity Credits 重试",
"antigravity_credits_desc": "Antigravity 返回 quota_exhausted 429 时,使用 enabledCreditTypes=[\"GOOGLE_ONE_AI\"] 重试一次"
},
"streaming": {
"title": "流式传输配置",
+6 -1
View File
@@ -366,7 +366,12 @@ export const normalizeConfigResponse = (raw: unknown): Config => {
if (isRecord(quota)) {
config.quotaExceeded = {
switchProject: normalizeBoolean(quota['switch-project'] ?? quota.switchProject),
switchPreviewModel: normalizeBoolean(quota['switch-preview-model'] ?? quota.switchPreviewModel)
switchPreviewModel: normalizeBoolean(
quota['switch-preview-model'] ?? quota.switchPreviewModel
),
antigravityCredits: normalizeBoolean(
quota['antigravity-credits'] ?? quota.antigravityCredits
)
};
}
+1
View File
@@ -9,6 +9,7 @@ import type { AmpcodeConfig } from './ampcode';
export interface QuotaExceededConfig {
switchProject?: boolean;
switchPreviewModel?: boolean;
antigravityCredits?: boolean;
}
export interface Config {
+2
View File
@@ -75,6 +75,7 @@ export type VisualConfigValues = {
maxRetryInterval: string;
quotaSwitchProject: boolean;
quotaSwitchPreviewModel: boolean;
quotaAntigravityCredits: boolean;
routingStrategy: 'round-robin' | 'fill-first';
wsAuth: boolean;
payloadDefaultRules: PayloadRule[];
@@ -114,6 +115,7 @@ export const DEFAULT_VISUAL_VALUES: VisualConfigValues = {
maxRetryInterval: '',
quotaSwitchProject: true,
quotaSwitchPreviewModel: true,
quotaAntigravityCredits: true,
routingStrategy: 'round-robin',
wsAuth: false,
payloadDefaultRules: [],