diff --git a/src/renderer/src/aiCore/clients/gemini/GeminiAPIClient.ts b/src/renderer/src/aiCore/clients/gemini/GeminiAPIClient.ts index 3255b8cf86..2b1e2c4d31 100644 --- a/src/renderer/src/aiCore/clients/gemini/GeminiAPIClient.ts +++ b/src/renderer/src/aiCore/clients/gemini/GeminiAPIClient.ts @@ -416,8 +416,9 @@ export class GeminiAPIClient extends BaseApiClient< } } - const { max } = findTokenLimit(model.id) || { max: 0 } - const budget = Math.floor(max * effortRatio) + const { min, max } = findTokenLimit(model.id) || { min: 0, max: 0 } + // 计算 budgetTokens,确保不低于 min + const budget = Math.floor((max - min) * effortRatio + min) return { thinkingConfig: { diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 173753f8ed..4a842c59ca 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -2289,6 +2289,8 @@ export const TEXT_TO_IMAGES_MODELS_SUPPORT_IMAGE_ENHANCEMENT = [ ] export const SUPPORTED_DISABLE_GENERATION_MODELS = [ + 'gemini-2.0-flash-exp-image-generation', + 'gemini-2.0-flash-preview-image-generation', 'gemini-2.0-flash-exp', 'gpt-4o', 'gpt-4o-mini', @@ -2308,24 +2310,7 @@ export const GENERATE_IMAGE_MODELS = [ ...SUPPORTED_DISABLE_GENERATION_MODELS ] -export const GEMINI_SEARCH_MODELS = [ - 'gemini-2.0-flash', - 'gemini-2.0-flash-lite', - 'gemini-2.0-flash-exp', - 'gemini-2.0-flash-001', - 'gemini-2.5-pro', - 'gemini-2.0-pro-exp-02-05', - 'gemini-2.0-pro-exp', - 'gemini-2.5-pro-exp', - 'gemini-2.5-pro-exp-03-25', - 'gemini-2.5-pro-preview', - 'gemini-2.5-pro-preview-03-25', - 'gemini-2.5-pro-preview-05-06', - 'gemini-2.5-flash-preview', - 'gemini-2.5-flash-preview-04-17', - 'gemini-2.5-flash-preview-05-20', - 'gemini-2.5-flash-lite-preview-06-17' -] +export const GEMINI_SEARCH_REGEX = new RegExp('gemini-2\\..*', 'i') export const OPENAI_NO_SUPPORT_DEV_ROLE_MODELS = ['o1-preview', 'o1-mini'] @@ -2658,13 +2643,13 @@ export function isWebSearchModel(model: Model): boolean { } if (provider?.type === 'openai') { - if (GEMINI_SEARCH_MODELS.includes(baseName) || isOpenAIWebSearchModel(model)) { + if (GEMINI_SEARCH_REGEX.test(baseName) || isOpenAIWebSearchModel(model)) { return true } } if (provider.id === 'gemini' || provider?.type === 'gemini') { - return GEMINI_SEARCH_MODELS.includes(baseName) + return GEMINI_SEARCH_REGEX.test(baseName) } if (provider.id === 'hunyuan') { @@ -2841,6 +2826,7 @@ export function groupQwenModels(models: Model[]): Record { export const THINKING_TOKEN_MAP: Record = { // Gemini models + 'gemini-2\\.5-flash-lite.*$': { min: 512, max: 24576 }, 'gemini-.*-flash.*$': { min: 0, max: 24576 }, 'gemini-.*-pro.*$': { min: 128, max: 32768 },