Bugfix/Avoid passing runnable assign when worker agent has no input variables (#2550)

avoid passing runnable assign when worker agent has no input variables
This commit is contained in:
Henry Heng 2024-06-02 02:33:40 +01:00 committed by GitHub
parent e15e6fafdc
commit 8c66d2c735
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 39 additions and 17 deletions

View File

@ -199,7 +199,20 @@ async function createAgent(
} }
const modelWithTools = llm.bindTools(tools) const modelWithTools = llm.bindTools(tools)
const agent = RunnableSequence.from([ 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({ RunnablePassthrough.assign({
//@ts-ignore //@ts-ignore
agent_scratchpad: (input: { steps: ToolsAgentStep[] }) => formatToOpenAIToolMessages(input.steps) agent_scratchpad: (input: { steps: ToolsAgentStep[] }) => formatToOpenAIToolMessages(input.steps)
@ -209,9 +222,10 @@ async function createAgent(
modelWithTools, modelWithTools,
new ToolCallingAgentOutputParser() new ToolCallingAgentOutputParser()
]) ])
}
const executor = AgentExecutor.fromAgentAndTools({ const executor = AgentExecutor.fromAgentAndTools({
agent: agent, agent,
tools, tools,
sessionId: flowObj?.sessionId, sessionId: flowObj?.sessionId,
chatId: flowObj?.chatId, chatId: flowObj?.chatId,
@ -233,12 +247,19 @@ async function createAgent(
const msg = HumanMessagePromptTemplate.fromTemplate([...multiModalMessageContent]) const msg = HumanMessagePromptTemplate.fromTemplate([...multiModalMessageContent])
prompt.promptMessages.splice(1, 0, msg) prompt.promptMessages.splice(1, 0, msg)
} }
const conversationChain = RunnableSequence.from([
let conversationChain
if (!workerInputVariablesValues || !Object.keys(workerInputVariablesValues).length) {
conversationChain = RunnableSequence.from([prompt, llm, new StringOutputParser()])
} else {
conversationChain = RunnableSequence.from([
RunnablePassthrough.assign(transformObjectPropertyToFunction(workerInputVariablesValues)), RunnablePassthrough.assign(transformObjectPropertyToFunction(workerInputVariablesValues)),
prompt, prompt,
llm, llm,
new StringOutputParser() new StringOutputParser()
]) ])
}
return conversationChain return conversationChain
} }
} }
@ -256,6 +277,7 @@ async function agentNode(
if (abortControllerSignal.signal.aborted) { if (abortControllerSignal.signal.aborted) {
throw new Error('Aborted!') throw new Error('Aborted!')
} }
const result = await agent.invoke({ ...state, signal: abortControllerSignal.signal }, config) const result = await agent.invoke({ ...state, signal: abortControllerSignal.signal }, config)
const additional_kwargs: ICommonObject = {} const additional_kwargs: ICommonObject = {}
if (result.usedTools) { if (result.usedTools) {