Skip to content

Commit deebd39

Browse files
authored
Merge pull request #414 from m-k8s/fix-chat-message-ancestor-lookup
fix: traverse full message tree to find correct user ancestor
2 parents a4b7409 + d427b79 commit deebd39

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

chatgpt.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -934,13 +934,32 @@ const chatgpt = {
934934
return reject(`🤖 chatgpt.js >> Message/response with index ${ msgToGet +1 }`
935935
+ ` is out of bounds. Only ${userMessages.length} messages/responses exist!`)
936936

937+
const isUserMessageAncestor = (messageId, targetUserId) => {
938+
let currentId = messageId;
939+
const maxDepth = 10; // Protection against infinite loops
940+
let depth = 0;
941+
while (currentId && depth < maxDepth) {
942+
const currentMessage = data[currentId];
943+
if (!currentMessage?.message) {
944+
return false;
945+
}
946+
if (currentMessage.id === targetUserId) {
947+
return true;
948+
}
949+
currentId = currentMessage.parent;
950+
depth++;
951+
}
952+
return false;
953+
};
954+
937955
// Fill [chatGPTMessages]
938956
for (const userMessage of userMessages) {
939957
let sub = []
940958
for (const key in data) {
941959
if (data[key].message != null && data[key].message.author.role == 'assistant'
942-
&& data[key].parent == userMessage.id)
960+
&& isUserMessageAncestor(key, userMessage.id)) {
943961
sub.push(data[key].message)
962+
}
944963
}
945964
sub.sort((a, b) => a.create_time - b.create_time) // sort in chronological order
946965
sub = sub.map(x => { // pull out msgs after sorting

0 commit comments

Comments
 (0)