From e3e4d6a90423d767a8dea8e23949e47a264347ce Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Mon, 4 Aug 2025 13:36:13 +0100 Subject: [PATCH] Bugfix/Override State WhenStartPersistState (#5017) - Added support for overriding startState from overrideConfig even when startPersistState is true --- packages/server/src/utils/buildAgentflow.ts | 63 +++++++++++++++++++-- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/packages/server/src/utils/buildAgentflow.ts b/packages/server/src/utils/buildAgentflow.ts index c3d4ad71..b0d2eed6 100644 --- a/packages/server/src/utils/buildAgentflow.ts +++ b/packages/server/src/utils/buildAgentflow.ts @@ -1403,6 +1403,29 @@ export const executeAgentFlow = async ({ } } + // Check if startState has been overridden from overrideConfig.startState and is enabled + const startAgentflowNode = nodes.find((node) => node.data.name === 'startAgentflow') + const isStartStateEnabled = + nodeOverrides && startAgentflowNode + ? nodeOverrides[startAgentflowNode.data.label]?.find((param: any) => param.name === 'startState')?.enabled ?? false + : false + + if (isStartStateEnabled && overrideConfig?.startState) { + if (Array.isArray(overrideConfig.startState)) { + // Handle array format: [{"key": "foo", "value": "foo4"}] + const overrideStateObj: ICommonObject = {} + for (const item of overrideConfig.startState) { + if (item.key && item.value !== undefined) { + overrideStateObj[item.key] = item.value + } + } + previousState = { ...previousState, ...overrideStateObj } + } else if (typeof overrideConfig.startState === 'object') { + // Object override: "startState": {...} + previousState = { ...previousState, ...overrideConfig.startState } + } + } + agentflowRuntime.state = previousState } @@ -1584,12 +1607,44 @@ export const executeAgentFlow = async ({ role: message.role === 'userMessage' ? 'user' : 'assistant' } - // Only add additional_kwargs when fileUploads or artifacts exists and is not empty - if ((message.fileUploads && message.fileUploads !== '') || (message.artifacts && message.artifacts !== '')) { + const hasFileUploads = message.fileUploads && message.fileUploads !== '' + const hasArtifacts = message.artifacts && message.artifacts !== '' + const hasFileAnnotations = message.fileAnnotations && message.fileAnnotations !== '' + const hasUsedTools = message.usedTools && message.usedTools !== '' + + if (hasFileUploads || hasArtifacts || hasFileAnnotations || hasUsedTools) { mappedMessage.additional_kwargs = {} - if (message.fileUploads && message.fileUploads !== '') { - mappedMessage.additional_kwargs.fileUploads = message.fileUploads + if (hasFileUploads) { + try { + mappedMessage.additional_kwargs.fileUploads = JSON.parse(message.fileUploads!) + } catch { + mappedMessage.additional_kwargs.fileUploads = message.fileUploads + } + } + + if (hasArtifacts) { + try { + mappedMessage.additional_kwargs.artifacts = JSON.parse(message.artifacts!) + } catch { + mappedMessage.additional_kwargs.artifacts = message.artifacts + } + } + + if (hasFileAnnotations) { + try { + mappedMessage.additional_kwargs.fileAnnotations = JSON.parse(message.fileAnnotations!) + } catch { + mappedMessage.additional_kwargs.fileAnnotations = message.fileAnnotations + } + } + + if (hasUsedTools) { + try { + mappedMessage.additional_kwargs.usedTools = JSON.parse(message.usedTools!) + } catch { + mappedMessage.additional_kwargs.usedTools = message.usedTools + } } }