diff --git a/src/renderer/src/aiCore/clients/openai/OpenAIResponseAPIClient.ts b/src/renderer/src/aiCore/clients/openai/OpenAIResponseAPIClient.ts index a6c49a5cf8..8994b7b2f5 100644 --- a/src/renderer/src/aiCore/clients/openai/OpenAIResponseAPIClient.ts +++ b/src/renderer/src/aiCore/clients/openai/OpenAIResponseAPIClient.ts @@ -386,10 +386,6 @@ export class OpenAIResponseAPIClient extends OpenAIBaseClient< }) } - const toolChoices: OpenAI.Responses.ToolChoiceTypes = { - type: 'web_search_preview' - } - tools = tools.concat(extraTools) const commonParams = { model: model.id, @@ -402,7 +398,6 @@ export class OpenAIResponseAPIClient extends OpenAIBaseClient< max_output_tokens: maxTokens, stream: streamOutput, tools: !isEmpty(tools) ? tools : undefined, - tool_choice: enableWebSearch ? toolChoices : undefined, service_tier: this.getServiceTier(model), ...(this.getReasoningEffort(assistant, model) as OpenAI.Reasoning), ...this.getCustomParameters(assistant) diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 18d24d9ba6..3bb9d099fa 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -273,7 +273,7 @@ export function isFunctionCallingModel(model: Model): boolean { return ['deepseek-v3-tool', 'deepseek-v3-0324', 'qwq-32b', 'qwen2.5-72b-instruct'].includes(model.id) } - if (model.provider === 'doubao') { + if (model.provider === 'doubao' || model.id.includes('doubao')) { return FUNCTION_CALLING_REGEX.test(model.id) || FUNCTION_CALLING_REGEX.test(model.name) } @@ -2327,7 +2327,7 @@ export function isEmbeddingModel(model: Model): boolean { return false } - if (model.provider === 'doubao') { + if (model.provider === 'doubao' || model.id.includes('doubao')) { return EMBEDDING_REGEX.test(model.name) } @@ -2351,7 +2351,7 @@ export function isVisionModel(model: Model): boolean { // return false // } - if (model.provider === 'doubao') { + if (model.provider === 'doubao' || model.id.includes('doubao')) { return VISION_REGEX.test(model.name) || VISION_REGEX.test(model.id) || model.type?.includes('vision') || false } @@ -2422,7 +2422,9 @@ export function isOpenAIWebSearchModel(model: Model): boolean { model.id.includes('gpt-4o-search-preview') || model.id.includes('gpt-4o-mini-search-preview') || (model.id.includes('gpt-4.1') && !model.id.includes('gpt-4.1-nano')) || - (model.id.includes('gpt-4o') && !model.id.includes('gpt-4o-image')) + (model.id.includes('gpt-4o') && !model.id.includes('gpt-4o-image')) || + model.id.includes('o3') || + model.id.includes('o4') ) } @@ -2555,8 +2557,9 @@ export function isReasoningModel(model?: Model): boolean { return false } - if (model.provider === 'doubao') { + if (model.provider === 'doubao' || model.id.includes('doubao')) { return ( + REASONING_REGEX.test(model.id) || REASONING_REGEX.test(model.name) || model.type?.includes('reasoning') || isSupportedThinkingTokenDoubaoModel(model) ||