From 6cf1c82f0486b40a08941a176ec7985cb3e36ac3 Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Sun, 18 May 2025 18:16:17 +0800 Subject: [PATCH] Bugfix/correctly retrieve past images in agentflowv2 (#4453) correctly retrieve past images in agentflowv2 --- packages/components/nodes/agentflow/utils.ts | 85 +++++++++++++++++--- 1 file changed, 75 insertions(+), 10 deletions(-) diff --git a/packages/components/nodes/agentflow/utils.ts b/packages/components/nodes/agentflow/utils.ts index 1df71bcbc..8891e74eb 100644 --- a/packages/components/nodes/agentflow/utils.ts +++ b/packages/components/nodes/agentflow/utils.ts @@ -140,7 +140,12 @@ export const replaceBase64ImagesWithFileReferences = ( ): BaseMessageLike[] => { // Create a deep copy to avoid mutating the original const updatedMessages = JSON.parse(JSON.stringify(messages)) - let imageMessagesIndex = 0 + + // Track positions in replacement arrays + let pastMessageIndex = 0 + let pastContentIndex = 0 + let uniqueMessageIndex = 0 + let uniqueContentIndex = 0 for (let i = 0; i < updatedMessages.length; i++) { const message = updatedMessages[i] @@ -148,17 +153,77 @@ export const replaceBase64ImagesWithFileReferences = ( for (let j = 0; j < message.content.length; j++) { const item = message.content[j] if (item.type === 'image_url') { - // Look for matching file reference in uniqueImageMessages or pastImageMessages - const imageMessage = - (uniqueImageMessages[imageMessagesIndex] as BaseMessage | undefined) || - (pastImageMessages[imageMessagesIndex] as BaseMessage | undefined) + // Try past images first + let replacement = null - if (imageMessage && Array.isArray(imageMessage.content) && imageMessage.content[j]) { - const replaceContent = imageMessage.content[j] - message.content[j] = { - ...replaceContent + if (pastMessageIndex < pastImageMessages.length) { + const pastMessage = pastImageMessages[pastMessageIndex] as BaseMessage | undefined + if (pastMessage && Array.isArray(pastMessage.content)) { + if (pastContentIndex < pastMessage.content.length) { + replacement = pastMessage.content[pastContentIndex] + pastContentIndex++ + + // Move to next message if we've used all content in current one + if (pastContentIndex >= pastMessage.content.length) { + pastMessageIndex++ + pastContentIndex = 0 + } + } else { + // Current message has no more content, move to next + pastMessageIndex++ + pastContentIndex = 0 + + // Try again with the next message + if (pastMessageIndex < pastImageMessages.length) { + const nextPastMessage = pastImageMessages[pastMessageIndex] as BaseMessage | undefined + if (nextPastMessage && Array.isArray(nextPastMessage.content) && nextPastMessage.content.length > 0) { + replacement = nextPastMessage.content[0] + pastContentIndex = 1 + } + } + } + } + } + + // Try unique images if no past image replacement found + if (!replacement && uniqueMessageIndex < uniqueImageMessages.length) { + const uniqueMessage = uniqueImageMessages[uniqueMessageIndex] as BaseMessage | undefined + if (uniqueMessage && Array.isArray(uniqueMessage.content)) { + if (uniqueContentIndex < uniqueMessage.content.length) { + replacement = uniqueMessage.content[uniqueContentIndex] + uniqueContentIndex++ + + // Move to next message if we've used all content in current one + if (uniqueContentIndex >= uniqueMessage.content.length) { + uniqueMessageIndex++ + uniqueContentIndex = 0 + } + } else { + // Current message has no more content, move to next + uniqueMessageIndex++ + uniqueContentIndex = 0 + + // Try again with the next message + if (uniqueMessageIndex < uniqueImageMessages.length) { + const nextUniqueMessage = uniqueImageMessages[uniqueMessageIndex] as BaseMessage | undefined + if ( + nextUniqueMessage && + Array.isArray(nextUniqueMessage.content) && + nextUniqueMessage.content.length > 0 + ) { + replacement = nextUniqueMessage.content[0] + uniqueContentIndex = 1 + } + } + } + } + } + + // Apply replacement if found + if (replacement) { + message.content[j] = { + ...replacement } - imageMessagesIndex++ } } }