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