完善 Antigravity 配额展示与 CI 断言

This commit is contained in:
MMEXA
2026-07-08 22:34:29 +08:00
parent 4866509938
commit c7186e1720
6 changed files with 111 additions and 19 deletions
@@ -2,6 +2,7 @@ import { describe, expect, it } from 'vitest'
import {
compareAntigravityQuotaItems,
dedupeAntigravityQuotaItemsByLabel,
resolveAntigravityQuotaLabel,
} from '@/features/providers/utils/antigravityQuota'
@@ -120,14 +121,55 @@ describe('antigravityQuota', () => {
].sort(compareAntigravityQuotaItems)
expect(items.map(item => item.model)).toEqual([
'claude-opus-4-6-thinking',
'gemini-pro-agent',
'gemini-3-flash-agent',
'gemini-3.5-flash-low',
'gemini-3.5-flash-extra-low',
'claude-opus-4-6-thinking',
'gemini-2.5-flash-lite',
'tab_flash_lite_preview',
'chat_20706',
])
})
it('deduplicates display labels while keeping the current preferred quota bucket', () => {
const items = dedupeAntigravityQuotaItemsByLabel([
{
model: 'gemini-3.1-pro-high',
label: 'Gemini 3.1 Pro (High)',
remainingPercent: 95,
resetSeconds: null,
},
{
model: 'gemini-pro-agent',
label: 'Gemini 3.1 Pro (High)',
remainingPercent: 40,
resetSeconds: null,
},
{
model: 'claude-sonnet-4-6-thinking',
label: 'Claude Sonnet 4.6 (Thinking)',
remainingPercent: 95,
resetSeconds: null,
},
{
model: 'claude-sonnet-4-6',
label: 'Claude Sonnet 4.6 (Thinking)',
remainingPercent: 40,
resetSeconds: null,
},
{
model: 'gemini-3-flash-agent',
label: 'Gemini 3.5 Flash (High)',
remainingPercent: 80,
resetSeconds: null,
},
])
expect(items.map(item => item.model)).toEqual([
'claude-sonnet-4-6',
'gemini-pro-agent',
'gemini-3-flash-agent',
])
})
})
@@ -29,15 +29,15 @@ const ANTIGRAVITY_MODEL_LABELS: Record<string, string> = {
}
const ANTIGRAVITY_MODEL_PRIORITY: Record<string, number> = {
'gemini-pro-agent': 10,
'gemini-3.1-pro-high': 10,
'gemini-3.1-pro-low': 20,
'gemini-3-flash-agent': 30,
'gemini-3.5-flash-low': 40,
'gemini-3.5-flash-extra-low': 50,
'claude-opus-4-6-thinking': 60,
'claude-sonnet-4-6': 70,
'claude-sonnet-4-6-thinking': 70,
'claude-opus-4-6-thinking': 10,
'claude-sonnet-4-6': 20,
'claude-sonnet-4-6-thinking': 25,
'gemini-pro-agent': 30,
'gemini-3.1-pro-high': 35,
'gemini-3.1-pro-low': 40,
'gemini-3-flash-agent': 50,
'gemini-3.5-flash-low': 60,
'gemini-3.5-flash-extra-low': 70,
'gemini-3.1-flash-image': 80,
'gemini-3.1-flash-lite': 90,
'gemini-3-flash': 180,
@@ -78,7 +78,7 @@ function getAntigravityModelPriority(model: string): number {
const normalizedModel = model.trim()
const explicit = ANTIGRAVITY_MODEL_PRIORITY[normalizedModel]
if (explicit !== undefined) return explicit
if (normalizedModel.startsWith('claude-')) return 90
if (normalizedModel.startsWith('claude-')) return 30
if (normalizedModel.startsWith('gemini-3.')) return 200
if (normalizedModel.startsWith('gemini-2.')) return 390
if (normalizedModel.startsWith('gemini-')) return 490
@@ -100,3 +100,18 @@ export function compareAntigravityQuotaItems<T extends AntigravityQuotaSortableI
|| a.label.localeCompare(b.label)
|| a.model.localeCompare(b.model)
}
export function dedupeAntigravityQuotaItemsByLabel<T extends AntigravityQuotaSortableItem>(
items: T[],
): T[] {
const selectedByLabel = new Map<string, T>()
for (const item of items) {
const label = item.label.trim()
if (!label) continue
const selected = selectedByLabel.get(label)
if (!selected || compareAntigravityQuotaItems(item, selected) < 0) {
selectedByLabel.set(label, item)
}
}
return Array.from(selectedByLabel.values()).sort(compareAntigravityQuotaItems)
}