mirror of
https://gitee.com/wanwujie/sub2api
synced 2026-04-05 16:00:21 +08:00
feat: prioritize new gemini image models in frontend
This commit is contained in:
@@ -260,6 +260,7 @@ const loadingModels = ref(false)
|
||||
let eventSource: EventSource | null = null
|
||||
const isSoraAccount = computed(() => props.account?.platform === 'sora')
|
||||
const generatedImages = ref<PreviewImage[]>([])
|
||||
const prioritizedGeminiModels = ['gemini-3.1-flash-image', 'gemini-2.5-flash-image', 'gemini-2.5-flash', 'gemini-2.5-pro', 'gemini-3-flash-preview', 'gemini-3-pro-preview', 'gemini-2.0-flash']
|
||||
const supportsGeminiImageTest = computed(() => {
|
||||
if (isSoraAccount.value) return false
|
||||
const modelID = selectedModelId.value.toLowerCase()
|
||||
@@ -268,6 +269,17 @@ const supportsGeminiImageTest = computed(() => {
|
||||
return props.account?.platform === 'gemini' || (props.account?.platform === 'antigravity' && props.account?.type === 'apikey')
|
||||
})
|
||||
|
||||
const sortTestModels = (models: ClaudeModel[]) => {
|
||||
const priorityMap = new Map(prioritizedGeminiModels.map((id, index) => [id, index]))
|
||||
|
||||
return [...models].sort((a, b) => {
|
||||
const aPriority = priorityMap.get(a.id) ?? Number.MAX_SAFE_INTEGER
|
||||
const bPriority = priorityMap.get(b.id) ?? Number.MAX_SAFE_INTEGER
|
||||
if (aPriority !== bPriority) return aPriority - bPriority
|
||||
return 0
|
||||
})
|
||||
}
|
||||
|
||||
// Load available models when modal opens
|
||||
watch(
|
||||
() => props.show,
|
||||
@@ -300,17 +312,14 @@ const loadAvailableModels = async () => {
|
||||
loadingModels.value = true
|
||||
selectedModelId.value = '' // Reset selection before loading
|
||||
try {
|
||||
availableModels.value = await adminAPI.accounts.getAvailableModels(props.account.id)
|
||||
const models = await adminAPI.accounts.getAvailableModels(props.account.id)
|
||||
availableModels.value = props.account.platform === 'gemini' || props.account.platform === 'antigravity'
|
||||
? sortTestModels(models)
|
||||
: models
|
||||
// Default selection by platform
|
||||
if (availableModels.value.length > 0) {
|
||||
if (props.account.platform === 'gemini') {
|
||||
const preferred =
|
||||
availableModels.value.find((m) => m.id === 'gemini-2.0-flash') ||
|
||||
availableModels.value.find((m) => m.id === 'gemini-2.5-flash') ||
|
||||
availableModels.value.find((m) => m.id === 'gemini-2.5-pro') ||
|
||||
availableModels.value.find((m) => m.id === 'gemini-3-flash-preview') ||
|
||||
availableModels.value.find((m) => m.id === 'gemini-3-pro-preview')
|
||||
selectedModelId.value = preferred?.id || availableModels.value[0].id
|
||||
selectedModelId.value = availableModels.value[0].id
|
||||
} else {
|
||||
// Try to select Sonnet as default, otherwise use first model
|
||||
const sonnetModel = availableModels.value.find((m) => m.id.includes('sonnet'))
|
||||
|
||||
@@ -89,7 +89,9 @@ function mountModal() {
|
||||
describe('AccountTestModal', () => {
|
||||
beforeEach(() => {
|
||||
getAvailableModels.mockResolvedValue([
|
||||
{ id: 'gemini-2.5-flash-image', display_name: 'Gemini 2.5 Flash Image' }
|
||||
{ id: 'gemini-2.0-flash', display_name: 'Gemini 2.0 Flash' },
|
||||
{ id: 'gemini-2.5-flash-image', display_name: 'Gemini 2.5 Flash Image' },
|
||||
{ id: 'gemini-3.1-flash-image', display_name: 'Gemini 3.1 Flash Image' }
|
||||
])
|
||||
copyToClipboard.mockReset()
|
||||
Object.defineProperty(globalThis, 'localStorage', {
|
||||
@@ -134,7 +136,7 @@ describe('AccountTestModal', () => {
|
||||
expect(global.fetch).toHaveBeenCalledTimes(1)
|
||||
const [, request] = (global.fetch as any).mock.calls[0]
|
||||
expect(JSON.parse(request.body)).toEqual({
|
||||
model_id: 'gemini-2.5-flash-image',
|
||||
model_id: 'gemini-3.1-flash-image',
|
||||
prompt: 'draw a tiny orange cat astronaut'
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user