fix(chat): guard null history messages

main
sp mac bookpro 2605 2026-05-29 15:50:41 +08:00
parent 72dc484f80
commit f0271c9027
1 changed files with 10 additions and 10 deletions

View File

@ -116,8 +116,8 @@ export default function ChatPage() {
const loadMessages = async () => {
if (!id || !sessionId) return;
const his = await ChatAPI.history(id, sessionId);
setMessages(his.messages);
setBranches(his.branches);
setMessages(Array.isArray(his.messages) ? his.messages : []);
setBranches(his.branches || {});
requestAnimationFrame(() => {
if (highlightId) {
const el = document.getElementById('msg-' + highlightId);
@ -185,7 +185,7 @@ export default function ChatPage() {
content: text,
createdAt: Date.now()
};
setMessages((m) => [...m, tempUser]);
setMessages((m) => [...(m || []), tempUser]);
setStreaming({ active: true, text: '', retrieved: [], toolCalls: [] });
scrollBottom();
@ -226,7 +226,7 @@ export default function ChatPage() {
return { ...s, toolCalls: list };
}),
onDone: (data) => {
setMessages((m) => [...m.filter((x) => x.id !== tempUser.id), data.user, data.assistant]);
setMessages((m) => [...(m || []).filter((x) => x.id !== tempUser.id), data.user, data.assistant]);
setStreaming({ active: false, text: '', retrieved: [], toolCalls: [] });
setSessionRefresh((t) => t + 1);
setAttachments([]); // 用完即清
@ -236,7 +236,7 @@ export default function ChatPage() {
onAborted: (data) => {
// 已停止保留已生成内容user 消息也留下(用 tempUser 占位)
setMessages((m) => [
...m.filter((x) => x.id !== tempUser.id),
...(m || []).filter((x) => x.id !== tempUser.id),
{ ...tempUser, id: 'u-' + data.assistant.id }, // 占位
data.assistant
]);
@ -247,7 +247,7 @@ export default function ChatPage() {
},
onError: (errMsg) => {
msg.error('流式失败:' + errMsg);
setMessages((m) => m.filter((x) => x.id !== tempUser.id));
setMessages((m) => (m || []).filter((x) => x.id !== tempUser.id));
setStreaming({ active: false, text: '', retrieved: [], toolCalls: [] });
}
},
@ -260,7 +260,7 @@ export default function ChatPage() {
if (e?.name !== 'AbortError') {
msg.error('请求失败:' + (e?.message ?? e));
}
setMessages((m) => m.filter((x) => x.id !== tempUser.id));
setMessages((m) => (m || []).filter((x) => x.id !== tempUser.id));
setStreaming({ active: false, text: '', retrieved: [], toolCalls: [] });
}
};
@ -273,7 +273,7 @@ export default function ChatPage() {
content: text,
createdAt: Date.now()
};
setMessages((m) => [...m, tempUser]);
setMessages((m) => [...(m || []), tempUser]);
scrollBottom();
const attText = buildAttachmentsText();
const content = attText ? `${text}\n\n${attText}` : text;
@ -286,14 +286,14 @@ export default function ChatPage() {
model,
imageUrls
);
setMessages((m) => [...m.filter((x) => x.id !== tempUser.id), res.user, res.assistant]);
setMessages((m) => [...(m || []).filter((x) => x.id !== tempUser.id), res.user, res.assistant]);
setSessionRefresh((t) => t + 1);
setAttachments([]);
setImageUrls([]);
scrollBottom();
} catch (e: any) {
msg.error('发送失败:' + (e?.message ?? e));
setMessages((m) => m.filter((x) => x.id !== tempUser.id));
setMessages((m) => (m || []).filter((x) => x.id !== tempUser.id));
}
};