fix: resolve duplicate key and null message errors in chat (#20268)

* fix: resolve duplicate key and null message errors in chat

* fix: resolve duplicate key and null message errors in chat

* chore: visitedIds -> visitedMessageIds
This commit is contained in:
G30
2025-12-31 15:44:02 -05:00
committed by GitHub
parent 8b3a4c1e2f
commit 4f918e7aa4
3 changed files with 17 additions and 3 deletions
+5 -3
View File
@@ -1103,7 +1103,7 @@
if (history.currentId) {
for (const message of Object.values(history.messages)) {
if (message.role === 'assistant') {
if (message && message.role === 'assistant') {
message.done = true;
}
}
@@ -2084,8 +2084,10 @@
const responseMessage = history.messages[history.currentId];
// Set all response messages to done
for (const messageId of history.messages[responseMessage.parentId].childrenIds) {
history.messages[messageId].done = true;
if (responseMessage.parentId && history.messages[responseMessage.parentId]) {
for (const messageId of history.messages[responseMessage.parentId].childrenIds) {
history.messages[messageId].done = true;
}
}
history.messages[history.currentId] = responseMessage;
+8
View File
@@ -77,7 +77,15 @@
let _messages = [];
let message = history.messages[history.currentId];
const visitedMessageIds = new Set();
while (message && (messagesCount !== null ? _messages.length <= messagesCount : true)) {
if (visitedMessageIds.has(message.id)) {
console.warn('Circular dependency detected in message history', message.id);
break;
}
visitedMessageIds.add(message.id);
_messages.unshift({ ...message });
message = message.parentId !== null ? history.messages[message.parentId] : null;
}
@@ -75,6 +75,8 @@
Object.keys(history.messages).forEach((id) => {
const message = history.messages[id];
if (!message) return;
const level = message.parentId ? (positionMap.get(message.parentId)?.level ?? -1) + 1 : 0;
if (!layerWidths[level]) layerWidths[level] = 0;
@@ -88,6 +90,8 @@
// Adjust positions based on siblings count to centralize vertical spacing
Object.keys(history.messages).forEach((id) => {
const pos = positionMap.get(id);
if (!pos) return;
const x = direction === 'vertical' ? pos.position * siblingOffset : pos.level * levelOffset;
const y = direction === 'vertical' ? pos.level * levelOffset : pos.position * siblingOffset;