From ac159306928bdd5d9303980ccc7ecc98367ad09b Mon Sep 17 00:00:00 2001 From: MyPrototypeWhat Date: Wed, 2 Jul 2025 19:31:33 +0800 Subject: [PATCH] feat: enhance OpenAI model handling with utility function - Introduced `isOpenAIChatCompletionOnlyModel` utility function to determine if a model ID corresponds to OpenAI's chat completion-only models. - Updated `createBaseModel` function to utilize the new utility for improved handling of OpenAI provider responses in strict mode. - Refactored reasoning parameters in `getOpenAIReasoningParams` for consistency and clarity. --- packages/aiCore/src/core/models/ProviderCreator.ts | 3 ++- packages/aiCore/src/utils/model.ts | 12 ++++++++++++ src/renderer/src/aiCore/utils/reasoning.ts | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 packages/aiCore/src/utils/model.ts diff --git a/packages/aiCore/src/core/models/ProviderCreator.ts b/packages/aiCore/src/core/models/ProviderCreator.ts index 9a39214662..d17ce491c2 100644 --- a/packages/aiCore/src/core/models/ProviderCreator.ts +++ b/packages/aiCore/src/core/models/ProviderCreator.ts @@ -6,6 +6,7 @@ import type { ImageModelV1 } from '@ai-sdk/provider' import { type LanguageModelV1, LanguageModelV1Middleware, wrapLanguageModel } from 'ai' import { type ProviderId, type ProviderSettingsMap } from '../../types' +import { isOpenAIChatCompletionOnlyModel } from '../../utils/model' import { aiProviderRegistry, type ProviderConfig } from '../providers/registry' // 错误类型 @@ -69,7 +70,7 @@ export async function createBaseModel( let provider = creatorFunction(options) // 加一个特判 - if (providerConfig.id === 'openai' && options.compatibility === 'strict') { + if (providerConfig.id === 'openai' && !isOpenAIChatCompletionOnlyModel(modelId)) { provider = provider.responses } // 返回模型实例 diff --git a/packages/aiCore/src/utils/model.ts b/packages/aiCore/src/utils/model.ts new file mode 100644 index 0000000000..5ceaa27351 --- /dev/null +++ b/packages/aiCore/src/utils/model.ts @@ -0,0 +1,12 @@ +export function isOpenAIChatCompletionOnlyModel(modelId: string): boolean { + if (!modelId) { + return false + } + + return ( + modelId.includes('gpt-4o-search-preview') || + modelId.includes('gpt-4o-mini-search-preview') || + modelId.includes('o1-mini') || + modelId.includes('o1-preview') + ) +} diff --git a/src/renderer/src/aiCore/utils/reasoning.ts b/src/renderer/src/aiCore/utils/reasoning.ts index ef4e9b5ebc..74b237a722 100644 --- a/src/renderer/src/aiCore/utils/reasoning.ts +++ b/src/renderer/src/aiCore/utils/reasoning.ts @@ -180,7 +180,7 @@ export function getOpenAIReasoningParams(assistant: Assistant, model: Model): Re // OpenAI 推理参数 if (isSupportedReasoningEffortOpenAIModel(model)) { return { - reasoning_effort: reasoningEffort + reasoningEffort } }