🐛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.
This commit is contained in:
Apple\Apple
2025-06-02 21:39:51 +08:00
parent f9c8a802ef
commit 18c2e5cd98
5 changed files with 27 additions and 25 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -214,8 +214,8 @@ const Playground = () => {
// 发送自定义请求体 // 发送自定义请求体
sendRequest(customPayload, customPayload.stream !== false); sendRequest(customPayload, customPayload.stream !== false);
// 发送消息后保存 // 发送消息后保存,传入新消息列表
setTimeout(() => saveMessagesImmediately(), 0); setTimeout(() => saveMessagesImmediately(newMessages), 0);
return newMessages; return newMessages;
}); });
@@ -245,10 +245,11 @@ const Playground = () => {
}, 100); }, 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(() => { const handleClearMessages = useCallback(() => {
setMessage([]); setMessage([]);
// 清空对话后保存 // 清空对话后保存,传入空数组
setTimeout(() => saveMessagesImmediately(), 0); setTimeout(() => saveMessagesImmediately([]), 0);
}, [setMessage, saveMessagesImmediately]); }, [setMessage, saveMessagesImmediately]);
return ( return (