fix(chat): guard null history messages
parent
72dc484f80
commit
f0271c9027
|
|
@ -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));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue