🐛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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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 (
|
||||||
|
|||||||
Reference in New Issue
Block a user