Quellcode durchsuchen

🐛fix: Fix message saving missing the last conversation

- Modify saveMessagesImmediately to accept messages parameter
- Pass updated message list to all save calls instead of relying on closure
- Ensure complete message history is saved including the last message
- Fix timing issue where old message state was being saved

This fixes the issue where the last conversation was not being persisted to localStorage.
Apple\Apple vor 10 Monaten
Ursprung
Commit
18c2e5cd98

+ 4 - 4
web/src/hooks/useApiRequest.js

@@ -115,9 +115,9 @@ export const useApiRequest = (
         }
       ];
 
-      // 在消息完成时保存
+      // 在消息完成时保存,传入更新后的消息列表
       if (status === MESSAGE_STATUS.COMPLETE || status === MESSAGE_STATUS.ERROR) {
-        setTimeout(() => saveMessages(), 0);
+        setTimeout(() => saveMessages(updatedMessages), 0);
       }
 
       return updatedMessages;
@@ -375,8 +375,8 @@ export const useApiRequest = (
             }
           ];
 
-          // 停止生成时也保存
-          setTimeout(() => saveMessages(), 0);
+          // 停止生成时也保存,传入更新后的消息列表
+          setTimeout(() => saveMessages(updatedMessages), 0);
 
           return updatedMessages;
         }

+ 4 - 4
web/src/hooks/useMessageActions.js

@@ -164,8 +164,8 @@ export const useMessageActions = (message, setMessage, onMessageSend, saveMessag
             updatedMessages = prevMessages.filter(msg => msg.id !== targetMessage.id);
           }
 
-          // 删除消息后保存
-          setTimeout(() => saveMessages(), 0);
+          // 删除消息后保存,传入更新后的消息列表
+          setTimeout(() => saveMessages(updatedMessages), 0);
           return updatedMessages;
         });
       },
@@ -189,8 +189,8 @@ export const useMessageActions = (message, setMessage, onMessageSend, saveMessag
         return msg;
       });
 
-      // 切换角色后保存
-      setTimeout(() => saveMessages(), 0);
+      // 切换角色后保存,传入更新后的消息列表
+      setTimeout(() => saveMessages(updatedMessages), 0);
       return updatedMessages;
     });
 

+ 6 - 6
web/src/hooks/useMessageEdit.js

@@ -57,8 +57,8 @@ export const useMessageEdit = (
             onOk: () => {
               const messagesUntilUser = updatedMessages.slice(0, messageIndex + 1);
               setMessage(messagesUntilUser);
-              // 编辑后保存(重新生成的情况)
-              setTimeout(() => saveMessages(), 0);
+              // 编辑后保存(重新生成的情况),传入更新后的消息列表
+              setTimeout(() => saveMessages(messagesUntilUser), 0);
 
               setTimeout(() => {
                 const payload = buildApiPayload(messagesUntilUser, null, inputs, parameterEnabled);
@@ -68,16 +68,16 @@ export const useMessageEdit = (
             },
             onCancel: () => {
               setMessage(updatedMessages);
-              // 编辑后保存(仅保存的情况)
-              setTimeout(() => saveMessages(), 0);
+              // 编辑后保存(仅保存的情况),传入更新后的消息列表
+              setTimeout(() => saveMessages(updatedMessages), 0);
             }
           });
           return prevMessages;
         }
       }
 
-      // 编辑后保存(普通情况)
-      setTimeout(() => saveMessages(), 0);
+      // 编辑后保存(普通情况),传入更新后的消息列表
+      setTimeout(() => saveMessages(updatedMessages), 0);
       return updatedMessages;
     });
 

+ 5 - 4
web/src/hooks/usePlaygroundState.js

@@ -64,9 +64,10 @@ export const usePlaygroundState = () => {
     }));
   }, []);
 
-  // 消息保存函数 - 改为立即保存
-  const saveMessagesImmediately = useCallback(() => {
-    saveMessages(message);
+  // 消息保存函数 - 改为立即保存,可以接受参数
+  const saveMessagesImmediately = useCallback((messagesToSave) => {
+    // 如果提供了参数,使用参数;否则使用当前状态
+    saveMessages(messagesToSave || message);
   }, [message]);
 
   // 配置保存
@@ -190,7 +191,7 @@ export const usePlaygroundState = () => {
     handleInputChange,
     handleParameterToggle,
     debouncedSaveConfig,
-    saveMessagesImmediately,  // 改为导出立即保存函数
+    saveMessagesImmediately,
     handleConfigImport,
     handleConfigReset,
   };

+ 8 - 7
web/src/pages/Playground/index.js

@@ -214,8 +214,8 @@ const Playground = () => {
           // 发送自定义请求体
           sendRequest(customPayload, customPayload.stream !== false);
 
-          // 发送消息后保存
-          setTimeout(() => saveMessagesImmediately(), 0);
+          // 发送消息后保存,传入新消息列表
+          setTimeout(() => saveMessagesImmediately(newMessages), 0);
 
           return newMessages;
         });
@@ -245,10 +245,11 @@ const Playground = () => {
         }, 100);
       }
 
-      // 发送消息后保存
-      setTimeout(() => saveMessagesImmediately(), 0);
+      // 发送消息后保存,传入新消息列表(包含用户消息和加载消息)
+      const messagesWithLoading = [...newMessages, loadingMessage];
+      setTimeout(() => saveMessagesImmediately(messagesWithLoading), 0);
 
-      return [...newMessages, loadingMessage];
+      return messagesWithLoading;
     });
   }
 
@@ -362,8 +363,8 @@ const Playground = () => {
   // 清空对话的处理函数
   const handleClearMessages = useCallback(() => {
     setMessage([]);
-    // 清空对话后保存
-    setTimeout(() => saveMessagesImmediately(), 0);
+    // 清空对话后保存,传入空数组
+    setTimeout(() => saveMessagesImmediately([]), 0);
   }, [setMessage, saveMessagesImmediately]);
 
   return (