feat(gemini): add thinking level mapping for Gemini 3 models

Implement mapping between reasoning effort options and Gemini's thinking levels. Enable thinking config for Gemini 3 models to support advanced reasoning features.
This commit is contained in:
icarus 2025-12-18 14:08:48 +08:00
parent d3aa000457
commit beafebedb9
No known key found for this signature in database
GPG Key ID: D4AF089AAEC25D18

View File

@ -34,7 +34,7 @@ import {
} from '@renderer/config/models' } from '@renderer/config/models'
import { getStoreSetting } from '@renderer/hooks/useSettings' import { getStoreSetting } from '@renderer/hooks/useSettings'
import { getAssistantSettings, getProviderByModel } from '@renderer/services/AssistantService' import { getAssistantSettings, getProviderByModel } from '@renderer/services/AssistantService'
import type { Assistant, Model } from '@renderer/types' import type { Assistant, Model, ReasoningEffortOption } from '@renderer/types'
import { EFFORT_RATIO, isSystemProvider, SystemProviderIds } from '@renderer/types' import { EFFORT_RATIO, isSystemProvider, SystemProviderIds } from '@renderer/types'
import type { OpenAIReasoningSummary } from '@renderer/types/aiCoreTypes' import type { OpenAIReasoningSummary } from '@renderer/types/aiCoreTypes'
import type { ReasoningEffortOptionalParams } from '@renderer/types/sdk' import type { ReasoningEffortOptionalParams } from '@renderer/types/sdk'
@ -533,20 +533,25 @@ export function getAnthropicReasoningParams(
return {} return {}
} }
// type GoogleThinkingLevel = NonNullable<GoogleGenerativeAIProviderOptions['thinkingConfig']>['thinkingLevel'] type GoogleThinkingLevel = NonNullable<GoogleGenerativeAIProviderOptions['thinkingConfig']>['thinkingLevel']
// function mapToGeminiThinkingLevel(reasoningEffort: ReasoningEffortOption): GoogelThinkingLevel { function mapToGeminiThinkingLevel(reasoningEffort: ReasoningEffortOption): GoogleThinkingLevel {
// switch (reasoningEffort) { switch (reasoningEffort) {
// case 'low': case 'default':
// return 'low' return undefined
// case 'medium': case 'minimal':
// return 'medium' return 'minimal'
// case 'high': case 'low':
// return 'high' return 'low'
// default: case 'medium':
// return 'medium' return 'medium'
// } case 'high':
// } return 'high'
default:
logger.warn('Unknown thinking level for Gemini. Fallback to medium instead.', { reasoningEffort })
return 'medium'
}
}
/** /**
* Gemini * Gemini
@ -581,13 +586,14 @@ export function getGeminiReasoningParams(
// TODO: 很多中转还不支持 // TODO: 很多中转还不支持
// https://ai.google.dev/gemini-api/docs/gemini-3?thinking=high#new_api_features_in_gemini_3 // https://ai.google.dev/gemini-api/docs/gemini-3?thinking=high#new_api_features_in_gemini_3
// if (isGemini3ThinkingTokenModel(model)) { if (isGemini3ThinkingTokenModel(model)) {
// return { return {
// thinkingConfig: { thinkingConfig: {
// thinkingLevel: mapToGeminiThinkingLevel(reasoningEffort) includeThoughts: true,
// } thinkingLevel: mapToGeminiThinkingLevel(reasoningEffort)
// } }
// } }
}
const effortRatio = EFFORT_RATIO[reasoningEffort] const effortRatio = EFFORT_RATIO[reasoningEffort]