Pārlūkot izejas kodu

Merge pull request #5765 from ConnectAI-E/feature/onfinish

feat: update real 'currentSession'
Lloyd Zhou 1 gadu atpakaļ
vecāks
revīzija
e49fe976d9
2 mainītis faili ar 23 papildinājumiem un 10 dzēšanām
  1. 1 1
      app/components/chat.tsx
  2. 22 9
      app/store/chat.ts

+ 1 - 1
app/components/chat.tsx

@@ -1607,7 +1607,7 @@ function _Chat() {
               title={Locale.Chat.Actions.RefreshTitle}
               onClick={() => {
                 showToast(Locale.Chat.Actions.RefreshToast);
-                chatStore.summarizeSession(true);
+                chatStore.summarizeSession(true, session);
               }}
             />
           </div>

+ 22 - 9
app/store/chat.ts

@@ -352,13 +352,13 @@ export const useChatStore = createPersistStore(
         return session;
       },
 
-      onNewMessage(message: ChatMessage) {
-        get().updateCurrentSession((session) => {
+      onNewMessage(message: ChatMessage, targetSession: ChatSession) {
+        get().updateTargetSession(targetSession, (session) => {
           session.messages = session.messages.concat();
           session.lastUpdate = Date.now();
         });
         get().updateStat(message);
-        get().summarizeSession();
+        get().summarizeSession(false, targetSession);
       },
 
       async onUserInput(content: string, attachImages?: string[]) {
@@ -428,7 +428,7 @@ export const useChatStore = createPersistStore(
             botMessage.streaming = false;
             if (message) {
               botMessage.content = message;
-              get().onNewMessage(botMessage);
+              get().onNewMessage(botMessage, session);
             }
             ChatControllerPool.remove(session.id, botMessage.id);
           },
@@ -598,9 +598,12 @@ export const useChatStore = createPersistStore(
         });
       },
 
-      summarizeSession(refreshTitle: boolean = false) {
+      summarizeSession(
+        refreshTitle: boolean = false,
+        targetSession: ChatSession,
+      ) {
         const config = useAppConfig.getState();
-        const session = get().currentSession();
+        const session = targetSession;
         const modelConfig = session.mask.modelConfig;
         // skip summarize when using dalle3?
         if (isDalle3(modelConfig.model)) {
@@ -651,7 +654,8 @@ export const useChatStore = createPersistStore(
             },
             onFinish(message, responseRes) {
               if (responseRes?.status === 200) {
-                get().updateCurrentSession(
+                get().updateTargetSession(
+                  session,
                   (session) =>
                     (session.topic =
                       message.length > 0 ? trimTopic(message) : DEFAULT_TOPIC),
@@ -719,7 +723,7 @@ export const useChatStore = createPersistStore(
             onFinish(message, responseRes) {
               if (responseRes?.status === 200) {
                 console.log("[Memory] ", message);
-                get().updateCurrentSession((session) => {
+                get().updateTargetSession(session, (session) => {
                   session.lastSummarizeIndex = lastSummarizeIndex;
                   session.memoryPrompt = message; // Update the memory prompt for stored it in local storage
                 });
@@ -745,7 +749,16 @@ export const useChatStore = createPersistStore(
         updater(sessions[index]);
         set(() => ({ sessions }));
       },
-
+      updateTargetSession(
+        targetSession: ChatSession,
+        updater: (session: ChatSession) => void,
+      ) {
+        const sessions = get().sessions;
+        const index = sessions.findIndex((s) => s.id === targetSession.id);
+        if (index < 0) return;
+        updater(sessions[index]);
+        set(() => ({ sessions }));
+      },
       async clearAllData() {
         await indexedDBStorage.clear();
         localStorage.clear();