From c7dcbdcb5b336c089a89f4b5bf86be4dc54a13a7 Mon Sep 17 00:00:00 2001 From: Phantom <59059173+EurFelux@users.noreply.github.com> Date: Thu, 21 Aug 2025 23:51:36 +0800 Subject: [PATCH] fix: gpt-oss should support temperature and topP (#9390) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 修复OpenAI推理模型温度控制判断逻辑 添加isOpenAIOpenWeightModel检查以排除开源权重模型 * fix(openai): 修正开发者角色设置条件逻辑 修改系统消息中开发者角色设置的条件判断,增加对OpenAIOpenWeightModel的检查 --- .../src/aiCore/clients/openai/OpenAIApiClient.ts | 13 +++++++------ .../clients/openai/OpenAIResponseAPIClient.ts | 13 +++++++------ src/renderer/src/config/models.ts | 11 ++++++++++- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/renderer/src/aiCore/clients/openai/OpenAIApiClient.ts b/src/renderer/src/aiCore/clients/openai/OpenAIApiClient.ts index e9133400dc..4808d8a4e9 100644 --- a/src/renderer/src/aiCore/clients/openai/OpenAIApiClient.ts +++ b/src/renderer/src/aiCore/clients/openai/OpenAIApiClient.ts @@ -11,6 +11,7 @@ import { isGPT5SeriesModel, isGrokReasoningModel, isNotSupportSystemMessageModel, + isOpenAIOpenWeightModel, isOpenAIReasoningModel, isQwenAlwaysThinkModel, isQwenMTModel, @@ -531,12 +532,12 @@ export class OpenAIAPIClient extends OpenAIBaseClient< // 1. 处理系统消息 const systemMessage = { role: 'system', content: assistant.prompt || '' } - if (isSupportedReasoningEffortOpenAIModel(model)) { - if (isSupportDeveloperRoleProvider(this.provider)) { - systemMessage.role = 'developer' - } else { - systemMessage.role = 'system' - } + if ( + isSupportedReasoningEffortOpenAIModel(model) && + isSupportDeveloperRoleProvider(this.provider) && + !isOpenAIOpenWeightModel(model) + ) { + systemMessage.role = 'developer' } if (model.id.includes('o1-mini') || model.id.includes('o1-preview')) { diff --git a/src/renderer/src/aiCore/clients/openai/OpenAIResponseAPIClient.ts b/src/renderer/src/aiCore/clients/openai/OpenAIResponseAPIClient.ts index 10a2ee7bbe..36666fcaf2 100644 --- a/src/renderer/src/aiCore/clients/openai/OpenAIResponseAPIClient.ts +++ b/src/renderer/src/aiCore/clients/openai/OpenAIResponseAPIClient.ts @@ -5,6 +5,7 @@ import { isGPT5SeriesModel, isOpenAIChatCompletionOnlyModel, isOpenAILLMModel, + isOpenAIOpenWeightModel, isSupportedReasoningEffortOpenAIModel, isSupportVerbosityModel, isVisionModel @@ -374,12 +375,12 @@ export class OpenAIResponseAPIClient extends OpenAIBaseClient< text: assistant.prompt || '', type: 'input_text' } - if (isSupportedReasoningEffortOpenAIModel(model)) { - if (isSupportDeveloperRoleProvider(this.provider)) { - systemMessage.role = 'developer' - } else { - systemMessage.role = 'system' - } + if ( + isSupportedReasoningEffortOpenAIModel(model) && + isSupportDeveloperRoleProvider(this.provider) && + isOpenAIOpenWeightModel(model) + ) { + systemMessage.role = 'developer' } // 2. 设置工具 diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index ac2a527a9c..9ee608b1b0 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -2909,7 +2909,11 @@ export function isNotSupportTemperatureAndTopP(model: Model): boolean { return true } - if (isOpenAIReasoningModel(model) || isOpenAIChatCompletionOnlyModel(model) || isQwenMTModel(model)) { + if ( + (isOpenAIReasoningModel(model) && !isOpenAIOpenWeightModel(model)) || + isOpenAIChatCompletionOnlyModel(model) || + isQwenMTModel(model) + ) { return true } @@ -3254,5 +3258,10 @@ export const isGPT5SeriesModel = (model: Model) => { return modelId.includes('gpt-5') } +export const isOpenAIOpenWeightModel = (model: Model) => { + const modelId = getLowerBaseModelName(model.id) + return modelId.includes('gpt-oss') +} + // zhipu 视觉推理模型用这组 special token 标记推理结果 export const ZHIPU_RESULT_TOKENS = ['<|begin_of_box|>', '<|end_of_box|>'] as const