From 8c66d2c7352d90281585c9345dafb9f242ca6a5d Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Sun, 2 Jun 2024 02:33:40 +0100 Subject: [PATCH] Bugfix/Avoid passing runnable assign when worker agent has no input variables (#2550) avoid passing runnable assign when worker agent has no input variables --- .../nodes/multiagents/Worker/Worker.ts | 56 +++++++++++++------ 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/packages/components/nodes/multiagents/Worker/Worker.ts b/packages/components/nodes/multiagents/Worker/Worker.ts index ffa456955..96910c941 100644 --- a/packages/components/nodes/multiagents/Worker/Worker.ts +++ b/packages/components/nodes/multiagents/Worker/Worker.ts @@ -199,19 +199,33 @@ async function createAgent( } const modelWithTools = llm.bindTools(tools) - const agent = RunnableSequence.from([ - RunnablePassthrough.assign({ - //@ts-ignore - agent_scratchpad: (input: { steps: ToolsAgentStep[] }) => formatToOpenAIToolMessages(input.steps) - }), - RunnablePassthrough.assign(transformObjectPropertyToFunction(workerInputVariablesValues)), - prompt, - modelWithTools, - new ToolCallingAgentOutputParser() - ]) + let agent + + if (!workerInputVariablesValues || !Object.keys(workerInputVariablesValues).length) { + agent = RunnableSequence.from([ + RunnablePassthrough.assign({ + //@ts-ignore + agent_scratchpad: (input: { steps: ToolsAgentStep[] }) => formatToOpenAIToolMessages(input.steps) + }), + prompt, + modelWithTools, + new ToolCallingAgentOutputParser() + ]) + } else { + agent = RunnableSequence.from([ + RunnablePassthrough.assign({ + //@ts-ignore + agent_scratchpad: (input: { steps: ToolsAgentStep[] }) => formatToOpenAIToolMessages(input.steps) + }), + RunnablePassthrough.assign(transformObjectPropertyToFunction(workerInputVariablesValues)), + prompt, + modelWithTools, + new ToolCallingAgentOutputParser() + ]) + } const executor = AgentExecutor.fromAgentAndTools({ - agent: agent, + agent, tools, sessionId: flowObj?.sessionId, chatId: flowObj?.chatId, @@ -233,12 +247,19 @@ async function createAgent( const msg = HumanMessagePromptTemplate.fromTemplate([...multiModalMessageContent]) prompt.promptMessages.splice(1, 0, msg) } - const conversationChain = RunnableSequence.from([ - RunnablePassthrough.assign(transformObjectPropertyToFunction(workerInputVariablesValues)), - prompt, - llm, - new StringOutputParser() - ]) + + let conversationChain + + if (!workerInputVariablesValues || !Object.keys(workerInputVariablesValues).length) { + conversationChain = RunnableSequence.from([prompt, llm, new StringOutputParser()]) + } else { + conversationChain = RunnableSequence.from([ + RunnablePassthrough.assign(transformObjectPropertyToFunction(workerInputVariablesValues)), + prompt, + llm, + new StringOutputParser() + ]) + } return conversationChain } } @@ -256,6 +277,7 @@ async function agentNode( if (abortControllerSignal.signal.aborted) { throw new Error('Aborted!') } + const result = await agent.invoke({ ...state, signal: abortControllerSignal.signal }, config) const additional_kwargs: ICommonObject = {} if (result.usedTools) {