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
@@ -13,7 +13,7 @@
"data": {
"id": "seqStart_0",
"label": "Start",
"version": 1,
"version": 2,
"name": "seqStart",
"type": "Start",
"baseClasses": ["Start"],
@@ -91,7 +91,7 @@
"data": {
"id": "seqLLMNode_0",
"label": "LLM Node",
"version": 1,
"version": 2,
"name": "seqLLMNode",
"type": "LLMNode",
"baseClasses": ["LLMNode"],
@@ -256,11 +256,11 @@
],
"inputAnchors": [
{
"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": "seqLLMNode_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
"id": "seqLLMNode_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode"
},
{
"label": "Chat Model",
@@ -272,14 +272,15 @@
}
],
"inputs": {
"llmNodeName": "supervisor",
"systemMessagePrompt": "You are a supervisor tasked with managing a conversation between the following workers:\n- agent1: software engineer\n- agent2: code reviewer\n\nGiven the following user request, respond with the worker to act next.\nEach worker will perform a task and respond with their results and status.\nWhen finished, respond with FINISH.\nSelect strategically to minimize the number of steps taken.",
"humanMessagePrompt": "Given the conversation above, who should act next? Or should we FINISH? Select one of: agent1, agent2",
"sequentialNode": ["{{seqStart_0.data.instance}}"],
"llmNodeName": "Supervisor",
"systemMessagePrompt": "You are a supervisor tasked with managing a conversation between the following workers:\n- software_engineer\n- code_reviewer\n\nGiven the following user request, respond with the worker to act next.\nEach worker will perform a task and respond with their results and status.\nWhen finished, respond with FINISH.\nSelect strategically to minimize the number of steps taken.",
"humanMessagePrompt": "Given the conversation above, who should act next? Or should we FINISH? Select one of: software_engineer, code_reviewer",
"sequentialNode": ["{{seqStart_0.data.instance}}", "{{seqStart_0.data.instance}}"],
"model": "",
"promptValues": "",
"llmStructuredOutput": "[{\"key\":\"next\",\"type\":\"Enum\",\"enumValues\":\"FINISH, agent1, agent2\",\"description\":\"\",\"actions\":\"\",\"id\":0},{\"key\":\"instructions\",\"type\":\"String\",\"enumValues\":\"The specific instructions of the sub-task the next role should accomplish.\",\"description\":\"\",\"actions\":\"\",\"id\":1},{\"key\":\"reasoning\",\"type\":\"String\",\"enumValues\":\"\",\"description\":\"\",\"actions\":\"\",\"id\":2}]",
"llmStructuredOutput": "[{\"key\":\"next\",\"type\":\"Enum\",\"enumValues\":\"FINISH, software_engineer, code_reviewer\",\"description\":\"\",\"actions\":\"\",\"id\":0},{\"key\":\"instructions\",\"type\":\"String\",\"enumValues\":\"The specific instructions of the sub-task the next role should accomplish.\",\"description\":\"\",\"actions\":\"\",\"id\":1},{\"key\":\"reasoning\",\"type\":\"String\",\"enumValues\":\"\",\"description\":\"\",\"actions\":\"\",\"id\":2}]",
"updateStateMemory": "updateStateMemoryUI",
"selectedUpdateStateMemoryTab_seqLLMNode_0": "updateStateMemoryUI",
"updateStateMemoryUI": "[{\"key\":\"next\",\"value\":\"$flow.output.next\",\"actions\":\"\",\"id\":1}]"
},
"outputAnchors": [
@@ -295,7 +296,7 @@
"selected": false
},
"width": 300,
"height": 431,
"height": 450,
"selected": false,
"positionAbsolute": {
"x": 410.6133428124564,
@@ -306,14 +307,14 @@
{
"id": "seqAgent_0",
"position": {
"x": 1572.857390926285,
"y": 37.72211705823145
"x": 1154.6468303487545,
"y": -688.2924668487278
},
"type": "customNode",
"data": {
"id": "seqAgent_0",
"label": "Agent",
"version": 1,
"version": 2,
"name": "seqAgent",
"type": "Agent",
"baseClasses": ["Agent"],
@@ -346,6 +347,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",
@@ -356,6 +365,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",
@@ -463,14 +503,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",
@@ -482,15 +523,20 @@
}
],
"inputs": {
"agentName": "agent2",
"agentName": "Code Reviewer",
"systemMessagePrompt": "As a Quality Assurance Engineer at {company}, you are an integral part of our development team, ensuring that our software products are of the highest quality. Your meticulous attention to detail and expertise in testing methodologies are crucial in identifying defects and ensuring that our code meets the highest standards.\n\nYour goal is to ensure the delivery of high-quality software through thorough code review and testing.\n\nReview the codebase for the new feature designed and implemented by the Senior Software Engineer. Your expertise goes beyond mere code inspection; you are adept at ensuring that developments not only function as intended but also adhere to the team's coding standards, enhance maintainability, and seamlessly integrate with existing systems. \n\nWith a deep appreciation for collaborative development, you provide constructive feedback, guiding contributors towards best practices and fostering a culture of continuous improvement. Your meticulous approach to reviewing code, coupled with your ability to foresee potential issues and recommend proactive solutions, ensures the delivery of high-quality software that is robust, scalable, and aligned with the team's strategic goals.\n\nAlways pass back the review and feedback to Senior Software Engineer.",
"humanMessagePrompt": "",
"tools": "",
"sequentialNode": ["{{seqCondition_0.data.instance}}"],
"sequentialNode": ["{{seqCondition_0.data.instance}}", "{{seqCondition_0.data.instance}}"],
"model": "",
"interrupt": "",
"promptValues": "{\"company\":\"FlowiseAI Inc\"}",
"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": [
{
@@ -505,25 +551,25 @@
"selected": false
},
"width": 300,
"height": 762,
"height": 877,
"selected": false,
"positionAbsolute": {
"x": 1572.857390926285,
"y": 37.72211705823145
"x": 1154.6468303487545,
"y": -688.2924668487278
},
"dragging": false
},
{
"id": "seqAgent_1",
"position": {
"x": 1194.601416892626,
"y": -733.5332098804579
"x": 1158.54031452547,
"y": 235.4947694226982
},
"type": "customNode",
"data": {
"id": "seqAgent_1",
"label": "Agent",
"version": 1,
"version": 2,
"name": "seqAgent",
"type": "Agent",
"baseClasses": ["Agent"],
@@ -556,6 +602,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",
@@ -566,6 +620,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",
@@ -673,14 +758,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",
@@ -692,15 +778,20 @@
}
],
"inputs": {
"agentName": "agent1",
"agentName": "Software Engineer",
"systemMessagePrompt": "As a Senior Software Engineer at {company}, you are a pivotal part of our innovative development team. Your expertise and leadership drive the creation of robust, scalable software solutions that meet the needs of our diverse clientele. By applying best practices in software development, you ensure that our products are reliable, efficient, and maintainable.\n\nYour goal is to lead the development of high-quality software solutions.\n\nUtilize your deep technical knowledge and experience to architect, design, and implement software systems that address complex problems. Collaborate closely with other engineers, reviewers to ensure that the solutions you develop align with business objectives and user needs.\n\nDesign and implement new feature for the given task, ensuring it integrates seamlessly with existing systems and meets performance requirements. Use your understanding of {technology} to build this feature. Make sure to adhere to our coding standards and follow best practices.\n\nThe output should be a fully functional, well-documented feature that enhances our product's capabilities. Include detailed comments in the code. Pass the code to Quality Assurance Engineer for review if neccessary. Once ther review is good enough, produce a finalized version of the code.",
"humanMessagePrompt": "",
"tools": "",
"sequentialNode": ["{{seqCondition_0.data.instance}}"],
"sequentialNode": ["{{seqCondition_0.data.instance}}", "{{seqCondition_0.data.instance}}"],
"model": "",
"interrupt": "",
"promptValues": "{\"company\":\"FlowiseAI Inc\",\"technology\":\"React, Node\"}",
"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": [
{
@@ -715,11 +806,11 @@
"selected": false
},
"width": 300,
"height": 762,
"height": 877,
"selected": false,
"positionAbsolute": {
"x": 1194.601416892626,
"y": -733.5332098804579
"x": 1158.54031452547,
"y": 235.4947694226982
},
"dragging": false
},
@@ -733,7 +824,7 @@
"data": {
"id": "seqCondition_0",
"label": "Condition",
"version": 1,
"version": 2,
"name": "seqCondition",
"type": "Condition",
"baseClasses": ["Condition"],
@@ -857,8 +948,8 @@
"conditionName": "",
"sequentialNode": ["{{seqLLMNode_0.data.instance}}"],
"condition": "",
"conditionUI": "[{\"variable\":\"$flow.state.next\",\"operation\":\"Is\",\"value\":\"agent1\",\"output\":\"Agent 1\",\"actions\":\"\",\"id\":0},{\"variable\":\"$flow.state.next\",\"operation\":\"Is\",\"value\":\"agent2\",\"output\":\"Agent 2\",\"actions\":\"\",\"id\":1}]",
"selectedConditionFunctionTab_seqCondition_0": "conditionUI"
"selectedConditionFunctionTab_seqCondition_0": "conditionUI",
"conditionUI": "[{\"variable\":\"$flow.state.next\",\"operation\":\"Is\",\"value\":\"software_engineer\",\"output\":\"Software Engineer\",\"actions\":\"\",\"id\":0},{\"variable\":\"$flow.state.next\",\"operation\":\"Is\",\"value\":\"code_reviewer\",\"output\":\"Code Reviewer\",\"actions\":\"\",\"id\":1}]"
},
"outputAnchors": [
{
@@ -867,24 +958,24 @@
"type": "options",
"options": [
{
"id": "seqCondition_0-output-agent1-Agent|LLMNode|ToolNode",
"name": "agent1",
"label": "Agent 1",
"type": "Agent | LLMNode | ToolNode",
"id": "seqCondition_0-output-codeReviewer-Condition",
"name": "codeReviewer",
"label": "Code Reviewer",
"type": "Condition",
"isAnchor": true
},
{
"id": "seqCondition_0-output-agent2-Agent|LLMNode|ToolNode",
"name": "agent2",
"label": "Agent 2",
"type": "Agent | LLMNode | ToolNode",
"isAnchor": true
},
{
"id": "seqCondition_0-output-end-Agent|LLMNode|ToolNode",
"id": "seqCondition_0-output-end-Condition",
"name": "end",
"label": "End",
"type": "Agent | LLMNode | ToolNode",
"type": "Condition",
"isAnchor": true
},
{
"id": "seqCondition_0-output-softwareEngineer-Condition",
"name": "softwareEngineer",
"label": "Software Engineer",
"type": "Condition",
"isAnchor": true
}
]
@@ -1170,7 +1261,7 @@
"data": {
"id": "seqState_0",
"label": "State",
"version": 1,
"version": 2,
"name": "seqState",
"type": "State",
"baseClasses": ["State"],
@@ -1178,7 +1269,7 @@
"description": "A centralized state object, updated by nodes in the graph, passing from one node to another",
"inputParams": [
{
"label": "State",
"label": "Custom State",
"name": "stateMemory",
"type": "tabs",
"tabIdentifier": "selectedStateTab",
@@ -1186,7 +1277,7 @@
"default": "stateMemoryUI",
"tabs": [
{
"label": "State (Table)",
"label": "Custom State (Table)",
"name": "stateMemoryUI",
"type": "datagrid",
"description": "Structure for state. By default, state contains \"messages\" that got updated with each message sent and received.",
@@ -1218,7 +1309,7 @@
"additionalParams": true
},
{
"label": "State (Code)",
"label": "Custom State (Code)",
"name": "stateMemoryCode",
"type": "code",
"description": "JSON object representing the state",
@@ -1234,6 +1325,7 @@
"inputAnchors": [],
"inputs": {
"stateMemory": "stateMemoryUI",
"selectedStateTab_seqState_0": "stateMemoryUI",
"stateMemoryUI": "[{\"key\":\"next\",\"type\":\"Replace\",\"defaultValue\":\"\",\"actions\":\"\",\"id\":1}]"
},
"outputAnchors": [
@@ -1257,121 +1349,17 @@
},
"dragging": false
},
{
"id": "seqLoop_0",
"position": {
"x": 1548.204371709928,
"y": -256.0852771782037
},
"type": "customNode",
"data": {
"id": "seqLoop_0",
"label": "Loop",
"version": 1,
"name": "seqLoop",
"type": "Loop",
"baseClasses": ["Loop"],
"category": "Sequential Agents",
"description": "Loop back to the specific sequential node",
"inputParams": [
{
"label": "Loop To",
"name": "loopToName",
"description": "Name of the agent to loop back to",
"type": "string",
"placeholder": "agent1",
"id": "seqLoop_0-input-loopToName-string"
}
],
"inputAnchors": [
{
"label": "Start | Agent | LLM | Tool Node",
"name": "sequentialNode",
"type": "Start | Agent | LLMNode | ToolNode",
"list": true,
"id": "seqLoop_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
}
],
"inputs": {
"sequentialNode": ["{{seqAgent_1.data.instance}}"],
"loopToName": "supervisor"
},
"outputAnchors": [],
"outputs": {},
"selected": false
},
"width": 300,
"height": 241,
"selected": false,
"positionAbsolute": {
"x": 1548.204371709928,
"y": -256.0852771782037
},
"dragging": false
},
{
"id": "seqLoop_1",
"position": {
"x": 1963.5723995283763,
"y": 573.1052015594319
},
"type": "customNode",
"data": {
"id": "seqLoop_1",
"label": "Loop",
"version": 1,
"name": "seqLoop",
"type": "Loop",
"baseClasses": ["Loop"],
"category": "Sequential Agents",
"description": "Loop back to the specific sequential node",
"inputParams": [
{
"label": "Loop To",
"name": "loopToName",
"description": "Name of the agent to loop back to",
"type": "string",
"placeholder": "agent1",
"id": "seqLoop_1-input-loopToName-string"
}
],
"inputAnchors": [
{
"label": "Start | Agent | LLM | Tool Node",
"name": "sequentialNode",
"type": "Start | Agent | LLMNode | ToolNode",
"list": true,
"id": "seqLoop_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
}
],
"inputs": {
"sequentialNode": ["{{seqAgent_0.data.instance}}"],
"loopToName": "supervisor"
},
"outputAnchors": [],
"outputs": {},
"selected": false
},
"width": 300,
"height": 241,
"selected": false,
"positionAbsolute": {
"x": 1963.5723995283763,
"y": 573.1052015594319
},
"dragging": false
},
{
"id": "seqLLMNode_1",
"position": {
"x": 1190.379211292534,
"y": 487.407396588448
"x": 1575.754462365703,
"y": 195.9021865478319
},
"type": "customNode",
"data": {
"id": "seqLLMNode_1",
"label": "LLM Node",
"version": 1,
"version": 2,
"name": "seqLLMNode",
"type": "LLMNode",
"baseClasses": ["LLMNode"],
@@ -1536,11 +1524,11 @@
],
"inputAnchors": [
{
"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": "seqLLMNode_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
"id": "seqLLMNode_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode"
},
{
"label": "Chat Model",
@@ -1555,11 +1543,12 @@
"llmNodeName": "summarize",
"systemMessagePrompt": "",
"humanMessagePrompt": "Given the above conversations, reasonings and instructions, generate a final summarized answers",
"sequentialNode": ["{{seqCondition_0.data.instance}}"],
"sequentialNode": ["{{seqCondition_0.data.instance}}", "{{seqCondition_0.data.instance}}"],
"model": "",
"promptValues": "",
"llmStructuredOutput": "",
"updateStateMemory": "updateStateMemoryUI"
"updateStateMemory": "updateStateMemoryUI",
"selectedUpdateStateMemoryTab_seqLLMNode_1": "updateStateMemoryUI"
},
"outputAnchors": [
{
@@ -1574,25 +1563,129 @@
"selected": false
},
"width": 300,
"height": 431,
"height": 450,
"selected": false,
"positionAbsolute": {
"x": 1190.379211292534,
"y": 487.407396588448
"x": 1575.754462365703,
"y": 195.9021865478319
},
"dragging": false
},
{
"id": "seqLoop_2",
"position": {
"x": 1535.7329695356757,
"y": -143.07159321335735
},
"type": "customNode",
"data": {
"id": "seqLoop_2",
"label": "Loop",
"version": 2,
"name": "seqLoop",
"type": "Loop",
"baseClasses": ["Loop"],
"category": "Sequential Agents",
"description": "Loop back to the specific sequential node",
"inputParams": [
{
"label": "Loop To",
"name": "loopToName",
"description": "Name of the agent/llm to loop back to",
"type": "string",
"placeholder": "Agent",
"id": "seqLoop_2-input-loopToName-string"
}
],
"inputAnchors": [
{
"label": "Agent | Condition | LLM | Tool Node",
"name": "sequentialNode",
"type": "Agent | Condition | LLMNode | ToolNode",
"list": true,
"id": "seqLoop_2-input-sequentialNode-Agent | Condition | LLMNode | ToolNode"
}
],
"inputs": {
"sequentialNode": ["{{seqAgent_0.data.instance}}"],
"loopToName": "Supervisor"
},
"outputAnchors": [],
"outputs": {},
"selected": false
},
"width": 300,
"height": 241,
"selected": false,
"dragging": false,
"positionAbsolute": {
"x": 1535.7329695356757,
"y": -143.07159321335735
}
},
{
"id": "seqLoop_3",
"position": {
"x": 1507.4447054331383,
"y": 868.2338484523428
},
"type": "customNode",
"data": {
"id": "seqLoop_3",
"label": "Loop",
"version": 2,
"name": "seqLoop",
"type": "Loop",
"baseClasses": ["Loop"],
"category": "Sequential Agents",
"description": "Loop back to the specific sequential node",
"inputParams": [
{
"label": "Loop To",
"name": "loopToName",
"description": "Name of the agent/llm to loop back to",
"type": "string",
"placeholder": "Agent",
"id": "seqLoop_3-input-loopToName-string"
}
],
"inputAnchors": [
{
"label": "Agent | Condition | LLM | Tool Node",
"name": "sequentialNode",
"type": "Agent | Condition | LLMNode | ToolNode",
"list": true,
"id": "seqLoop_3-input-sequentialNode-Agent | Condition | LLMNode | ToolNode"
}
],
"inputs": {
"sequentialNode": ["{{seqAgent_1.data.instance}}"],
"loopToName": "Supervisor"
},
"outputAnchors": [],
"outputs": {},
"selected": false
},
"width": 300,
"height": 241,
"positionAbsolute": {
"x": 1507.4447054331383,
"y": 868.2338484523428
},
"selected": false,
"dragging": false
},
{
"id": "seqEnd_0",
"position": {
"x": 1531.4101572553902,
"y": 820.7626362717671
"x": 1928.660679747908,
"y": 456.9218256101676
},
"type": "customNode",
"data": {
"id": "seqEnd_0",
"label": "End",
"version": 1,
"version": 2,
"name": "seqEnd",
"type": "End",
"baseClasses": ["End"],
@@ -1601,10 +1694,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": {
@@ -1618,8 +1711,8 @@
"height": 143,
"selected": false,
"positionAbsolute": {
"x": 1531.4101572553902,
"y": 820.7626362717671
"x": 1928.660679747908,
"y": 456.9218256101676
},
"dragging": false
}
@@ -1641,14 +1734,6 @@
"type": "buttonedge",
"id": "chatOpenAI_0-chatOpenAI_0-output-chatOpenAI-ChatOpenAI|BaseChatModel|BaseLanguageModel|Runnable-seqStart_0-seqStart_0-input-model-BaseChatModel"
},
{
"source": "seqStart_0",
"sourceHandle": "seqStart_0-output-seqStart-Start",
"target": "seqLLMNode_0",
"targetHandle": "seqLLMNode_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqStart_0-seqStart_0-output-seqStart-Start-seqLLMNode_0-seqLLMNode_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
},
{
"source": "seqLLMNode_0",
"sourceHandle": "seqLLMNode_0-output-seqLLMNode-LLMNode",
@@ -1666,52 +1751,60 @@
"id": "seqState_0-seqState_0-output-seqState-State-seqStart_0-seqStart_0-input-state-State"
},
{
"source": "seqCondition_0",
"sourceHandle": "seqCondition_0-output-agent1-Agent|LLMNode|ToolNode",
"target": "seqAgent_1",
"targetHandle": "seqAgent_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"source": "seqStart_0",
"sourceHandle": "seqStart_0-output-seqStart-Start",
"target": "seqLLMNode_0",
"targetHandle": "seqLLMNode_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqCondition_0-seqCondition_0-output-agent1-Agent|LLMNode|ToolNode-seqAgent_1-seqAgent_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
"id": "seqStart_0-seqStart_0-output-seqStart-Start-seqLLMNode_0-seqLLMNode_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode"
},
{
"source": "seqCondition_0",
"sourceHandle": "seqCondition_0-output-agent2-Agent|LLMNode|ToolNode",
"sourceHandle": "seqCondition_0-output-codeReviewer-Condition",
"target": "seqAgent_0",
"targetHandle": "seqAgent_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"targetHandle": "seqAgent_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqCondition_0-seqCondition_0-output-agent2-Agent|LLMNode|ToolNode-seqAgent_0-seqAgent_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
"id": "seqCondition_0-seqCondition_0-output-codeReviewer-Condition-seqAgent_0-seqAgent_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode"
},
{
"source": "seqCondition_0",
"sourceHandle": "seqCondition_0-output-end-Condition",
"target": "seqLLMNode_1",
"targetHandle": "seqLLMNode_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqCondition_0-seqCondition_0-output-end-Condition-seqLLMNode_1-seqLLMNode_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode"
},
{
"source": "seqCondition_0",
"sourceHandle": "seqCondition_0-output-softwareEngineer-Condition",
"target": "seqAgent_1",
"targetHandle": "seqAgent_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqCondition_0-seqCondition_0-output-softwareEngineer-Condition-seqAgent_1-seqAgent_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode"
},
{
"source": "seqAgent_0",
"sourceHandle": "seqAgent_0-output-seqAgent-Agent",
"target": "seqLoop_1",
"targetHandle": "seqLoop_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"target": "seqLoop_2",
"targetHandle": "seqLoop_2-input-sequentialNode-Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqAgent_0-seqAgent_0-output-seqAgent-Agent-seqLoop_1-seqLoop_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
},
{
"source": "seqAgent_1",
"sourceHandle": "seqAgent_1-output-seqAgent-Agent",
"target": "seqLoop_0",
"targetHandle": "seqLoop_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqAgent_1-seqAgent_1-output-seqAgent-Agent-seqLoop_0-seqLoop_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
},
{
"source": "seqCondition_0",
"sourceHandle": "seqCondition_0-output-end-Agent|LLMNode|ToolNode",
"target": "seqLLMNode_1",
"targetHandle": "seqLLMNode_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqCondition_0-seqCondition_0-output-end-Agent|LLMNode|ToolNode-seqLLMNode_1-seqLLMNode_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
"id": "seqAgent_0-seqAgent_0-output-seqAgent-Agent-seqLoop_2-seqLoop_2-input-sequentialNode-Agent | Condition | LLMNode | ToolNode"
},
{
"source": "seqLLMNode_1",
"sourceHandle": "seqLLMNode_1-output-seqLLMNode-LLMNode",
"target": "seqEnd_0",
"targetHandle": "seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode",
"targetHandle": "seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqLLMNode_1-seqLLMNode_1-output-seqLLMNode-LLMNode-seqEnd_0-seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode"
"id": "seqLLMNode_1-seqLLMNode_1-output-seqLLMNode-LLMNode-seqEnd_0-seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode"
},
{
"source": "seqAgent_1",
"sourceHandle": "seqAgent_1-output-seqAgent-Agent",
"target": "seqLoop_3",
"targetHandle": "seqLoop_3-input-sequentialNode-Agent | Condition | LLMNode | ToolNode",
"type": "buttonedge",
"id": "seqAgent_1-seqAgent_1-output-seqAgent-Agent-seqLoop_3-seqLoop_3-input-sequentialNode-Agent | Condition | LLMNode | ToolNode"
}
]
}