feat: replace gemini-3-pro-image with gemini-3.1-flash-image
- Add migration 060 to update model_mapping for all antigravity accounts - Remove gemini-3-pro-image and gemini-3-pro-image-preview mappings - Add gemini-3.1-flash-image and gemini-3.1-flash-image-preview mappings - Update frontend usage window to show GImage for new model - Update isImageGenerationModel to support new model
This commit is contained in:
@@ -92,16 +92,18 @@ var DefaultAntigravityModelMapping = map[string]string{
|
|||||||
"gemini-3-flash": "gemini-3-flash",
|
"gemini-3-flash": "gemini-3-flash",
|
||||||
"gemini-3-pro-high": "gemini-3-pro-high",
|
"gemini-3-pro-high": "gemini-3-pro-high",
|
||||||
"gemini-3-pro-low": "gemini-3-pro-low",
|
"gemini-3-pro-low": "gemini-3-pro-low",
|
||||||
"gemini-3-pro-image": "gemini-3-pro-image",
|
|
||||||
// Gemini 3 preview 映射
|
// Gemini 3 preview 映射
|
||||||
"gemini-3-flash-preview": "gemini-3-flash",
|
"gemini-3-flash-preview": "gemini-3-flash",
|
||||||
"gemini-3-pro-preview": "gemini-3-pro-high",
|
"gemini-3-pro-preview": "gemini-3-pro-high",
|
||||||
"gemini-3-pro-image-preview": "gemini-3-pro-image",
|
|
||||||
// Gemini 3.1 白名单
|
// Gemini 3.1 白名单
|
||||||
"gemini-3.1-pro-high": "gemini-3.1-pro-high",
|
"gemini-3.1-pro-high": "gemini-3.1-pro-high",
|
||||||
"gemini-3.1-pro-low": "gemini-3.1-pro-low",
|
"gemini-3.1-pro-low": "gemini-3.1-pro-low",
|
||||||
// Gemini 3.1 preview 映射
|
// Gemini 3.1 preview 映射
|
||||||
"gemini-3.1-pro-preview": "gemini-3.1-pro-high",
|
"gemini-3.1-pro-preview": "gemini-3.1-pro-high",
|
||||||
|
// Gemini 3.1 image 白名单
|
||||||
|
"gemini-3.1-flash-image": "gemini-3.1-flash-image",
|
||||||
|
// Gemini 3.1 image preview 映射
|
||||||
|
"gemini-3.1-flash-image-preview": "gemini-3.1-flash-image",
|
||||||
// 其他官方模型
|
// 其他官方模型
|
||||||
"gpt-oss-120b-medium": "gpt-oss-120b-medium",
|
"gpt-oss-120b-medium": "gpt-oss-120b-medium",
|
||||||
"tab_flash_lite_preview": "tab_flash_lite_preview",
|
"tab_flash_lite_preview": "tab_flash_lite_preview",
|
||||||
|
|||||||
@@ -3757,14 +3757,17 @@ func (s *AntigravityGatewayService) extractImageSize(body []byte) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// isImageGenerationModel 判断模型是否为图片生成模型
|
// isImageGenerationModel 判断模型是否为图片生成模型
|
||||||
// 支持的模型:gemini-3-pro-image, gemini-3-pro-image-preview, gemini-2.5-flash-image 等
|
// 支持的模型:gemini-3.1-flash-image, gemini-3-pro-image, gemini-2.5-flash-image 等
|
||||||
func isImageGenerationModel(model string) bool {
|
func isImageGenerationModel(model string) bool {
|
||||||
modelLower := strings.ToLower(model)
|
modelLower := strings.ToLower(model)
|
||||||
// 移除 models/ 前缀
|
// 移除 models/ 前缀
|
||||||
modelLower = strings.TrimPrefix(modelLower, "models/")
|
modelLower = strings.TrimPrefix(modelLower, "models/")
|
||||||
|
|
||||||
// 精确匹配或前缀匹配
|
// 精确匹配或前缀匹配
|
||||||
return modelLower == "gemini-3-pro-image" ||
|
return modelLower == "gemini-3.1-flash-image" ||
|
||||||
|
modelLower == "gemini-3.1-flash-image-preview" ||
|
||||||
|
strings.HasPrefix(modelLower, "gemini-3.1-flash-image-") ||
|
||||||
|
modelLower == "gemini-3-pro-image" ||
|
||||||
modelLower == "gemini-3-pro-image-preview" ||
|
modelLower == "gemini-3-pro-image-preview" ||
|
||||||
strings.HasPrefix(modelLower, "gemini-3-pro-image-") ||
|
strings.HasPrefix(modelLower, "gemini-3-pro-image-") ||
|
||||||
modelLower == "gemini-2.5-flash-image" ||
|
modelLower == "gemini-2.5-flash-image" ||
|
||||||
|
|||||||
@@ -470,7 +470,7 @@ type ForwardResult struct {
|
|||||||
FirstTokenMs *int // 首字时间(流式请求)
|
FirstTokenMs *int // 首字时间(流式请求)
|
||||||
ClientDisconnect bool // 客户端是否在流式传输过程中断开
|
ClientDisconnect bool // 客户端是否在流式传输过程中断开
|
||||||
|
|
||||||
// 图片生成计费字段(仅 gemini-3-pro-image 使用)
|
// 图片生成计费字段(图片生成模型使用)
|
||||||
ImageCount int // 生成的图片数量
|
ImageCount int // 生成的图片数量
|
||||||
ImageSize string // 图片尺寸 "1K", "2K", "4K"
|
ImageSize string // 图片尺寸 "1K", "2K", "4K"
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
-- Add gemini-3.1-flash-image and gemini-3.1-flash-image-preview to model_mapping
|
||||||
|
--
|
||||||
|
-- Background:
|
||||||
|
-- Antigravity now supports gemini-3.1-flash-image as the latest image generation model,
|
||||||
|
-- replacing the previous gemini-3-pro-image.
|
||||||
|
--
|
||||||
|
-- Strategy:
|
||||||
|
-- Directly overwrite the entire model_mapping with updated mappings
|
||||||
|
-- This ensures consistency with DefaultAntigravityModelMapping in constants.go
|
||||||
|
|
||||||
|
UPDATE accounts
|
||||||
|
SET credentials = jsonb_set(
|
||||||
|
credentials,
|
||||||
|
'{model_mapping}',
|
||||||
|
'{
|
||||||
|
"claude-opus-4-6-thinking": "claude-opus-4-6-thinking",
|
||||||
|
"claude-opus-4-6": "claude-opus-4-6-thinking",
|
||||||
|
"claude-opus-4-5-thinking": "claude-opus-4-6-thinking",
|
||||||
|
"claude-opus-4-5-20251101": "claude-opus-4-6-thinking",
|
||||||
|
"claude-sonnet-4-6": "claude-sonnet-4-6",
|
||||||
|
"claude-sonnet-4-5": "claude-sonnet-4-5",
|
||||||
|
"claude-sonnet-4-5-thinking": "claude-sonnet-4-5-thinking",
|
||||||
|
"claude-sonnet-4-5-20250929": "claude-sonnet-4-5",
|
||||||
|
"claude-haiku-4-5": "claude-sonnet-4-5",
|
||||||
|
"claude-haiku-4-5-20251001": "claude-sonnet-4-5",
|
||||||
|
"gemini-2.5-flash": "gemini-2.5-flash",
|
||||||
|
"gemini-2.5-flash-lite": "gemini-2.5-flash-lite",
|
||||||
|
"gemini-2.5-flash-thinking": "gemini-2.5-flash-thinking",
|
||||||
|
"gemini-2.5-pro": "gemini-2.5-pro",
|
||||||
|
"gemini-3-flash": "gemini-3-flash",
|
||||||
|
"gemini-3-pro-high": "gemini-3-pro-high",
|
||||||
|
"gemini-3-pro-low": "gemini-3-pro-low",
|
||||||
|
"gemini-3-flash-preview": "gemini-3-flash",
|
||||||
|
"gemini-3-pro-preview": "gemini-3-pro-high",
|
||||||
|
"gemini-3.1-pro-high": "gemini-3.1-pro-high",
|
||||||
|
"gemini-3.1-pro-low": "gemini-3.1-pro-low",
|
||||||
|
"gemini-3.1-pro-preview": "gemini-3.1-pro-high",
|
||||||
|
"gemini-3.1-flash-image": "gemini-3.1-flash-image",
|
||||||
|
"gemini-3.1-flash-image-preview": "gemini-3.1-flash-image",
|
||||||
|
"gpt-oss-120b-medium": "gpt-oss-120b-medium",
|
||||||
|
"tab_flash_lite_preview": "tab_flash_lite_preview"
|
||||||
|
}'::jsonb
|
||||||
|
)
|
||||||
|
WHERE platform = 'antigravity'
|
||||||
|
AND deleted_at IS NULL
|
||||||
|
AND credentials->'model_mapping' IS NOT NULL;
|
||||||
@@ -181,6 +181,7 @@ const formatScopeName = (scope: string): string => {
|
|||||||
'gemini-3.1-pro-high': 'G3PH',
|
'gemini-3.1-pro-high': 'G3PH',
|
||||||
'gemini-3.1-pro-low': 'G3PL',
|
'gemini-3.1-pro-low': 'G3PL',
|
||||||
'gemini-3-pro-image': 'G3PI',
|
'gemini-3-pro-image': 'G3PI',
|
||||||
|
'gemini-3.1-flash-image': 'GImage',
|
||||||
// 其他
|
// 其他
|
||||||
'gpt-oss-120b-medium': 'GPT120',
|
'gpt-oss-120b-medium': 'GPT120',
|
||||||
'tab_flash_lite_preview': 'TabFL',
|
'tab_flash_lite_preview': 'TabFL',
|
||||||
|
|||||||
@@ -397,8 +397,8 @@ const antigravity3ProUsageFromAPI = computed(() =>
|
|||||||
// Gemini 3 Flash from API
|
// Gemini 3 Flash from API
|
||||||
const antigravity3FlashUsageFromAPI = computed(() => getAntigravityUsageFromAPI(['gemini-3-flash']))
|
const antigravity3FlashUsageFromAPI = computed(() => getAntigravityUsageFromAPI(['gemini-3-flash']))
|
||||||
|
|
||||||
// Gemini 3 Image from API
|
// Gemini Image from API
|
||||||
const antigravity3ImageUsageFromAPI = computed(() => getAntigravityUsageFromAPI(['gemini-3-pro-image']))
|
const antigravity3ImageUsageFromAPI = computed(() => getAntigravityUsageFromAPI(['gemini-3.1-flash-image']))
|
||||||
|
|
||||||
// Claude from API (all Claude model variants)
|
// Claude from API (all Claude model variants)
|
||||||
const antigravityClaudeUsageFromAPI = computed(() =>
|
const antigravityClaudeUsageFromAPI = computed(() =>
|
||||||
|
|||||||
@@ -864,8 +864,8 @@ function generateOpenCodeConfig(platform: string, baseUrl: string, apiKey: strin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'gemini-3-pro-image': {
|
'gemini-3.1-flash-image': {
|
||||||
name: 'Gemini 3 Pro (Image)',
|
name: 'Gemini 3.1 Flash Image',
|
||||||
limit: {
|
limit: {
|
||||||
context: 1048576,
|
context: 1048576,
|
||||||
output: 65536
|
output: 65536
|
||||||
|
|||||||
@@ -91,10 +91,10 @@ const antigravityModels = [
|
|||||||
'gemini-3-flash',
|
'gemini-3-flash',
|
||||||
'gemini-3-pro-high',
|
'gemini-3-pro-high',
|
||||||
'gemini-3-pro-low',
|
'gemini-3-pro-low',
|
||||||
'gemini-3-pro-image',
|
|
||||||
// Gemini 3.1 系列
|
// Gemini 3.1 系列
|
||||||
'gemini-3.1-pro-high',
|
'gemini-3.1-pro-high',
|
||||||
'gemini-3.1-pro-low',
|
'gemini-3.1-pro-low',
|
||||||
|
'gemini-3.1-flash-image',
|
||||||
// 其他
|
// 其他
|
||||||
'gpt-oss-120b-medium',
|
'gpt-oss-120b-medium',
|
||||||
'tab_flash_lite_preview'
|
'tab_flash_lite_preview'
|
||||||
|
|||||||
@@ -1133,7 +1133,7 @@ export default {
|
|||||||
},
|
},
|
||||||
imagePricing: {
|
imagePricing: {
|
||||||
title: 'Image Generation Pricing',
|
title: 'Image Generation Pricing',
|
||||||
description: 'Configure pricing for gemini-3-pro-image model. Leave empty to use default prices.'
|
description: 'Configure pricing for image generation models. Leave empty to use default prices.'
|
||||||
},
|
},
|
||||||
soraPricing: {
|
soraPricing: {
|
||||||
title: 'Sora Per-Request Pricing',
|
title: 'Sora Per-Request Pricing',
|
||||||
@@ -2047,7 +2047,7 @@ export default {
|
|||||||
geminiFlashDaily: 'Flash',
|
geminiFlashDaily: 'Flash',
|
||||||
gemini3Pro: 'G3P',
|
gemini3Pro: 'G3P',
|
||||||
gemini3Flash: 'G3F',
|
gemini3Flash: 'G3F',
|
||||||
gemini3Image: 'G3I',
|
gemini3Image: 'GImage',
|
||||||
claude: 'Claude'
|
claude: 'Claude'
|
||||||
},
|
},
|
||||||
tier: {
|
tier: {
|
||||||
|
|||||||
@@ -1220,7 +1220,7 @@ export default {
|
|||||||
},
|
},
|
||||||
imagePricing: {
|
imagePricing: {
|
||||||
title: '图片生成计费',
|
title: '图片生成计费',
|
||||||
description: '配置 gemini-3-pro-image 模型的图片生成价格,留空则使用默认价格'
|
description: '配置图片生成模型的图片生成价格,留空则使用默认价格'
|
||||||
},
|
},
|
||||||
soraPricing: {
|
soraPricing: {
|
||||||
title: 'Sora 按次计费',
|
title: 'Sora 按次计费',
|
||||||
@@ -1582,7 +1582,7 @@ export default {
|
|||||||
geminiFlashDaily: 'Flash',
|
geminiFlashDaily: 'Flash',
|
||||||
gemini3Pro: 'G3P',
|
gemini3Pro: 'G3P',
|
||||||
gemini3Flash: 'G3F',
|
gemini3Flash: 'G3F',
|
||||||
gemini3Image: 'G3I',
|
gemini3Image: 'GImage',
|
||||||
claude: 'Claude'
|
claude: 'Claude'
|
||||||
},
|
},
|
||||||
tier: {
|
tier: {
|
||||||
|
|||||||
Reference in New Issue
Block a user