Feature/Seq Agent Nodes Update (#2942)

update all seg agent nodes to 2.0 for UI UX improvements
This commit is contained in:
Henry Heng
2024-08-06 11:30:08 +01:00
committed by GitHub
parent 7153093bfc
commit 70d7420d02
21 changed files with 1789 additions and 887 deletions
@@ -6,14 +6,14 @@
{
"id": "seqStart_0",
"position": {
"x": 517,
"y": 185
"x": 535.1559788923448,
"y": 183.18440211076552
},
"type": "customNode",
"data": {
"id": "seqStart_0",
"label": "Start",
"version": 1,
"version": 2,
"name": "seqStart",
"type": "Start",
"baseClasses": ["Start"],
@@ -56,7 +56,7 @@
],
"inputs": {
"model": "{{chatOpenAI_0.data.instance}}",
"agentMemory": "",
"agentMemory": "{{agentMemory_0.data.instance}}",
"state": "",
"inputModeration": ""
},
@@ -75,22 +75,23 @@
"width": 300,
"height": 382,
"positionAbsolute": {
"x": 517,
"y": 185
"x": 535.1559788923448,
"y": 183.18440211076552
},
"selected": false
"selected": false,
"dragging": false
},
{
"id": "seqEnd_0",
"position": {
"x": 1687.0918892866584,
"y": 390.6423315048602
"x": 2047.2912756930234,
"y": 439.82618346396225
},
"type": "customNode",
"data": {
"id": "seqEnd_0",
"label": "End",
"version": 1,
"version": 2,
"name": "seqEnd",
"type": "End",
"baseClasses": ["End"],
@@ -99,10 +100,10 @@
"inputParams": [],
"inputAnchors": [
{
"label": "Start | Agent | LLM | Tool Node",
"label": "Agent | Condition | LLM | Tool Node",
"name": "sequentialNode",
"type": "Start | Agent | LLMNode | ToolNode",
"id": "seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
"type": "Agent | Condition | LLMNode | ToolNode",
"id": "seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode"
}
],
"inputs": {
@@ -116,22 +117,22 @@
"height": 143,
"selected": false,
"positionAbsolute": {
"x": 1687.0918892866584,
"y": 390.6423315048602
"x": 2047.2912756930234,
"y": 439.82618346396225
},
"dragging": false
},
{
"id": "seqAgent_0",
"position": {
"x": 904.4818180531253,
"y": -31.306986726059677
"x": 918.9476568646259,
"y": -68.91816763596125
},
"type": "customNode",
"data": {
"id": "seqAgent_0",
"label": "Agent",
"version": 1,
"version": 2,
"name": "seqAgent",
"type": "Agent",
"baseClasses": ["Agent"],
@@ -164,6 +165,14 @@
"additionalParams": true,
"id": "seqAgent_0-input-humanMessagePrompt-string"
},
{
"label": "Require Approval",
"name": "interrupt",
"description": "Require approval before executing tools. Will proceed when tools are not called",
"type": "boolean",
"optional": true,
"id": "seqAgent_0-input-interrupt-boolean"
},
{
"label": "Format Prompt Values",
"name": "promptValues",
@@ -174,6 +183,37 @@
"list": true,
"id": "seqAgent_0-input-promptValues-json"
},
{
"label": "Approval Prompt",
"name": "approvalPrompt",
"description": "Prompt for approval. Only applicable if \"Require Approval\" is enabled",
"type": "string",
"default": "You are about to execute tool: {tools}. Ask if user want to proceed",
"rows": 4,
"optional": true,
"additionalParams": true,
"id": "seqAgent_0-input-approvalPrompt-string"
},
{
"label": "Approve Button Text",
"name": "approveButtonText",
"description": "Text for approve button. Only applicable if \"Require Approval\" is enabled",
"type": "string",
"default": "Yes",
"optional": true,
"additionalParams": true,
"id": "seqAgent_0-input-approveButtonText-string"
},
{
"label": "Reject Button Text",
"name": "rejectButtonText",
"description": "Text for reject button. Only applicable if \"Require Approval\" is enabled",
"type": "string",
"default": "No",
"optional": true,
"additionalParams": true,
"id": "seqAgent_0-input-rejectButtonText-string"
},
{
"label": "Update State",
"name": "updateStateMemory",
@@ -281,14 +321,15 @@
"name": "tools",
"type": "Tool",
"list": true,
"optional": true,
"id": "seqAgent_0-input-tools-Tool"
},
{
"label": "Start | Agent | LLM | Tool Node",
"label": "Start | Agent | Condition | LLM | Tool Node",
"name": "sequentialNode",
"type": "Start | Agent | LLMNode | ToolNode",
"type": "Start | Agent | Condition | LLMNode | ToolNode",
"list": true,
"id": "seqAgent_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
"id": "seqAgent_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode"
},
{
"label": "Chat Model",
@@ -304,11 +345,16 @@
"systemMessagePrompt": "You are frontline support staff for Flowise, an e-commerce store that sells computer hardwares.\n\nBe concise in your responses.\n\nYou can chat with customers and help them with basic questions, but if the customer is having a billing or technical problem, do not try to answer the question directly or gather information.\n\nInstead, immediately transfer them to the billing or technical team by asking the user to hold for a moment.\n\nOtherwise, just respond conversationally.",
"humanMessagePrompt": "",
"tools": "",
"sequentialNode": ["{{seqStart_0.data.instance}}"],
"sequentialNode": ["{{seqStart_0.data.instance}}", "{{seqStart_0.data.instance}}"],
"model": "",
"interrupt": "",
"promptValues": "",
"approvalPrompt": "You are about to execute tool: {tools}. Ask if user want to proceed",
"approveButtonText": "Yes",
"rejectButtonText": "No",
"updateStateMemory": "updateStateMemoryUI",
"maxIterations": ""
"maxIterations": "",
"selectedUpdateStateMemoryTab_seqAgent_0": "updateStateMemoryUI"
},
"outputAnchors": [
{
@@ -323,25 +369,25 @@
"selected": false
},
"width": 300,
"height": 762,
"height": 877,
"selected": false,
"positionAbsolute": {
"x": 904.4818180531253,
"y": -31.306986726059677
"x": 918.9476568646259,
"y": -68.91816763596125
},
"dragging": false
},
{
"id": "seqConditionAgent_0",
"position": {
"x": 1290.2151992695583,
"y": -1.8313250034265138
"x": 1292.4078104230643,
"y": 6.939119610597714
},
"type": "customNode",
"data": {
"id": "seqConditionAgent_0",
"label": "Condition Agent",
"version": 1,
"version": 2,
"name": "seqConditionAgent",
"type": "ConditionAgent",
"baseClasses": ["ConditionAgent"],
@@ -551,37 +597,39 @@
"promptValues": "",
"conditionAgentStructuredOutput": "[{\"key\":\"route\",\"type\":\"Enum\",\"enumValues\":\"BILLING, TECHNICAL, CONVERSATION\",\"description\":\"the route to take next\",\"actions\":\"\",\"id\":1}]",
"condition": "",
"conditionUI": "[{\"variable\":\"$flow.output.route\",\"operation\":\"Is\",\"value\":\"BILLING\",\"output\":\"Billing\",\"actions\":\"\",\"id\":1},{\"variable\":\"$flow.output.route\",\"operation\":\"Is\",\"value\":\"TECHNICAL\",\"output\":\"Technical\",\"actions\":\"\",\"id\":2}]",
"selectedConditionFunctionTab_seqConditionAgent_0": "conditionUI"
"selectedConditionFunctionTab_seqConditionAgent_0": "conditionUI",
"conditionUI": "[{\"variable\":\"$flow.output.route\",\"operation\":\"Is\",\"value\":\"BILLING\",\"output\":\"Billing\",\"actions\":\"\",\"id\":1},{\"variable\":\"$flow.output.route\",\"operation\":\"Is\",\"value\":\"TECHNICAL\",\"output\":\"Technical\",\"actions\":\"\",\"id\":2}]"
},
"outputAnchors": [
{
"name": "output",
"label": "Output",
"type": "options",
"description": "",
"options": [
{
"id": "seqConditionAgent_0-output-billing-Agent|LLMNode|ToolNode",
"id": "seqConditionAgent_0-output-billing-Condition",
"name": "billing",
"label": "Billing",
"type": "Agent | LLMNode | ToolNode",
"type": "Condition",
"isAnchor": true
},
{
"id": "seqConditionAgent_0-output-end-Agent|LLMNode|ToolNode",
"id": "seqConditionAgent_0-output-end-Condition",
"name": "end",
"label": "End",
"type": "Agent | LLMNode | ToolNode",
"type": "Condition",
"isAnchor": true
},
{
"id": "seqConditionAgent_0-output-technical-Agent|LLMNode|ToolNode",
"id": "seqConditionAgent_0-output-technical-Condition",
"name": "technical",
"label": "Technical",
"type": "Agent | LLMNode | ToolNode",
"type": "Condition",
"isAnchor": true
}
]
],
"default": "next"
}
],
"outputs": {
@@ -593,8 +641,8 @@
"height": 627,
"selected": false,
"positionAbsolute": {
"x": 1290.2151992695583,
"y": -1.8313250034265138
"x": 1292.4078104230643,
"y": 6.939119610597714
},
"dragging": false
},
@@ -608,7 +656,7 @@
"data": {
"id": "seqAgent_1",
"label": "Agent",
"version": 1,
"version": 2,
"name": "seqAgent",
"type": "Agent",
"baseClasses": ["Agent"],
@@ -641,6 +689,14 @@
"additionalParams": true,
"id": "seqAgent_1-input-humanMessagePrompt-string"
},
{
"label": "Require Approval",
"name": "interrupt",
"description": "Require approval before executing tools. Will proceed when tools are not called",
"type": "boolean",
"optional": true,
"id": "seqAgent_1-input-interrupt-boolean"
},
{
"label": "Format Prompt Values",
"name": "promptValues",
@@ -651,6 +707,37 @@
"list": true,
"id": "seqAgent_1-input-promptValues-json"
},
{
"label": "Approval Prompt",
"name": "approvalPrompt",
"description": "Prompt for approval. Only applicable if \"Require Approval\" is enabled",
"type": "string",
"default": "You are about to execute tool: {tools}. Ask if user want to proceed",
"rows": 4,
"optional": true,
"additionalParams": true,
"id": "seqAgent_1-input-approvalPrompt-string"
},
{
"label": "Approve Button Text",
"name": "approveButtonText",
"description": "Text for approve button. Only applicable if \"Require Approval\" is enabled",
"type": "string",
"default": "Yes",
"optional": true,
"additionalParams": true,
"id": "seqAgent_1-input-approveButtonText-string"
},
{
"label": "Reject Button Text",
"name": "rejectButtonText",
"description": "Text for reject button. Only applicable if \"Require Approval\" is enabled",
"type": "string",
"default": "No",
"optional": true,
"additionalParams": true,
"id": "seqAgent_1-input-rejectButtonText-string"
},
{
"label": "Update State",
"name": "updateStateMemory",
@@ -758,14 +845,15 @@
"name": "tools",
"type": "Tool",
"list": true,
"optional": true,
"id": "seqAgent_1-input-tools-Tool"
},
{
"label": "Start | Agent | LLM | Tool Node",
"label": "Start | Agent | Condition | LLM | Tool Node",
"name": "sequentialNode",
"type": "Start | Agent | LLMNode | ToolNode",
"type": "Start | Agent | Condition | LLMNode | ToolNode",
"list": true,
"id": "seqAgent_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
"id": "seqAgent_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode"
},
{
"label": "Chat Model",
@@ -781,11 +869,16 @@
"systemMessagePrompt": "You are an expert billing support specialist for Flowise, a company that sells computers.\nHelp the user to the best of your ability, but be concise in your responses.\nYou have the ability to authorize refunds, which you can do collecting the required information.",
"humanMessagePrompt": "",
"tools": ["{{customTool_0.data.instance}}"],
"sequentialNode": ["{{seqConditionAgent_0.data.instance}}"],
"sequentialNode": ["{{seqConditionAgent_0.data.instance}}", "{{seqConditionAgent_0.data.instance}}"],
"model": "",
"interrupt": true,
"promptValues": "",
"approvalPrompt": "You are about to execute tool: {tools}. Ask if user want to proceed",
"approveButtonText": "Yes",
"rejectButtonText": "No",
"updateStateMemory": "updateStateMemoryUI",
"maxIterations": ""
"maxIterations": "",
"selectedUpdateStateMemoryTab_seqAgent_1": "updateStateMemoryUI"
},
"outputAnchors": [
{
@@ -800,7 +893,7 @@
"selected": false
},
"width": 300,
"height": 762,
"height": 877,
"selected": false,
"positionAbsolute": {
"x": 1678.9042290896336,
@@ -818,7 +911,7 @@
"data": {
"id": "seqAgent_2",
"label": "Agent",
"version": 1,
"version": 2,
"name": "seqAgent",
"type": "Agent",
"baseClasses": ["Agent"],
@@ -851,6 +944,14 @@
"additionalParams": true,
"id": "seqAgent_2-input-humanMessagePrompt-string"
},
{
"label": "Require Approval",
"name": "interrupt",
"description": "Require approval before executing tools. Will proceed when tools are not called",
"type": "boolean",
"optional": true,
"id": "seqAgent_2-input-interrupt-boolean"
},
{
"label": "Format Prompt Values",
"name": "promptValues",
@@ -861,6 +962,37 @@
"list": true,
"id": "seqAgent_2-input-promptValues-json"
},
{
"label": "Approval Prompt",
"name": "approvalPrompt",
"description": "Prompt for approval. Only applicable if \"Require Approval\" is enabled",
"type": "string",
"default": "You are about to execute tool: {tools}. Ask if user want to proceed",
"rows": 4,
"optional": true,
"additionalParams": true,
"id": "seqAgent_2-input-approvalPrompt-string"
},
{
"label": "Approve Button Text",
"name": "approveButtonText",
"description": "Text for approve button. Only applicable if \"Require Approval\" is enabled",
"type": "string",
"default": "Yes",
"optional": true,
"additionalParams": true,
"id": "seqAgent_2-input-approveButtonText-string"
},
{
"label": "Reject Button Text",
"name": "rejectButtonText",
"description": "Text for reject button. Only applicable if \"Require Approval\" is enabled",
"type": "string",
"default": "No",
"optional": true,
"additionalParams": true,
"id": "seqAgent_2-input-rejectButtonText-string"
},
{
"label": "Update State",
"name": "updateStateMemory",
@@ -968,14 +1100,15 @@
"name": "tools",
"type": "Tool",
"list": true,
"optional": true,
"id": "seqAgent_2-input-tools-Tool"
},
{
"label": "Start | Agent | LLM | Tool Node",
"label": "Start | Agent | Condition | LLM | Tool Node",
"name": "sequentialNode",
"type": "Start | Agent | LLMNode | ToolNode",
"type": "Start | Agent | Condition | LLMNode | ToolNode",
"list": true,
"id": "seqAgent_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
"id": "seqAgent_2-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode"
},
{
"label": "Chat Model",
@@ -991,11 +1124,16 @@
"systemMessagePrompt": "You are an expert at diagnosing technical computer issues. You work for a company called Flowise that sells computers.\n\nUse the \"search_manual\" tool to look for relavant information to answer user question to the best of your ability, be concise in your responses.",
"humanMessagePrompt": "",
"tools": ["{{retrieverTool_0.data.instance}}"],
"sequentialNode": ["{{seqConditionAgent_0.data.instance}}"],
"sequentialNode": ["{{seqConditionAgent_0.data.instance}}", "{{seqConditionAgent_0.data.instance}}"],
"model": "",
"interrupt": "",
"promptValues": "",
"approvalPrompt": "You are about to execute tool: {tools}. Ask if user want to proceed",
"approveButtonText": "Yes",
"rejectButtonText": "No",
"updateStateMemory": "updateStateMemoryUI",
"maxIterations": ""
"maxIterations": "",
"selectedUpdateStateMemoryTab_seqAgent_2": "updateStateMemoryUI"
},
"outputAnchors": [
{
@@ -1010,7 +1148,7 @@
"selected": false
},
"width": 300,
"height": 762,
"height": 877,
"selected": false,
"positionAbsolute": {
"x": 1685.181693772893,
@@ -1028,7 +1166,7 @@
"data": {
"id": "seqEnd_1",
"label": "End",
"version": 1,
"version": 2,
"name": "seqEnd",
"type": "End",
"baseClasses": ["End"],
@@ -1037,10 +1175,10 @@
"inputParams": [],
"inputAnchors": [
{
"label": "Start | Agent | LLM | Tool Node",
"label": "Agent | Condition | LLM | Tool Node",
"name": "sequentialNode",
"type": "Start | Agent | LLMNode | ToolNode",
"id": "seqEnd_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
"type": "Agent | Condition | LLMNode | ToolNode",
"id": "seqEnd_1-input-sequentialNode-Agent | Condition | LLMNode | ToolNode"
}
],
"inputs": {
@@ -1069,7 +1207,7 @@
"data": {
"id": "seqEnd_2",
"label": "End",
"version": 1,
"version": 2,
"name": "seqEnd",
"type": "End",
"baseClasses": ["End"],
@@ -1078,10 +1216,10 @@
"inputParams": [],
"inputAnchors": [
{
"label": "Start | Agent | LLM | Tool Node",
"label": "Agent | Condition | LLM | Tool Node",
"name": "sequentialNode",
"type": "Start | Agent | LLMNode | ToolNode",
"id": "seqEnd_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
"type": "Agent | Condition | LLMNode | ToolNode",
"id": "seqEnd_2-input-sequentialNode-Agent | Condition | LLMNode | ToolNode"
}
],
"inputs": {
@@ -1360,7 +1498,7 @@
],
"inputAnchors": [],
"inputs": {
"selectedTool": ""
"selectedTool": "b227ea41-8218-4236-bcfb-e83db284f589"
},
"outputAnchors": [
{
@@ -1670,7 +1808,7 @@
"inputs": {
"document": "",
"embeddings": "{{openAIEmbeddings_0.data.instance}}",
"basePath": "",
"basePath": "C:\\Users\\Henry\\Desktop\\testdata\\faiss",
"topK": ""
},
"outputAnchors": [
@@ -1764,17 +1902,85 @@
"y": 835.680987230599
},
"dragging": false
},
{
"id": "agentMemory_0",
"position": {
"x": -189.79273044762397,
"y": 230.31145812371778
},
"type": "customNode",
"data": {
"id": "agentMemory_0",
"label": "Agent Memory",
"version": 1,
"name": "agentMemory",
"type": "AgentMemory",
"baseClasses": ["AgentMemory", "BaseCheckpointSaver"],
"category": "Memory",
"description": "Memory for agentflow to remember the state of the conversation",
"inputParams": [
{
"label": "Database",
"name": "databaseType",
"type": "options",
"options": [
{
"label": "SQLite",
"name": "sqlite"
}
],
"default": "sqlite",
"id": "agentMemory_0-input-databaseType-options"
},
{
"label": "Database File Path",
"name": "databaseFilePath",
"type": "string",
"placeholder": "C:\\Users\\User\\.flowise\\database.sqlite",
"description": "If SQLite is selected, provide the path to the SQLite database file. Leave empty to use default application database",
"additionalParams": true,
"optional": true,
"id": "agentMemory_0-input-databaseFilePath-string"
},
{
"label": "Additional Connection Configuration",
"name": "additionalConfig",
"type": "json",
"additionalParams": true,
"optional": true,
"id": "agentMemory_0-input-additionalConfig-json"
}
],
"inputAnchors": [],
"inputs": {
"databaseType": "sqlite",
"databaseFilePath": "",
"additionalConfig": ""
},
"outputAnchors": [
{
"id": "agentMemory_0-output-agentMemory-AgentMemory|BaseCheckpointSaver",
"name": "agentMemory",
"label": "AgentMemory",
"description": "Memory for agentflow to remember the state of the conversation",
"type": "AgentMemory | BaseCheckpointSaver"
}
],
"outputs": {},
"selected": false
},
"width": 300,
"height": 327,
"selected": false,
"positionAbsolute": {
"x": -189.79273044762397,
"y": 230.31145812371778
},
"dragging": false
}
],
"edges": [
{
"source": "seqStart_0",
"sourceHandle": "seqStart_0-output-seqStart-Start",
"target": "seqAgent_0",
"targetHandle": "seqAgent_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqStart_0-seqStart_0-output-seqStart-Start-seqAgent_0-seqAgent_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
},
{
"source": "seqAgent_0",
"sourceHandle": "seqAgent_0-output-seqAgent-Agent",
@@ -1783,46 +1989,6 @@
"type": "buttonedge",
"id": "seqAgent_0-seqAgent_0-output-seqAgent-Agent-seqConditionAgent_0-seqConditionAgent_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
},
{
"source": "seqConditionAgent_0",
"sourceHandle": "seqConditionAgent_0-output-end-Agent|LLMNode|ToolNode",
"target": "seqEnd_0",
"targetHandle": "seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqConditionAgent_0-seqConditionAgent_0-output-end-Agent|LLMNode|ToolNode-seqEnd_0-seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
},
{
"source": "seqConditionAgent_0",
"sourceHandle": "seqConditionAgent_0-output-billing-Agent|LLMNode|ToolNode",
"target": "seqAgent_1",
"targetHandle": "seqAgent_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqConditionAgent_0-seqConditionAgent_0-output-billing-Agent|LLMNode|ToolNode-seqAgent_1-seqAgent_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
},
{
"source": "seqConditionAgent_0",
"sourceHandle": "seqConditionAgent_0-output-technical-Agent|LLMNode|ToolNode",
"target": "seqAgent_2",
"targetHandle": "seqAgent_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqConditionAgent_0-seqConditionAgent_0-output-technical-Agent|LLMNode|ToolNode-seqAgent_2-seqAgent_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
},
{
"source": "seqAgent_1",
"sourceHandle": "seqAgent_1-output-seqAgent-Agent",
"target": "seqEnd_1",
"targetHandle": "seqEnd_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqAgent_1-seqAgent_1-output-seqAgent-Agent-seqEnd_1-seqEnd_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
},
{
"source": "seqAgent_2",
"sourceHandle": "seqAgent_2-output-seqAgent-Agent",
"target": "seqEnd_2",
"targetHandle": "seqEnd_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqAgent_2-seqAgent_2-output-seqAgent-Agent-seqEnd_2-seqEnd_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
},
{
"source": "chatOpenAI_0",
"sourceHandle": "chatOpenAI_0-output-chatOpenAI-ChatOpenAI|BaseChatModel|BaseLanguageModel|Runnable",
@@ -1862,6 +2028,62 @@
"targetHandle": "faiss_0-input-embeddings-Embeddings",
"type": "buttonedge",
"id": "openAIEmbeddings_0-openAIEmbeddings_0-output-openAIEmbeddings-OpenAIEmbeddings|Embeddings-faiss_0-faiss_0-input-embeddings-Embeddings"
},
{
"source": "seqStart_0",
"sourceHandle": "seqStart_0-output-seqStart-Start",
"target": "seqAgent_0",
"targetHandle": "seqAgent_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqStart_0-seqStart_0-output-seqStart-Start-seqAgent_0-seqAgent_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode"
},
{
"source": "seqConditionAgent_0",
"sourceHandle": "seqConditionAgent_0-output-billing-Condition",
"target": "seqAgent_1",
"targetHandle": "seqAgent_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqConditionAgent_0-seqConditionAgent_0-output-billing-Condition-seqAgent_1-seqAgent_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode"
},
{
"source": "seqConditionAgent_0",
"sourceHandle": "seqConditionAgent_0-output-end-Condition",
"target": "seqEnd_0",
"targetHandle": "seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqConditionAgent_0-seqConditionAgent_0-output-end-Condition-seqEnd_0-seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode"
},
{
"source": "seqConditionAgent_0",
"sourceHandle": "seqConditionAgent_0-output-technical-Condition",
"target": "seqAgent_2",
"targetHandle": "seqAgent_2-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqConditionAgent_0-seqConditionAgent_0-output-technical-Condition-seqAgent_2-seqAgent_2-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode"
},
{
"source": "seqAgent_2",
"sourceHandle": "seqAgent_2-output-seqAgent-Agent",
"target": "seqEnd_2",
"targetHandle": "seqEnd_2-input-sequentialNode-Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqAgent_2-seqAgent_2-output-seqAgent-Agent-seqEnd_2-seqEnd_2-input-sequentialNode-Agent | Condition | LLMNode | ToolNode"
},
{
"source": "seqAgent_1",
"sourceHandle": "seqAgent_1-output-seqAgent-Agent",
"target": "seqEnd_1",
"targetHandle": "seqEnd_1-input-sequentialNode-Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqAgent_1-seqAgent_1-output-seqAgent-Agent-seqEnd_1-seqEnd_1-input-sequentialNode-Agent | Condition | LLMNode | ToolNode"
},
{
"source": "agentMemory_0",
"sourceHandle": "agentMemory_0-output-agentMemory-AgentMemory|BaseCheckpointSaver",
"target": "seqStart_0",
"targetHandle": "seqStart_0-input-agentMemory-BaseCheckpointSaver",
"type": "buttonedge",
"id": "agentMemory_0-agentMemory_0-output-agentMemory-AgentMemory|BaseCheckpointSaver-seqStart_0-seqStart_0-input-agentMemory-BaseCheckpointSaver"
}
]
}