From 76ae92124097c02547948de88eaffd4e22881da0 Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Tue, 26 Nov 2024 21:06:03 +0000 Subject: [PATCH] Feature/add ability to show variable output (#3580) add ability to show variable output --- .../nodes/utilities/SetVariable/SetVariable.ts | 10 +++++++++- packages/server/src/utils/buildChatflow.ts | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/components/nodes/utilities/SetVariable/SetVariable.ts b/packages/components/nodes/utilities/SetVariable/SetVariable.ts index 00ada3fd..227b673e 100644 --- a/packages/components/nodes/utilities/SetVariable/SetVariable.ts +++ b/packages/components/nodes/utilities/SetVariable/SetVariable.ts @@ -16,7 +16,7 @@ class SetVariable_Utilities implements INode { constructor() { this.label = 'Set Variable' this.name = 'setVariable' - this.version = 2.0 + this.version = 2.1 this.type = 'SetVariable' this.icon = 'setvar.svg' this.category = 'Utilities' @@ -36,6 +36,14 @@ class SetVariable_Utilities implements INode { name: 'variableName', type: 'string', placeholder: 'var1' + }, + { + label: 'Show Output', + name: 'showOutput', + description: 'Show the output result in the Prediction API response', + type: 'boolean', + optional: true, + additionalParams: true } ] this.outputs = [ diff --git a/packages/server/src/utils/buildChatflow.ts b/packages/server/src/utils/buildChatflow.ts index 43836bee..61a69325 100644 --- a/packages/server/src/utils/buildChatflow.ts +++ b/packages/server/src/utils/buildChatflow.ts @@ -249,6 +249,8 @@ export const utilBuildChatflow = async (req: Request, isInternal: boolean = fals // Get prepend messages const prependMessages = incomingInput.history + const flowVariables = {} as Record + /* Reuse the flow without having to rebuild (to avoid duplicated upsert, recomputation, reinitialization of memory) when all these conditions met: * - Reuse of flows is not disabled * - Node Data already exists in pool @@ -378,6 +380,18 @@ export const utilBuildChatflow = async (req: Request, isInternal: boolean = fals baseURL }) + // Show output of setVariable nodes in the response + for (const node of reactFlowNodes) { + if ( + node.data.name === 'setVariable' && + (node.data.inputs?.showOutput === true || node.data.inputs?.showOutput === 'true') + ) { + const outputResult = node.data.instance + const variableKey = node.data.inputs?.variableName + flowVariables[variableKey] = outputResult + } + } + const nodeToExecute = endingNodeIds.length === 1 ? reactFlowNodes.find((node: IReactFlowNode) => endingNodeIds[0] === node.id) @@ -525,6 +539,7 @@ export const utilBuildChatflow = async (req: Request, isInternal: boolean = fals if (sessionId) result.sessionId = sessionId if (memoryType) result.memoryType = memoryType + if (Object.keys(flowVariables).length) result.flowVariables = flowVariables return result } catch (e) {