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:
@@ -1103,7 +1103,7 @@
|
|||||||
|
|
||||||
if (history.currentId) {
|
if (history.currentId) {
|
||||||
for (const message of Object.values(history.messages)) {
|
for (const message of Object.values(history.messages)) {
|
||||||
if (message.role === 'assistant') {
|
if (message && message.role === 'assistant') {
|
||||||
message.done = true;
|
message.done = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2084,8 +2084,10 @@
|
|||||||
|
|
||||||
const responseMessage = history.messages[history.currentId];
|
const responseMessage = history.messages[history.currentId];
|
||||||
// Set all response messages to done
|
// Set all response messages to done
|
||||||
for (const messageId of history.messages[responseMessage.parentId].childrenIds) {
|
if (responseMessage.parentId && history.messages[responseMessage.parentId]) {
|
||||||
history.messages[messageId].done = true;
|
for (const messageId of history.messages[responseMessage.parentId].childrenIds) {
|
||||||
|
history.messages[messageId].done = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
history.messages[history.currentId] = responseMessage;
|
history.messages[history.currentId] = responseMessage;
|
||||||
|
|||||||
@@ -77,7 +77,15 @@
|
|||||||
let _messages = [];
|
let _messages = [];
|
||||||
|
|
||||||
let message = history.messages[history.currentId];
|
let message = history.messages[history.currentId];
|
||||||
|
const visitedMessageIds = new Set();
|
||||||
|
|
||||||
while (message && (messagesCount !== null ? _messages.length <= messagesCount : true)) {
|
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 });
|
_messages.unshift({ ...message });
|
||||||
message = message.parentId !== null ? history.messages[message.parentId] : null;
|
message = message.parentId !== null ? history.messages[message.parentId] : null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,6 +75,8 @@
|
|||||||
|
|
||||||
Object.keys(history.messages).forEach((id) => {
|
Object.keys(history.messages).forEach((id) => {
|
||||||
const message = history.messages[id];
|
const message = history.messages[id];
|
||||||
|
if (!message) return;
|
||||||
|
|
||||||
const level = message.parentId ? (positionMap.get(message.parentId)?.level ?? -1) + 1 : 0;
|
const level = message.parentId ? (positionMap.get(message.parentId)?.level ?? -1) + 1 : 0;
|
||||||
if (!layerWidths[level]) layerWidths[level] = 0;
|
if (!layerWidths[level]) layerWidths[level] = 0;
|
||||||
|
|
||||||
@@ -88,6 +90,8 @@
|
|||||||
// Adjust positions based on siblings count to centralize vertical spacing
|
// Adjust positions based on siblings count to centralize vertical spacing
|
||||||
Object.keys(history.messages).forEach((id) => {
|
Object.keys(history.messages).forEach((id) => {
|
||||||
const pos = positionMap.get(id);
|
const pos = positionMap.get(id);
|
||||||
|
if (!pos) return;
|
||||||
|
|
||||||
const x = direction === 'vertical' ? pos.position * siblingOffset : pos.level * levelOffset;
|
const x = direction === 'vertical' ? pos.position * siblingOffset : pos.level * levelOffset;
|
||||||
const y = direction === 'vertical' ? pos.level * levelOffset : pos.position * siblingOffset;
|
const y = direction === 'vertical' ? pos.level * levelOffset : pos.position * siblingOffset;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user