Pārlūkot izejas kodu

Merge pull request #6311 from ChatGPTNextWeb/6305-bugthe-first-message-except-the-system-message-of-deepseek-reasoner-must-be-a-user-message-but-an-assistant-message-detected

fix: enforce that the first message (excluding system messages) is a …
RiverRay 9 mēneši atpakaļ
vecāks
revīzija
7aa9ae0a3e
1 mainītis faili ar 20 papildinājumiem un 1 dzēšanām
  1. 20 1
      app/client/platforms/deepseek.ts

+ 20 - 1
app/client/platforms/deepseek.ts

@@ -75,6 +75,25 @@ export class DeepSeekApi implements LLMApi {
       }
       }
     }
     }
 
 
+    // 检测并修复消息顺序,确保除system外的第一个消息是user
+    const filteredMessages: ChatOptions["messages"] = [];
+    let hasFoundFirstUser = false;
+
+    for (const msg of messages) {
+      if (msg.role === "system") {
+        // Keep all system messages
+        filteredMessages.push(msg);
+      } else if (msg.role === "user") {
+        // User message directly added
+        filteredMessages.push(msg);
+        hasFoundFirstUser = true;
+      } else if (hasFoundFirstUser) {
+        // After finding the first user message, all subsequent non-system messages are retained.
+        filteredMessages.push(msg);
+      }
+      // If hasFoundFirstUser is false and it is not a system message, it will be skipped.
+    }
+
     const modelConfig = {
     const modelConfig = {
       ...useAppConfig.getState().modelConfig,
       ...useAppConfig.getState().modelConfig,
       ...useChatStore.getState().currentSession().mask.modelConfig,
       ...useChatStore.getState().currentSession().mask.modelConfig,
@@ -85,7 +104,7 @@ export class DeepSeekApi implements LLMApi {
     };
     };
 
 
     const requestPayload: RequestPayload = {
     const requestPayload: RequestPayload = {
-      messages,
+      messages: filteredMessages,
       stream: options.config.stream,
       stream: options.config.stream,
       model: modelConfig.model,
       model: modelConfig.model,
       temperature: modelConfig.temperature,
       temperature: modelConfig.temperature,