From 5fbff8c1fefcf7b2df56450a33013007e32ed5c8 Mon Sep 17 00:00:00 2001 From: Asurada <43401755+ousugo@users.noreply.github.com> Date: Tue, 15 Apr 2025 03:15:07 +0800 Subject: [PATCH] feat(Grok): add isGrokModel function and update systemMessage handling for Grok models (#4823) --- src/renderer/src/config/models.ts | 7 +++++++ .../src/providers/AiProvider/OpenAIProvider.ts | 11 ++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 015e8ad0..230701bd 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -2220,6 +2220,13 @@ export function isSupportedReasoningEffortModel(model?: Model): boolean { return false } +export function isGrokModel(model?: Model): boolean { + if (!model) { + return false + } + return model.id.includes('grok') +} + export function isGrokReasoningModel(model?: Model): boolean { if (!model) { return false diff --git a/src/renderer/src/providers/AiProvider/OpenAIProvider.ts b/src/renderer/src/providers/AiProvider/OpenAIProvider.ts index b78bf2c1..518bedc0 100644 --- a/src/renderer/src/providers/AiProvider/OpenAIProvider.ts +++ b/src/renderer/src/providers/AiProvider/OpenAIProvider.ts @@ -1,6 +1,7 @@ import { DEFAULT_MAX_TOKENS } from '@renderer/config/constant' import { getOpenAIWebSearchParams, + isGrokModel, isGrokReasoningModel, isHunyuanSearchModel, isOpenAIoSeries, @@ -382,9 +383,13 @@ export default class OpenAIProvider extends BaseProvider { const { signal } = abortController await this.checkIsCopilot() - const reqMessages: ChatCompletionMessageParam[] = [systemMessage, ...userMessages].filter( - Boolean - ) as ChatCompletionMessageParam[] + // Grok 模型要求每条消息都不能为空,所以当是 Grok 模型且 systemMessage 内容为空时不发送 systemMessage + let reqMessages: ChatCompletionMessageParam[] + if (isGrokModel(model) && !systemMessage.content) { + reqMessages = [...userMessages] + } else { + reqMessages = [systemMessage, ...userMessages].filter(Boolean) as ChatCompletionMessageParam[] + } const toolResponses: MCPToolResponse[] = [] let firstChunk = true