(
nodeData: INodeData,
options: ICommonObject,
agentName: string,
state: ISeqAgentsState,
llm: BaseChatModel,
interrupt: boolean,
tools: any[],
systemPrompt: string,
humanPrompt: string,
multiModalMessageContent: MessageContentImageUrl[],
agentInputVariablesValues: ICommonObject,
maxIterations?: string,
flowObj?: { sessionId?: string; chatId?: string; input?: string }
)
| 617 | } |
| 618 | |
| 619 | async function createAgent( |
| 620 | nodeData: INodeData, |
| 621 | options: ICommonObject, |
| 622 | agentName: string, |
| 623 | state: ISeqAgentsState, |
| 624 | llm: BaseChatModel, |
| 625 | interrupt: boolean, |
| 626 | tools: any[], |
| 627 | systemPrompt: string, |
| 628 | humanPrompt: string, |
| 629 | multiModalMessageContent: MessageContentImageUrl[], |
| 630 | agentInputVariablesValues: ICommonObject, |
| 631 | maxIterations?: string, |
| 632 | flowObj?: { sessionId?: string; chatId?: string; input?: string } |
| 633 | ): Promise<any> { |
| 634 | if (tools.length && !interrupt) { |
| 635 | const promptArrays = [ |
| 636 | new MessagesPlaceholder('messages'), |
| 637 | new MessagesPlaceholder('agent_scratchpad') |
| 638 | ] as BaseMessagePromptTemplateLike[] |
| 639 | if (systemPrompt) promptArrays.unshift(['system', systemPrompt]) |
| 640 | if (humanPrompt) promptArrays.push(['human', humanPrompt]) |
| 641 | |
| 642 | let prompt = ChatPromptTemplate.fromMessages(promptArrays) |
| 643 | prompt = await checkMessageHistory(nodeData, options, prompt, promptArrays, systemPrompt) |
| 644 | |
| 645 | if (multiModalMessageContent.length) { |
| 646 | const msg = HumanMessagePromptTemplate.fromTemplate([...multiModalMessageContent]) |
| 647 | prompt.promptMessages.splice(1, 0, msg) |
| 648 | } |
| 649 | |
| 650 | if (llm.bindTools === undefined) { |
| 651 | throw new Error(`This agent only compatible with function calling models.`) |
| 652 | } |
| 653 | const modelWithTools = llm.bindTools(tools) |
| 654 | |
| 655 | let agent |
| 656 | |
| 657 | if (!agentInputVariablesValues || !Object.keys(agentInputVariablesValues).length) { |
| 658 | agent = RunnableSequence.from([ |
| 659 | RunnablePassthrough.assign({ |
| 660 | //@ts-ignore |
| 661 | agent_scratchpad: (input: { steps: ToolsAgentStep[] }) => formatToOpenAIToolMessages(input.steps) |
| 662 | }), |
| 663 | prompt, |
| 664 | modelWithTools, |
| 665 | new ToolCallingAgentOutputParser() |
| 666 | ]).withConfig({ |
| 667 | metadata: { sequentialNodeName: agentName } |
| 668 | }) |
| 669 | } else { |
| 670 | agent = RunnableSequence.from([ |
| 671 | RunnablePassthrough.assign({ |
| 672 | //@ts-ignore |
| 673 | agent_scratchpad: (input: { steps: ToolsAgentStep[] }) => formatToOpenAIToolMessages(input.steps) |
| 674 | }), |
| 675 | RunnablePassthrough.assign(transformObjectPropertyToFunction(agentInputVariablesValues, state)), |
| 676 | prompt, |
no test coverage detected