diff --git a/packages/components/nodes/sequentialagents/Agent/Agent.ts b/packages/components/nodes/sequentialagents/Agent/Agent.ts index eea8b140..1116f6d3 100644 --- a/packages/components/nodes/sequentialagents/Agent/Agent.ts +++ b/packages/components/nodes/sequentialagents/Agent/Agent.ts @@ -162,17 +162,19 @@ class Agent_SeqAgents implements INode { baseClasses: string[] inputs?: INodeParams[] badge?: string + documentation?: string outputs: INodeOutputsValue[] constructor() { this.label = 'Agent' this.name = 'seqAgent' - this.version = 1.0 + this.version = 2.0 this.type = 'Agent' this.icon = 'seqAgent.png' this.category = 'Sequential Agents' this.description = 'Agent that can execute tools' this.baseClasses = [this.type] + this.documentation = 'https://docs.flowiseai.com/using-flowise/agentflows/sequential-agents#id-4.-agent-node' this.inputs = [ { label: 'Agent Name', @@ -201,12 +203,13 @@ class Agent_SeqAgents implements INode { label: 'Tools', name: 'tools', type: 'Tool', - list: true + list: true, + optional: true }, { - 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 }, { diff --git a/packages/components/nodes/sequentialagents/Condition/Condition.ts b/packages/components/nodes/sequentialagents/Condition/Condition.ts index ca2dcf58..bb402805 100644 --- a/packages/components/nodes/sequentialagents/Condition/Condition.ts +++ b/packages/components/nodes/sequentialagents/Condition/Condition.ts @@ -90,17 +90,19 @@ class Condition_SeqAgents implements INode { baseClasses: string[] credential: INodeParams inputs: INodeParams[] + documentation?: string outputs: INodeOutputsValue[] constructor() { this.label = 'Condition' this.name = 'seqCondition' - this.version = 1.0 + this.version = 2.0 this.type = 'Condition' this.icon = 'condition.svg' this.category = 'Sequential Agents' this.description = 'Conditional function to determine which route to take next' this.baseClasses = [this.type] + this.documentation = 'https://docs.flowiseai.com/using-flowise/agentflows/sequential-agents#id-7.-conditional-node' this.inputs = [ { label: 'Condition Name', @@ -214,13 +216,13 @@ class Condition_SeqAgents implements INode { { label: 'Next', name: 'next', - baseClasses: ['Agent', 'LLMNode', 'ToolNode'], + baseClasses: ['Condition'], isAnchor: true }, { label: 'End', name: 'end', - baseClasses: ['Agent', 'LLMNode', 'ToolNode'], + baseClasses: ['Condition'], isAnchor: true } ] diff --git a/packages/components/nodes/sequentialagents/ConditionAgent/ConditionAgent.ts b/packages/components/nodes/sequentialagents/ConditionAgent/ConditionAgent.ts index 6b5aeaf5..dff6e135 100644 --- a/packages/components/nodes/sequentialagents/ConditionAgent/ConditionAgent.ts +++ b/packages/components/nodes/sequentialagents/ConditionAgent/ConditionAgent.ts @@ -143,17 +143,19 @@ class ConditionAgent_SeqAgents implements INode { baseClasses: string[] credential: INodeParams inputs: INodeParams[] + documentation?: string outputs: INodeOutputsValue[] constructor() { this.label = 'Condition Agent' this.name = 'seqConditionAgent' - this.version = 1.0 + this.version = 2.0 this.type = 'ConditionAgent' this.icon = 'condition.svg' this.category = 'Sequential Agents' this.description = 'Uses an agent to determine which route to take next' this.baseClasses = [this.type] + this.documentation = 'https://docs.flowiseai.com/using-flowise/agentflows/sequential-agents#id-8.-conditional-agent-node' this.inputs = [ { label: 'Name', @@ -330,13 +332,13 @@ class ConditionAgent_SeqAgents implements INode { { label: 'Next', name: 'next', - baseClasses: ['Agent', 'LLMNode', 'ToolNode'], + baseClasses: ['Condition'], isAnchor: true }, { label: 'End', name: 'end', - baseClasses: ['Agent', 'LLMNode', 'ToolNode'], + baseClasses: ['Condition'], isAnchor: true } ] diff --git a/packages/components/nodes/sequentialagents/End/End.ts b/packages/components/nodes/sequentialagents/End/End.ts index 522e558f..8b223386 100644 --- a/packages/components/nodes/sequentialagents/End/End.ts +++ b/packages/components/nodes/sequentialagents/End/End.ts @@ -11,23 +11,25 @@ class End_SeqAgents implements INode { category: string baseClasses: string[] credential: INodeParams + documentation?: string inputs: INodeParams[] hideOutput: boolean constructor() { this.label = 'End' this.name = 'seqEnd' - this.version = 1.0 + this.version = 2.0 this.type = 'End' this.icon = 'end.svg' this.category = 'Sequential Agents' this.description = 'End conversation' this.baseClasses = [this.type] + this.documentation = 'https://docs.flowiseai.com/using-flowise/agentflows/sequential-agents#id-10.-end-node' this.inputs = [ { - label: 'Start | Agent | LLM | Tool Node', + label: 'Agent | Condition | LLM | Tool Node', name: 'sequentialNode', - type: 'Start | Agent | LLMNode | ToolNode' + type: 'Agent | Condition | LLMNode | ToolNode' } ] this.hideOutput = true diff --git a/packages/components/nodes/sequentialagents/LLMNode/LLMNode.ts b/packages/components/nodes/sequentialagents/LLMNode/LLMNode.ts index 143e4cd4..17b5830d 100644 --- a/packages/components/nodes/sequentialagents/LLMNode/LLMNode.ts +++ b/packages/components/nodes/sequentialagents/LLMNode/LLMNode.ts @@ -141,17 +141,19 @@ class LLMNode_SeqAgents implements INode { baseClasses: string[] inputs?: INodeParams[] badge?: string + documentation?: string outputs: INodeOutputsValue[] constructor() { this.label = 'LLM Node' this.name = 'seqLLMNode' - this.version = 1.0 + this.version = 2.0 this.type = 'LLMNode' this.icon = 'llmNode.svg' this.category = 'Sequential Agents' this.description = 'Run Chat Model and return the output' this.baseClasses = [this.type] + this.documentation = 'https://docs.flowiseai.com/using-flowise/agentflows/sequential-agents#id-5.-llm-node' this.inputs = [ { label: 'Name', @@ -177,9 +179,9 @@ class LLMNode_SeqAgents implements INode { additionalParams: true }, { - 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 }, { diff --git a/packages/components/nodes/sequentialagents/Loop/Loop.ts b/packages/components/nodes/sequentialagents/Loop/Loop.ts index 899a9326..357c0883 100644 --- a/packages/components/nodes/sequentialagents/Loop/Loop.ts +++ b/packages/components/nodes/sequentialagents/Loop/Loop.ts @@ -9,6 +9,7 @@ class Loop_SeqAgents implements INode { icon: string category: string baseClasses: string[] + documentation?: string credential: INodeParams inputs: INodeParams[] hideOutput: boolean @@ -16,25 +17,26 @@ class Loop_SeqAgents implements INode { constructor() { this.label = 'Loop' this.name = 'seqLoop' - this.version = 1.0 + this.version = 2.0 this.type = 'Loop' this.icon = 'loop.svg' this.category = 'Sequential Agents' this.description = 'Loop back to the specific sequential node' this.baseClasses = [this.type] + this.documentation = 'https://docs.flowiseai.com/using-flowise/agentflows/sequential-agents#id-9.-loop-node' this.inputs = [ { - label: 'Start | Agent | LLM | Tool Node', + label: 'Agent | Condition | LLM | Tool Node', name: 'sequentialNode', - type: 'Start | Agent | LLMNode | ToolNode', + type: 'Agent | Condition | LLMNode | ToolNode', list: true }, { label: 'Loop To', name: 'loopToName', - description: 'Name of the agent to loop back to', + description: 'Name of the agent/llm to loop back to', type: 'string', - placeholder: 'agent1' + placeholder: 'Agent' } ] this.hideOutput = true diff --git a/packages/components/nodes/sequentialagents/Start/Start.ts b/packages/components/nodes/sequentialagents/Start/Start.ts index bf9655d6..72765f40 100644 --- a/packages/components/nodes/sequentialagents/Start/Start.ts +++ b/packages/components/nodes/sequentialagents/Start/Start.ts @@ -12,18 +12,20 @@ class Start_SeqAgents implements INode { icon: string category: string baseClasses: string[] + documentation?: string credential: INodeParams inputs: INodeParams[] constructor() { this.label = 'Start' this.name = 'seqStart' - this.version = 1.0 + this.version = 2.0 this.type = 'Start' this.icon = 'start.svg' this.category = 'Sequential Agents' this.description = 'Starting point of the conversation' this.baseClasses = [this.type] + this.documentation = 'https://docs.flowiseai.com/using-flowise/agentflows/sequential-agents#id-1.-start-node' this.inputs = [ { label: 'Chat Model', diff --git a/packages/components/nodes/sequentialagents/State/State.ts b/packages/components/nodes/sequentialagents/State/State.ts index 06331186..d10e616c 100644 --- a/packages/components/nodes/sequentialagents/State/State.ts +++ b/packages/components/nodes/sequentialagents/State/State.ts @@ -34,21 +34,23 @@ class State_SeqAgents implements INode { icon: string category: string baseClasses: string[] + documentation?: string credential: INodeParams inputs: INodeParams[] constructor() { this.label = 'State' this.name = 'seqState' - this.version = 1.0 + this.version = 2.0 this.type = 'State' this.icon = 'state.svg' this.category = 'Sequential Agents' this.description = 'A centralized state object, updated by nodes in the graph, passing from one node to another' this.baseClasses = [this.type] + this.documentation = 'https://docs.flowiseai.com/using-flowise/agentflows/sequential-agents#id-3.-state-node' this.inputs = [ { - label: 'State', + label: 'Custom State', name: 'stateMemory', type: 'tabs', tabIdentifier: TAB_IDENTIFIER, @@ -56,7 +58,7 @@ class State_SeqAgents implements INode { default: 'stateMemoryUI', tabs: [ { - label: 'State (Table)', + label: 'Custom State (Table)', name: 'stateMemoryUI', type: 'datagrid', description: @@ -80,7 +82,7 @@ class State_SeqAgents implements INode { additionalParams: true }, { - label: 'State (Code)', + label: 'Custom State (Code)', name: 'stateMemoryCode', type: 'code', description: `JSON object representing the state`, diff --git a/packages/components/nodes/sequentialagents/ToolNode/ToolNode.ts b/packages/components/nodes/sequentialagents/ToolNode/ToolNode.ts index c498d2fb..44cefc87 100644 --- a/packages/components/nodes/sequentialagents/ToolNode/ToolNode.ts +++ b/packages/components/nodes/sequentialagents/ToolNode/ToolNode.ts @@ -136,18 +136,20 @@ class ToolNode_SeqAgents implements INode { icon: string category: string baseClasses: string[] + documentation?: string credential: INodeParams inputs: INodeParams[] constructor() { this.label = 'Tool Node' this.name = 'seqToolNode' - this.version = 1.0 + this.version = 2.0 this.type = 'ToolNode' this.icon = 'toolNode.svg' this.category = 'Sequential Agents' this.description = `Execute tool and return tool's output` this.baseClasses = [this.type] + this.documentation = 'https://docs.flowiseai.com/using-flowise/agentflows/sequential-agents#id-6.-tool-node' this.inputs = [ { label: 'Tools', diff --git a/packages/components/src/Interface.ts b/packages/components/src/Interface.ts index baa3d3b0..a350d43f 100644 --- a/packages/components/src/Interface.ts +++ b/packages/components/src/Interface.ts @@ -118,6 +118,7 @@ export interface INodeProperties { deprecateMessage?: string hideOutput?: boolean author?: string + documentation?: string } export interface INode extends INodeProperties { diff --git a/packages/server/marketplaces/agentflows/Agentic RAG.json b/packages/server/marketplaces/agentflows/Agentic RAG.json index b77f50f6..78e7b825 100644 --- a/packages/server/marketplaces/agentflows/Agentic RAG.json +++ b/packages/server/marketplaces/agentflows/Agentic RAG.json @@ -13,7 +13,7 @@ "data": { "id": "seqLLMNode_0", "label": "LLM Node", - "version": 1, + "version": 2, "name": "seqLLMNode", "type": "LLMNode", "baseClasses": ["LLMNode"], @@ -57,6 +57,40 @@ "additionalParams": true, "id": "seqLLMNode_0-input-promptValues-json" }, + { + "label": "JSON Structured Output", + "name": "llmStructuredOutput", + "type": "datagrid", + "description": "Instruct the LLM to give output in a JSON structured schema", + "datagrid": [ + { + "field": "key", + "headerName": "Key", + "editable": true + }, + { + "field": "type", + "headerName": "Type", + "type": "singleSelect", + "valueOptions": ["String", "String Array", "Number", "Boolean", "Enum"], + "editable": true + }, + { + "field": "enumValues", + "headerName": "Enum Values", + "editable": true + }, + { + "field": "description", + "headerName": "Description", + "flex": 1, + "editable": true + } + ], + "optional": true, + "additionalParams": true, + "id": "seqLLMNode_0-input-llmStructuredOutput-datagrid" + }, { "label": "Update State", "name": "updateStateMemory", @@ -92,6 +126,10 @@ "label": "LLM Node Output (string)", "value": "$flow.output.content" }, + { + "label": "LLM JSON Output Key (string)", + "value": "$flow.output." + }, { "label": "Global variable (string)", "value": "$vars." @@ -140,11 +178,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", @@ -159,9 +197,10 @@ "llmNodeName": "Agent", "systemMessagePrompt": "You are an expert financial analyst that always answers questions with the most relevant information using the tools at your disposal.\n\nThe tools available are:\n- search_apple\n- search_tesla\n\nThe current date is: 2024-07-10", "humanMessagePrompt": "{text}", - "sequentialNode": ["{{seqStart_0.data.instance}}"], + "sequentialNode": ["{{seqStart_0.data.instance}}", "{{seqStart_0.data.instance}}"], "model": "", "promptValues": "{\"text\":\"{{question}}\"}", + "llmStructuredOutput": "", "updateStateMemory": "updateStateMemoryUI" }, "outputAnchors": [ @@ -177,7 +216,7 @@ "selected": false }, "width": 300, - "height": 431, + "height": 450, "selected": false, "positionAbsolute": { "x": 777.3229608822006, @@ -195,7 +234,7 @@ "data": { "id": "seqStart_0", "label": "Start", - "version": 1, + "version": 2, "name": "seqStart", "type": "Start", "baseClasses": ["Start"], @@ -222,7 +261,7 @@ "label": "State", "name": "state", "type": "State", - "description": "State is an object that is updated by nodes in the graph, passing from one node to another. Agent Memory must be connected when using State. By default, state contains \"messages\" that got updated with each message sent and received.", + "description": "State is an object that is updated by nodes in the graph, passing from one node to another. By default, state contains \"messages\" that got updated with each message sent and received.", "optional": true, "id": "seqStart_0-input-state-State" }, @@ -273,7 +312,7 @@ "data": { "id": "seqConditionAgent_0", "label": "Condition Agent", - "version": 1, + "version": 2, "name": "seqConditionAgent", "type": "ConditionAgent", "baseClasses": ["ConditionAgent"], @@ -334,7 +373,7 @@ "field": "type", "headerName": "Type", "type": "singleSelect", - "valueOptions": ["String", "Number", "Boolean", "Enum"], + "valueOptions": ["String", "String Array", "Number", "Boolean", "Enum"], "editable": true }, { @@ -483,37 +522,39 @@ "promptValues": "{\"context\":\"{{seqToolNode_0.data.instance}}\",\"question\":\"{{question}}\"}", "conditionAgentStructuredOutput": "[{\"key\":\"score\",\"type\":\"Enum\",\"enumValues\":\"yes, no\",\"description\":\"grading score\",\"actions\":\"\",\"id\":1}]", "condition": "", - "conditionUI": "[{\"variable\":\"$flow.output.score\",\"operation\":\"Is\",\"value\":\"yes\",\"output\":\"Generate\",\"actions\":\"\",\"id\":1},{\"variable\":\"$flow.output.score\",\"operation\":\"Is\",\"value\":\"no\",\"output\":\"Rewrite\",\"actions\":\"\",\"id\":2}]", - "selectedConditionFunctionTab_seqConditionAgent_0": "conditionUI" + "selectedConditionFunctionTab_seqConditionAgent_0": "conditionUI", + "conditionUI": "[{\"variable\":\"$flow.output.score\",\"operation\":\"Is\",\"value\":\"yes\",\"output\":\"Generate\",\"actions\":\"\",\"id\":1},{\"variable\":\"$flow.output.score\",\"operation\":\"Is\",\"value\":\"no\",\"output\":\"Rewrite\",\"actions\":\"\",\"id\":2}]" }, "outputAnchors": [ { "name": "output", "label": "Output", "type": "options", + "description": "", "options": [ { - "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-generate-Agent|LLMNode|ToolNode", + "id": "seqConditionAgent_0-output-generate-Condition", "name": "generate", "label": "Generate", - "type": "Agent | LLMNode | ToolNode", + "type": "Condition", "isAnchor": true }, { - "id": "seqConditionAgent_0-output-rewrite-Agent|LLMNode|ToolNode", + "id": "seqConditionAgent_0-output-rewrite-Condition", "name": "rewrite", "label": "Rewrite", - "type": "Agent | LLMNode | ToolNode", + "type": "Condition", "isAnchor": true } - ] + ], + "default": "next" } ], "outputs": { @@ -540,7 +581,7 @@ "data": { "id": "seqLLMNode_1", "label": "LLM Node", - "version": 1, + "version": 2, "name": "seqLLMNode", "type": "LLMNode", "baseClasses": ["LLMNode"], @@ -584,6 +625,40 @@ "additionalParams": true, "id": "seqLLMNode_1-input-promptValues-json" }, + { + "label": "JSON Structured Output", + "name": "llmStructuredOutput", + "type": "datagrid", + "description": "Instruct the LLM to give output in a JSON structured schema", + "datagrid": [ + { + "field": "key", + "headerName": "Key", + "editable": true + }, + { + "field": "type", + "headerName": "Type", + "type": "singleSelect", + "valueOptions": ["String", "String Array", "Number", "Boolean", "Enum"], + "editable": true + }, + { + "field": "enumValues", + "headerName": "Enum Values", + "editable": true + }, + { + "field": "description", + "headerName": "Description", + "flex": 1, + "editable": true + } + ], + "optional": true, + "additionalParams": true, + "id": "seqLLMNode_1-input-llmStructuredOutput-datagrid" + }, { "label": "Update State", "name": "updateStateMemory", @@ -619,6 +694,10 @@ "label": "LLM Node Output (string)", "value": "$flow.output.content" }, + { + "label": "LLM JSON Output Key (string)", + "value": "$flow.output." + }, { "label": "Global variable (string)", "value": "$vars." @@ -667,11 +746,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", @@ -686,9 +765,10 @@ "llmNodeName": "Rewrite", "systemMessagePrompt": "You are a helpful assistant that can Transform the query to produce a better question.", "humanMessagePrompt": "Look at the input and try to reason about the underlying semantic intent / meaning.\n\nHere is the initial question:\n{question} \n \nFormulate an improved question:\n", - "sequentialNode": ["{{seqConditionAgent_0.data.instance}}"], + "sequentialNode": ["{{seqConditionAgent_0.data.instance}}", "{{seqConditionAgent_0.data.instance}}"], "model": "", "promptValues": "{\"question\":\"{{question}}\"}", + "llmStructuredOutput": "", "updateStateMemory": "updateStateMemoryUI" }, "outputAnchors": [ @@ -704,7 +784,7 @@ "selected": false }, "width": 300, - "height": 431, + "height": 450, "selected": false, "positionAbsolute": { "x": 2214.7883262686187, @@ -722,7 +802,7 @@ "data": { "id": "seqLLMNode_2", "label": "LLM Node", - "version": 1, + "version": 2, "name": "seqLLMNode", "type": "LLMNode", "baseClasses": ["LLMNode"], @@ -766,6 +846,40 @@ "additionalParams": true, "id": "seqLLMNode_2-input-promptValues-json" }, + { + "label": "JSON Structured Output", + "name": "llmStructuredOutput", + "type": "datagrid", + "description": "Instruct the LLM to give output in a JSON structured schema", + "datagrid": [ + { + "field": "key", + "headerName": "Key", + "editable": true + }, + { + "field": "type", + "headerName": "Type", + "type": "singleSelect", + "valueOptions": ["String", "String Array", "Number", "Boolean", "Enum"], + "editable": true + }, + { + "field": "enumValues", + "headerName": "Enum Values", + "editable": true + }, + { + "field": "description", + "headerName": "Description", + "flex": 1, + "editable": true + } + ], + "optional": true, + "additionalParams": true, + "id": "seqLLMNode_2-input-llmStructuredOutput-datagrid" + }, { "label": "Update State", "name": "updateStateMemory", @@ -801,6 +915,10 @@ "label": "LLM Node Output (string)", "value": "$flow.output.content" }, + { + "label": "LLM JSON Output Key (string)", + "value": "$flow.output." + }, { "label": "Global variable (string)", "value": "$vars." @@ -849,11 +967,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_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqLLMNode_2-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" }, { "label": "Chat Model", @@ -868,9 +986,10 @@ "llmNodeName": "Generate", "systemMessagePrompt": "You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Remember to include sources and citations.\n\nQuestion: {question} \n\nContext: {context}\n\nAnswer:", "humanMessagePrompt": "Given the user question and context, answer user query. Remember to includes sources and citations", - "sequentialNode": ["{{seqConditionAgent_0.data.instance}}"], + "sequentialNode": ["{{seqConditionAgent_0.data.instance}}", "{{seqConditionAgent_0.data.instance}}"], "model": "", "promptValues": "{\"question\":\"{{question}}\",\"context\":\"$flow.state.sources\"}", + "llmStructuredOutput": "", "updateStateMemory": "updateStateMemoryUI" }, "outputAnchors": [ @@ -886,7 +1005,7 @@ "selected": false }, "width": 300, - "height": 431, + "height": 450, "selected": false, "positionAbsolute": { "x": 2205.875202632436, @@ -897,14 +1016,14 @@ { "id": "seqLoop_0", "position": { - "x": 2570.607230504145, - "y": 805.1405051032167 + "x": 2559.3078506376914, + "y": 827.739264836123 }, "type": "customNode", "data": { "id": "seqLoop_0", "label": "Loop", - "version": 1, + "version": 2, "name": "seqLoop", "type": "Loop", "baseClasses": ["Loop"], @@ -914,23 +1033,23 @@ { "label": "Loop To", "name": "loopToName", - "description": "Name of the agent to loop back to", + "description": "Name of the agent/llm to loop back to", "type": "string", - "placeholder": "agent1", + "placeholder": "Agent", "id": "seqLoop_0-input-loopToName-string" } ], "inputAnchors": [ { - "label": "Start | Agent | LLM | Tool Node", + "label": "Agent | Condition | LLM | Tool Node", "name": "sequentialNode", - "type": "Start | Agent | LLMNode | ToolNode", + "type": "Agent | Condition | LLMNode | ToolNode", "list": true, - "id": "seqLoop_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqLoop_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" } ], "inputs": { - "sequentialNode": ["{{seqLLMNode_1.data.instance}}"], + "sequentialNode": ["{{seqLLMNode_1.data.instance}}", "{{seqLLMNode_1.data.instance}}"], "loopToName": "Agent" }, "outputAnchors": [], @@ -941,8 +1060,8 @@ "height": 241, "selected": false, "positionAbsolute": { - "x": 2570.607230504145, - "y": 805.1405051032167 + "x": 2559.3078506376914, + "y": 827.739264836123 }, "dragging": false }, @@ -956,7 +1075,7 @@ "data": { "id": "seqEnd_0", "label": "End", - "version": 1, + "version": 2, "name": "seqEnd", "type": "End", "baseClasses": ["End"], @@ -965,10 +1084,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": { @@ -1073,7 +1192,7 @@ "data": { "id": "seqEnd_1", "label": "End", - "version": 1, + "version": 2, "name": "seqEnd", "type": "End", "baseClasses": ["End"], @@ -1082,10 +1201,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": { @@ -1400,7 +1519,7 @@ "data": { "id": "seqState_0", "label": "State", - "version": 1, + "version": 2, "name": "seqState", "type": "State", "baseClasses": ["State"], @@ -1408,7 +1527,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", @@ -1416,7 +1535,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.", @@ -1448,7 +1567,7 @@ "additionalParams": true }, { - "label": "State (Code)", + "label": "Custom State (Code)", "name": "stateMemoryCode", "type": "code", "description": "JSON object representing the state", @@ -1463,8 +1582,7 @@ ], "inputAnchors": [], "inputs": { - "stateMemory": "stateMemoryUI", - "stateMemoryUI": "[{\"key\":\"sources\",\"type\":\"Replace\",\"defaultValue\":\"\",\"actions\":\"\",\"id\":0}]" + "stateMemory": "stateMemoryUI" }, "outputAnchors": [ { @@ -1497,7 +1615,7 @@ "data": { "id": "seqLLMNode_3", "label": "LLM Node", - "version": 1, + "version": 2, "name": "seqLLMNode", "type": "LLMNode", "baseClasses": ["LLMNode"], @@ -1541,6 +1659,40 @@ "additionalParams": true, "id": "seqLLMNode_3-input-promptValues-json" }, + { + "label": "JSON Structured Output", + "name": "llmStructuredOutput", + "type": "datagrid", + "description": "Instruct the LLM to give output in a JSON structured schema", + "datagrid": [ + { + "field": "key", + "headerName": "Key", + "editable": true + }, + { + "field": "type", + "headerName": "Type", + "type": "singleSelect", + "valueOptions": ["String", "String Array", "Number", "Boolean", "Enum"], + "editable": true + }, + { + "field": "enumValues", + "headerName": "Enum Values", + "editable": true + }, + { + "field": "description", + "headerName": "Description", + "flex": 1, + "editable": true + } + ], + "optional": true, + "additionalParams": true, + "id": "seqLLMNode_3-input-llmStructuredOutput-datagrid" + }, { "label": "Update State", "name": "updateStateMemory", @@ -1576,6 +1728,10 @@ "label": "LLM Node Output (string)", "value": "$flow.output.content" }, + { + "label": "LLM JSON Output Key (string)", + "value": "$flow.output." + }, { "label": "Global variable (string)", "value": "$vars." @@ -1624,11 +1780,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_3-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqLLMNode_3-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" }, { "label": "Chat Model", @@ -1643,9 +1799,10 @@ "llmNodeName": "Return Agent", "systemMessagePrompt": "", "humanMessagePrompt": "", - "sequentialNode": ["{{seqToolNode_0.data.instance}}"], + "sequentialNode": ["{{seqToolNode_0.data.instance}}", "{{seqToolNode_0.data.instance}}"], "model": "", "promptValues": "", + "llmStructuredOutput": "", "updateStateMemory": "updateStateMemoryUI" }, "outputAnchors": [ @@ -1661,7 +1818,7 @@ "selected": false }, "width": 300, - "height": 431, + "height": 450, "selected": false, "positionAbsolute": { "x": 1477.8265021173233, @@ -2380,7 +2537,7 @@ "data": { "id": "seqToolNode_0", "label": "Tool Node", - "version": 1, + "version": 2, "name": "seqToolNode", "type": "ToolNode", "baseClasses": ["ToolNode"], @@ -2653,54 +2810,6 @@ } ], "edges": [ - { - "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": "seqConditionAgent_0", - "sourceHandle": "seqConditionAgent_0-output-end-Agent|LLMNode|ToolNode", - "target": "seqEnd_1", - "targetHandle": "seqEnd_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode", - "type": "buttonedge", - "id": "seqConditionAgent_0-seqConditionAgent_0-output-end-Agent|LLMNode|ToolNode-seqEnd_1-seqEnd_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode" - }, - { - "source": "seqConditionAgent_0", - "sourceHandle": "seqConditionAgent_0-output-generate-Agent|LLMNode|ToolNode", - "target": "seqLLMNode_2", - "targetHandle": "seqLLMNode_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode", - "type": "buttonedge", - "id": "seqConditionAgent_0-seqConditionAgent_0-output-generate-Agent|LLMNode|ToolNode-seqLLMNode_2-seqLLMNode_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode" - }, - { - "source": "seqConditionAgent_0", - "sourceHandle": "seqConditionAgent_0-output-rewrite-Agent|LLMNode|ToolNode", - "target": "seqLLMNode_1", - "targetHandle": "seqLLMNode_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode", - "type": "buttonedge", - "id": "seqConditionAgent_0-seqConditionAgent_0-output-rewrite-Agent|LLMNode|ToolNode-seqLLMNode_1-seqLLMNode_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode" - }, - { - "source": "seqLLMNode_2", - "sourceHandle": "seqLLMNode_2-output-seqLLMNode-LLMNode", - "target": "seqEnd_0", - "targetHandle": "seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode", - "type": "buttonedge", - "id": "seqLLMNode_2-seqLLMNode_2-output-seqLLMNode-LLMNode-seqEnd_0-seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" - }, - { - "source": "seqLLMNode_1", - "sourceHandle": "seqLLMNode_1-output-seqLLMNode-LLMNode", - "target": "seqLoop_0", - "targetHandle": "seqLoop_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode", - "type": "buttonedge", - "id": "seqLLMNode_1-seqLLMNode_1-output-seqLLMNode-LLMNode-seqLoop_0-seqLoop_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" - }, { "source": "pinecone_0", "sourceHandle": "pinecone_0-output-retriever-Pinecone|VectorStoreRetriever|BaseRetriever", @@ -2773,14 +2882,6 @@ "type": "buttonedge", "id": "seqLLMNode_0-seqLLMNode_0-output-seqLLMNode-LLMNode-seqToolNode_0-seqToolNode_0-input-llmNode-LLMNode" }, - { - "source": "seqToolNode_0", - "sourceHandle": "seqToolNode_0-output-seqToolNode-ToolNode", - "target": "seqLLMNode_3", - "targetHandle": "seqLLMNode_3-input-sequentialNode-Start | Agent | LLMNode | ToolNode", - "type": "buttonedge", - "id": "seqToolNode_0-seqToolNode_0-output-seqToolNode-ToolNode-seqLLMNode_3-seqLLMNode_3-input-sequentialNode-Start | Agent | LLMNode | ToolNode" - }, { "source": "retrieverTool_1", "sourceHandle": "retrieverTool_1-output-retrieverTool-RetrieverTool|DynamicTool|Tool|StructuredTool|Runnable", @@ -2796,6 +2897,62 @@ "targetHandle": "seqStart_0-input-agentMemory-BaseCheckpointSaver", "type": "buttonedge", "id": "agentMemory_0-agentMemory_0-output-agentMemory-AgentMemory|BaseCheckpointSaver-seqStart_0-seqStart_0-input-agentMemory-BaseCheckpointSaver" + }, + { + "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": "seqStart_0-seqStart_0-output-seqStart-Start-seqLLMNode_0-seqLLMNode_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" + }, + { + "source": "seqToolNode_0", + "sourceHandle": "seqToolNode_0-output-seqToolNode-ToolNode", + "target": "seqLLMNode_3", + "targetHandle": "seqLLMNode_3-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqToolNode_0-seqToolNode_0-output-seqToolNode-ToolNode-seqLLMNode_3-seqLLMNode_3-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" + }, + { + "source": "seqConditionAgent_0", + "sourceHandle": "seqConditionAgent_0-output-end-Condition", + "target": "seqEnd_1", + "targetHandle": "seqEnd_1-input-sequentialNode-Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqConditionAgent_0-seqConditionAgent_0-output-end-Condition-seqEnd_1-seqEnd_1-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" + }, + { + "source": "seqConditionAgent_0", + "sourceHandle": "seqConditionAgent_0-output-generate-Condition", + "target": "seqLLMNode_2", + "targetHandle": "seqLLMNode_2-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqConditionAgent_0-seqConditionAgent_0-output-generate-Condition-seqLLMNode_2-seqLLMNode_2-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" + }, + { + "source": "seqConditionAgent_0", + "sourceHandle": "seqConditionAgent_0-output-rewrite-Condition", + "target": "seqLLMNode_1", + "targetHandle": "seqLLMNode_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqConditionAgent_0-seqConditionAgent_0-output-rewrite-Condition-seqLLMNode_1-seqLLMNode_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" + }, + { + "source": "seqLLMNode_1", + "sourceHandle": "seqLLMNode_1-output-seqLLMNode-LLMNode", + "target": "seqLoop_0", + "targetHandle": "seqLoop_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqLLMNode_1-seqLLMNode_1-output-seqLLMNode-LLMNode-seqLoop_0-seqLoop_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" + }, + { + "source": "seqLLMNode_2", + "sourceHandle": "seqLLMNode_2-output-seqLLMNode-LLMNode", + "target": "seqEnd_0", + "targetHandle": "seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqLLMNode_2-seqLLMNode_2-output-seqLLMNode-LLMNode-seqEnd_0-seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" } ] } diff --git a/packages/server/marketplaces/agentflows/Branch Out Merge In.json b/packages/server/marketplaces/agentflows/Branch Out Merge In.json index 3e199832..087a7be7 100644 --- a/packages/server/marketplaces/agentflows/Branch Out Merge In.json +++ b/packages/server/marketplaces/agentflows/Branch Out Merge In.json @@ -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": "seqAgent_0", "label": "Agent", - "version": 1, + "version": 2, "name": "seqAgent", "type": "Agent", "baseClasses": ["Agent"], @@ -124,6 +124,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", @@ -134,6 +142,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", @@ -241,14 +280,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", @@ -264,9 +304,13 @@ "systemMessagePrompt": "Only reply \"I am A\"", "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": "" }, @@ -283,7 +327,7 @@ "selected": false }, "width": 300, - "height": 762, + "height": 877, "selected": false, "positionAbsolute": { "x": 534.6891175301298, @@ -294,14 +338,14 @@ { "id": "seqAgent_1", "position": { - "x": 983.41414631527, - "y": -302.8933510311883 + "x": 995.5938931003413, + "y": -373.94187394410403 }, "type": "customNode", "data": { "id": "seqAgent_1", "label": "Agent", - "version": 1, + "version": 2, "name": "seqAgent", "type": "Agent", "baseClasses": ["Agent"], @@ -334,6 +378,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", @@ -344,6 +396,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", @@ -451,14 +534,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", @@ -474,9 +558,13 @@ "systemMessagePrompt": "Only reply \"I am B\"", "humanMessagePrompt": "", "tools": "", - "sequentialNode": ["{{seqAgent_0.data.instance}}"], + "sequentialNode": ["{{seqAgent_0.data.instance}}", "{{seqAgent_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": "" }, @@ -493,11 +581,11 @@ "selected": false }, "width": 300, - "height": 762, + "height": 877, "selected": false, "positionAbsolute": { - "x": 983.41414631527, - "y": -302.8933510311883 + "x": 995.5938931003413, + "y": -373.94187394410403 }, "dragging": false }, @@ -511,7 +599,7 @@ "data": { "id": "seqAgent_2", "label": "Agent", - "version": 1, + "version": 2, "name": "seqAgent", "type": "Agent", "baseClasses": ["Agent"], @@ -544,6 +632,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", @@ -554,6 +650,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", @@ -661,14 +788,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", @@ -684,9 +812,13 @@ "systemMessagePrompt": "Only reply \"I am C\"", "humanMessagePrompt": "", "tools": "", - "sequentialNode": ["{{seqAgent_0.data.instance}}"], + "sequentialNode": ["{{seqAgent_0.data.instance}}", "{{seqAgent_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": "" }, @@ -703,7 +835,7 @@ "selected": false }, "width": 300, - "height": 762, + "height": 877, "selected": false, "positionAbsolute": { "x": 1002.0147830660676, @@ -721,7 +853,7 @@ "data": { "id": "seqAgent_3", "label": "Agent", - "version": 1, + "version": 2, "name": "seqAgent", "type": "Agent", "baseClasses": ["Agent"], @@ -754,6 +886,14 @@ "additionalParams": true, "id": "seqAgent_3-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_3-input-interrupt-boolean" + }, { "label": "Format Prompt Values", "name": "promptValues", @@ -764,6 +904,37 @@ "list": true, "id": "seqAgent_3-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_3-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_3-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_3-input-rejectButtonText-string" + }, { "label": "Update State", "name": "updateStateMemory", @@ -871,14 +1042,15 @@ "name": "tools", "type": "Tool", "list": true, + "optional": true, "id": "seqAgent_3-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_3-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqAgent_3-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" }, { "label": "Chat Model", @@ -894,9 +1066,18 @@ "systemMessagePrompt": "Only reply \"I am D\"", "humanMessagePrompt": "", "tools": "", - "sequentialNode": ["{{seqAgent_2.data.instance}}", "{{seqAgent_1.data.instance}}"], + "sequentialNode": [ + "{{seqAgent_2.data.instance}}", + "{{seqAgent_1.data.instance}}", + "{{seqAgent_2.data.instance}}", + "{{seqAgent_1.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": "" }, @@ -913,7 +1094,7 @@ "selected": false }, "width": 300, - "height": 762, + "height": 877, "selected": false, "positionAbsolute": { "x": 1388.5733958149945, @@ -1048,7 +1229,7 @@ "data": { "id": "seqEnd_0", "label": "End", - "version": 1, + "version": 2, "name": "seqEnd", "type": "End", "baseClasses": ["End"], @@ -1057,10 +1238,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": { @@ -1093,49 +1274,49 @@ "source": "seqStart_0", "sourceHandle": "seqStart_0-output-seqStart-Start", "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": "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", - "target": "seqAgent_2", - "targetHandle": "seqAgent_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode", - "type": "buttonedge", - "id": "seqAgent_0-seqAgent_0-output-seqAgent-Agent-seqAgent_2-seqAgent_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqStart_0-seqStart_0-output-seqStart-Start-seqAgent_0-seqAgent_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" }, { "source": "seqAgent_0", "sourceHandle": "seqAgent_0-output-seqAgent-Agent", "target": "seqAgent_1", - "targetHandle": "seqAgent_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "targetHandle": "seqAgent_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", "type": "buttonedge", - "id": "seqAgent_0-seqAgent_0-output-seqAgent-Agent-seqAgent_1-seqAgent_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqAgent_0-seqAgent_0-output-seqAgent-Agent-seqAgent_1-seqAgent_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" + }, + { + "source": "seqAgent_0", + "sourceHandle": "seqAgent_0-output-seqAgent-Agent", + "target": "seqAgent_2", + "targetHandle": "seqAgent_2-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqAgent_0-seqAgent_0-output-seqAgent-Agent-seqAgent_2-seqAgent_2-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" }, { "source": "seqAgent_2", "sourceHandle": "seqAgent_2-output-seqAgent-Agent", "target": "seqAgent_3", - "targetHandle": "seqAgent_3-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "targetHandle": "seqAgent_3-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", "type": "buttonedge", - "id": "seqAgent_2-seqAgent_2-output-seqAgent-Agent-seqAgent_3-seqAgent_3-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqAgent_2-seqAgent_2-output-seqAgent-Agent-seqAgent_3-seqAgent_3-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" }, { "source": "seqAgent_1", "sourceHandle": "seqAgent_1-output-seqAgent-Agent", "target": "seqAgent_3", - "targetHandle": "seqAgent_3-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "targetHandle": "seqAgent_3-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", "type": "buttonedge", - "id": "seqAgent_1-seqAgent_1-output-seqAgent-Agent-seqAgent_3-seqAgent_3-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqAgent_1-seqAgent_1-output-seqAgent-Agent-seqAgent_3-seqAgent_3-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" }, { "source": "seqAgent_3", "sourceHandle": "seqAgent_3-output-seqAgent-Agent", "target": "seqEnd_0", - "targetHandle": "seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "targetHandle": "seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode", "type": "buttonedge", - "id": "seqAgent_3-seqAgent_3-output-seqAgent-Agent-seqEnd_0-seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqAgent_3-seqAgent_3-output-seqAgent-Agent-seqEnd_0-seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" } ] } diff --git a/packages/server/marketplaces/agentflows/Essay Writing & Grading.json b/packages/server/marketplaces/agentflows/Essay Writing & Grading.json index c07d3c4f..a006f73b 100644 --- a/packages/server/marketplaces/agentflows/Essay Writing & Grading.json +++ b/packages/server/marketplaces/agentflows/Essay Writing & Grading.json @@ -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": "seqCondition_0", "label": "Condition", - "version": 1, + "version": 2, "name": "seqCondition", "type": "Condition", "baseClasses": ["Condition"], @@ -215,30 +215,32 @@ "conditionName": "If loop > 3 times", "sequentialNode": ["{{seqLLMNode_0.data.instance}}"], "condition": "", - "conditionUI": "[{\"variable\":\"$flow.state.messages.length\",\"operation\":\"Less Than or Equal To\",\"value\":\"6\",\"output\":\"Grading\",\"actions\":\"\",\"id\":0}]", - "selectedConditionFunctionTab_seqCondition_0": "conditionUI" + "selectedConditionFunctionTab_seqCondition_0": "conditionUI", + "conditionUI": "[{\"variable\":\"$flow.state.messages.length\",\"operation\":\"Less Than or Equal To\",\"value\":\"6\",\"output\":\"Grading\",\"actions\":\"\",\"id\":0}]" }, "outputAnchors": [ { "name": "output", "label": "Output", "type": "options", + "description": "", "options": [ { - "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-grading-Agent|LLMNode|ToolNode", + "id": "seqCondition_0-output-grading-Condition", "name": "grading", "label": "Grading", - "type": "Agent | LLMNode | ToolNode", + "type": "Condition", "isAnchor": true } - ] + ], + "default": "next" } ], "outputs": { @@ -265,7 +267,7 @@ "data": { "id": "seqLLMNode_0", "label": "LLM Node", - "version": 1, + "version": 2, "name": "seqLLMNode", "type": "LLMNode", "baseClasses": ["LLMNode"], @@ -430,11 +432,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", @@ -449,9 +451,10 @@ "llmNodeName": "Writer", "systemMessagePrompt": "You are an essay assistant tasked with writing excellent 3-paragraph essays.\nGenerate the best essay possible for the user's request. \nIf the user provides critique, respond with a revised version of your previous attempts.", "humanMessagePrompt": "", - "sequentialNode": ["{{seqStart_0.data.instance}}"], + "sequentialNode": ["{{seqStart_0.data.instance}}", "{{seqStart_0.data.instance}}"], "model": "", "promptValues": "", + "llmStructuredOutput": "", "updateStateMemory": "updateStateMemoryUI" }, "outputAnchors": [ @@ -467,7 +470,7 @@ "selected": false }, "width": 300, - "height": 431, + "height": 450, "selected": false, "positionAbsolute": { "x": 603.8430617050778, @@ -485,7 +488,7 @@ "data": { "id": "seqLLMNode_1", "label": "LLM Node", - "version": 1, + "version": 2, "name": "seqLLMNode", "type": "LLMNode", "baseClasses": ["LLMNode"], @@ -650,11 +653,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", @@ -669,9 +672,10 @@ "llmNodeName": "Teacher", "systemMessagePrompt": "You are a teacher grading an essay submission.\nGenerate critique and recommendations for the user's submission.\nProvide detailed recommendations, including requests for length, depth, style, etc.", "humanMessagePrompt": "", - "sequentialNode": ["{{seqCondition_0.data.instance}}"], + "sequentialNode": ["{{seqCondition_0.data.instance}}", "{{seqCondition_0.data.instance}}"], "model": "", "promptValues": "", + "llmStructuredOutput": "", "updateStateMemory": "updateStateMemoryUI" }, "outputAnchors": [ @@ -687,7 +691,7 @@ "selected": false }, "width": 300, - "height": 431, + "height": 450, "selected": false, "positionAbsolute": { "x": 1353.990019049842, @@ -705,7 +709,7 @@ "data": { "id": "seqEnd_0", "label": "End", - "version": 1, + "version": 2, "name": "seqEnd", "type": "End", "baseClasses": ["End"], @@ -714,10 +718,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": { @@ -739,14 +743,14 @@ { "id": "seqLoop_0", "position": { - "x": 1696.8250975937838, - "y": 653.0299300609207 + "x": 1730.9768550888484, + "y": 654.3960003607233 }, "type": "customNode", "data": { "id": "seqLoop_0", "label": "Loop", - "version": 1, + "version": 2, "name": "seqLoop", "type": "Loop", "baseClasses": ["Loop"], @@ -756,19 +760,19 @@ { "label": "Loop To", "name": "loopToName", - "description": "Name of the agent to loop back to", + "description": "Name of the agent/llm to loop back to", "type": "string", - "placeholder": "agent1", + "placeholder": "Agent", "id": "seqLoop_0-input-loopToName-string" } ], "inputAnchors": [ { - "label": "Start | Agent | LLM | Tool Node", + "label": "Agent | Condition | LLM | Tool Node", "name": "sequentialNode", - "type": "Start | Agent | LLMNode | ToolNode", + "type": "Agent | Condition | LLMNode | ToolNode", "list": true, - "id": "seqLoop_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqLoop_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" } ], "inputs": { @@ -784,8 +788,8 @@ "selected": false, "dragging": false, "positionAbsolute": { - "x": 1696.8250975937838, - "y": 653.0299300609207 + "x": 1730.9768550888484, + "y": 654.3960003607233 } }, { @@ -1054,10 +1058,11 @@ "data": { "id": "stickyNote_0", "label": "Sticky Note", - "version": 1, + "version": 2, "name": "stickyNote", "type": "StickyNote", "baseClasses": ["StickyNote"], + "tags": ["Utilities"], "category": "Utilities", "description": "Add a sticky note", "inputParams": [ @@ -1106,10 +1111,11 @@ "data": { "id": "stickyNote_1", "label": "Sticky Note", - "version": 1, + "version": 2, "name": "stickyNote", "type": "StickyNote", "baseClasses": ["StickyNote"], + "tags": ["Utilities"], "category": "Utilities", "description": "Add a sticky note", "inputParams": [ @@ -1166,14 +1172,6 @@ "type": "buttonedge", "id": "agentMemory_0-agentMemory_0-output-agentMemory-AgentMemory|BaseCheckpointSaver-seqStart_0-seqStart_0-input-agentMemory-BaseCheckpointSaver" }, - { - "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", @@ -1184,27 +1182,35 @@ }, { "source": "seqCondition_0", - "sourceHandle": "seqCondition_0-output-end-Agent|LLMNode|ToolNode", + "sourceHandle": "seqCondition_0-output-end-Condition", "target": "seqEnd_0", - "targetHandle": "seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "targetHandle": "seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode", "type": "buttonedge", - "id": "seqCondition_0-seqCondition_0-output-end-Agent|LLMNode|ToolNode-seqEnd_0-seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqCondition_0-seqCondition_0-output-end-Condition-seqEnd_0-seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" }, { "source": "seqCondition_0", - "sourceHandle": "seqCondition_0-output-grading-Agent|LLMNode|ToolNode", + "sourceHandle": "seqCondition_0-output-grading-Condition", "target": "seqLLMNode_1", - "targetHandle": "seqLLMNode_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "targetHandle": "seqLLMNode_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", "type": "buttonedge", - "id": "seqCondition_0-seqCondition_0-output-grading-Agent|LLMNode|ToolNode-seqLLMNode_1-seqLLMNode_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqCondition_0-seqCondition_0-output-grading-Condition-seqLLMNode_1-seqLLMNode_1-input-sequentialNode-Start | Agent | Condition | 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": "seqStart_0-seqStart_0-output-seqStart-Start-seqLLMNode_0-seqLLMNode_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" }, { "source": "seqLLMNode_1", "sourceHandle": "seqLLMNode_1-output-seqLLMNode-LLMNode", "target": "seqLoop_0", - "targetHandle": "seqLoop_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "targetHandle": "seqLoop_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode", "type": "buttonedge", - "id": "seqLLMNode_1-seqLLMNode_1-output-seqLLMNode-LLMNode-seqLoop_0-seqLoop_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqLLMNode_1-seqLLMNode_1-output-seqLLMNode-LLMNode-seqLoop_0-seqLoop_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" } ] } diff --git a/packages/server/marketplaces/agentflows/Human In Loop RAG.json b/packages/server/marketplaces/agentflows/Human In Loop RAG.json index d4804ebd..a853687d 100644 --- a/packages/server/marketplaces/agentflows/Human In Loop RAG.json +++ b/packages/server/marketplaces/agentflows/Human In Loop RAG.json @@ -6,14 +6,14 @@ { "id": "seqStart_0", "position": { - "x": 792.8312685189314, - "y": 381.2371369608682 + "x": 796.4546450224532, + "y": 359.4968779397379 }, "type": "customNode", "data": { "id": "seqStart_0", "label": "Start", - "version": 1, + "version": 2, "name": "seqStart", "type": "Start", "baseClasses": ["Start"], @@ -40,7 +40,7 @@ "label": "State", "name": "state", "type": "State", - "description": "State is an object that is updated by nodes in the graph, passing from one node to another. Agent Memory must be connected when using State. By default, state contains \"messages\" that got updated with each message sent and received.", + "description": "State is an object that is updated by nodes in the graph, passing from one node to another. By default, state contains \"messages\" that got updated with each message sent and received.", "optional": true, "id": "seqStart_0-input-state-State" }, @@ -75,8 +75,8 @@ "width": 300, "height": 382, "positionAbsolute": { - "x": 792.8312685189314, - "y": 381.2371369608682 + "x": 796.4546450224532, + "y": 359.4968779397379 }, "selected": false, "dragging": false @@ -85,7 +85,7 @@ "id": "retrieverTool_0", "position": { "x": 798.8003381613986, - "y": -266.40932507051906 + "y": -353.8148242822555 }, "type": "customNode", "data": { @@ -153,15 +153,15 @@ "selected": false, "positionAbsolute": { "x": 798.8003381613986, - "y": -266.40932507051906 + "y": -353.8148242822555 }, "dragging": false }, { "id": "pinecone_0", "position": { - "x": 455.1155682452798, - "y": -240.7558023068499 + "x": 457.1966515598449, + "y": -359.3775512370636 }, "type": "customNode", "data": { @@ -335,16 +335,16 @@ "height": 604, "selected": false, "positionAbsolute": { - "x": 455.1155682452798, - "y": -240.7558023068499 + "x": 457.1966515598449, + "y": -359.3775512370636 }, "dragging": false }, { "id": "openAIEmbeddings_0", "position": { - "x": 106.9045217190612, - "y": -160.72757403644664 + "x": 121.47210492101726, + "y": -318.8899059433982 }, "type": "customNode", "data": { @@ -438,22 +438,22 @@ "height": 423, "selected": false, "positionAbsolute": { - "x": 106.9045217190612, - "y": -160.72757403644664 + "x": 121.47210492101726, + "y": -318.8899059433982 }, "dragging": false }, { "id": "seqState_0", "position": { - "x": -839.6942362755474, - "y": 338.4940899612586 + "x": 423.5233356655001, + "y": 677.7106702353785 }, "type": "customNode", "data": { "id": "seqState_0", "label": "State", - "version": 1, + "version": 2, "name": "seqState", "type": "State", "baseClasses": ["State"], @@ -461,7 +461,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", @@ -469,7 +469,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.", @@ -501,7 +501,7 @@ "additionalParams": true }, { - "label": "State (Code)", + "label": "Custom State (Code)", "name": "stateMemoryCode", "type": "code", "description": "JSON object representing the state", @@ -516,8 +516,7 @@ ], "inputAnchors": [], "inputs": { - "stateMemory": "stateMemoryUI", - "stateMemoryUI": "[]" + "stateMemory": "stateMemoryUI" }, "outputAnchors": [ { @@ -535,16 +534,16 @@ "height": 251, "selected": false, "positionAbsolute": { - "x": -839.6942362755474, - "y": 338.4940899612586 + "x": 423.5233356655001, + "y": 677.7106702353785 }, "dragging": false }, { "id": "chatOpenAI_0", "position": { - "x": -526.4925710918774, - "y": -56.34309442732172 + "x": 64.53509024462608, + "y": 287.03565247592854 }, "type": "customNode", "data": { @@ -715,16 +714,16 @@ "height": 669, "selected": false, "positionAbsolute": { - "x": -526.4925710918774, - "y": -56.34309442732172 + "x": 64.53509024462608, + "y": 287.03565247592854 }, "dragging": false }, { "id": "stickyNote_1", "position": { - "x": -975.271215894973, - "y": -136.01020442552294 + "x": -296.8380553467333, + "y": 76.26029366012256 }, "type": "stickyNote", "data": { @@ -769,15 +768,15 @@ "selected": false, "dragging": false, "positionAbsolute": { - "x": -975.271215894973, - "y": -136.01020442552294 + "x": -296.8380553467333, + "y": 76.26029366012256 } }, { "id": "agentMemory_0", "position": { - "x": -1114.3250603348317, - "y": 9.945749373257343 + "x": 425.6765924433811, + "y": 322.1082465580303 }, "type": "customNode", "data": { @@ -844,8 +843,8 @@ "height": 327, "selected": false, "positionAbsolute": { - "x": -1114.3250603348317, - "y": 9.945749373257343 + "x": 425.6765924433811, + "y": 322.1082465580303 }, "dragging": false }, @@ -859,7 +858,7 @@ "data": { "id": "seqAgent_1", "label": "Agent", - "version": 1, + "version": 2, "name": "seqAgent", "type": "Agent", "baseClasses": ["Agent"], @@ -895,7 +894,7 @@ { "label": "Require Approval", "name": "interrupt", - "description": "Require approval before executing tools", + "description": "Require approval before executing tools. Will proceed when tools are not called", "type": "boolean", "optional": true, "id": "seqAgent_1-input-interrupt-boolean" @@ -910,6 +909,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", @@ -1017,14 +1047,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", @@ -1040,10 +1071,13 @@ "systemMessagePrompt": "You are a research assistant who can search for up-to-date info using search engine.", "humanMessagePrompt": "Given the conversation, respond to user with a more detailed answer. Use the tool provided to search for more information if necessary.\n\nAnswer:", "tools": ["{{googleCustomSearch_0.data.instance}}"], - "sequentialNode": ["{{seqAgent_2.data.instance}}"], + "sequentialNode": ["{{seqAgent_2.data.instance}}", "{{seqAgent_2.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": "" }, @@ -1060,7 +1094,7 @@ "selected": false }, "width": 300, - "height": 858, + "height": 877, "selected": false, "positionAbsolute": { "x": 1560.119237181011, @@ -1071,8 +1105,8 @@ { "id": "googleCustomSearch_0", "position": { - "x": 1915.3868978817745, - "y": -117.01148118277794 + "x": 1192.5232854291921, + "y": -538.0478308920015 }, "type": "customNode", "data": { @@ -1112,51 +1146,10 @@ "selected": false, "dragging": false, "positionAbsolute": { - "x": 1915.3868978817745, - "y": -117.01148118277794 + "x": 1192.5232854291921, + "y": -538.0478308920015 } }, - { - "id": "seqEnd_0", - "position": { - "x": 1923.7338499933962, - "y": 366.70082659938157 - }, - "type": "customNode", - "data": { - "id": "seqEnd_0", - "label": "End", - "version": 1, - "name": "seqEnd", - "type": "End", - "baseClasses": ["End"], - "category": "Sequential Agents", - "description": "End conversation", - "inputParams": [], - "inputAnchors": [ - { - "label": "Start | Agent | LLM | Tool Node", - "name": "sequentialNode", - "type": "Start | Agent | LLMNode | ToolNode", - "id": "seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" - } - ], - "inputs": { - "sequentialNode": "{{seqAgent_1.data.instance}}" - }, - "outputAnchors": [], - "outputs": {}, - "selected": false - }, - "width": 300, - "height": 143, - "selected": false, - "positionAbsolute": { - "x": 1923.7338499933962, - "y": 366.70082659938157 - }, - "dragging": false - }, { "id": "seqAgent_2", "position": { @@ -1167,7 +1160,7 @@ "data": { "id": "seqAgent_2", "label": "Agent", - "version": 1, + "version": 2, "name": "seqAgent", "type": "Agent", "baseClasses": ["Agent"], @@ -1356,14 +1349,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", @@ -1379,7 +1373,7 @@ "systemMessagePrompt": "You are an expert financial analyst that always answers questions with the most relevant information using the tools at your disposal.\n\nThe tools available are:\n- search_apple\n\nThe current date is: 2024-07-10", "humanMessagePrompt": "", "tools": ["{{retrieverTool_0.data.instance}}"], - "sequentialNode": ["{{seqStart_0.data.instance}}"], + "sequentialNode": ["{{seqStart_0.data.instance}}", "{{seqStart_0.data.instance}}"], "model": "", "interrupt": true, "promptValues": "", @@ -1402,13 +1396,54 @@ "selected": false }, "width": 300, - "height": 858, + "height": 877, "selected": false, "dragging": false, "positionAbsolute": { "x": 1187.4958721568407, "y": -228.27663960439855 } + }, + { + "id": "seqEnd_0", + "position": { + "x": 1930.8094081845668, + "y": 438.7877647124094 + }, + "type": "customNode", + "data": { + "id": "seqEnd_0", + "label": "End", + "version": 2, + "name": "seqEnd", + "type": "End", + "baseClasses": ["End"], + "category": "Sequential Agents", + "description": "End conversation", + "inputParams": [], + "inputAnchors": [ + { + "label": "Agent | Condition | LLM | Tool Node", + "name": "sequentialNode", + "type": "Agent | Condition | LLMNode | ToolNode", + "id": "seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" + } + ], + "inputs": { + "sequentialNode": "{{seqAgent_1.data.instance}}" + }, + "outputAnchors": [], + "outputs": {}, + "selected": false + }, + "width": 300, + "height": 143, + "selected": false, + "positionAbsolute": { + "x": 1930.8094081845668, + "y": 438.7877647124094 + }, + "dragging": false } ], "edges": [ @@ -1460,14 +1495,6 @@ "type": "buttonedge", "id": "googleCustomSearch_0-googleCustomSearch_0-output-googleCustomSearch-GoogleCustomSearchAPI|Tool|StructuredTool|Runnable-seqAgent_1-seqAgent_1-input-tools-Tool" }, - { - "source": "seqAgent_1", - "sourceHandle": "seqAgent_1-output-seqAgent-Agent", - "target": "seqEnd_0", - "targetHandle": "seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode", - "type": "buttonedge", - "id": "seqAgent_1-seqAgent_1-output-seqAgent-Agent-seqEnd_0-seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" - }, { "source": "retrieverTool_0", "sourceHandle": "retrieverTool_0-output-retrieverTool-RetrieverTool|DynamicTool|Tool|StructuredTool|Runnable", @@ -1480,17 +1507,25 @@ "source": "seqStart_0", "sourceHandle": "seqStart_0-output-seqStart-Start", "target": "seqAgent_2", - "targetHandle": "seqAgent_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "targetHandle": "seqAgent_2-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", "type": "buttonedge", - "id": "seqStart_0-seqStart_0-output-seqStart-Start-seqAgent_2-seqAgent_2-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqStart_0-seqStart_0-output-seqStart-Start-seqAgent_2-seqAgent_2-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" }, { "source": "seqAgent_2", "sourceHandle": "seqAgent_2-output-seqAgent-Agent", "target": "seqAgent_1", - "targetHandle": "seqAgent_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "targetHandle": "seqAgent_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", "type": "buttonedge", - "id": "seqAgent_2-seqAgent_2-output-seqAgent-Agent-seqAgent_1-seqAgent_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqAgent_2-seqAgent_2-output-seqAgent-Agent-seqAgent_1-seqAgent_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" + }, + { + "source": "seqAgent_1", + "sourceHandle": "seqAgent_1-output-seqAgent-Agent", + "target": "seqEnd_0", + "targetHandle": "seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqAgent_1-seqAgent_1-output-seqAgent-Agent-seqEnd_0-seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" } ] } diff --git a/packages/server/marketplaces/agentflows/Multi Agents.json b/packages/server/marketplaces/agentflows/Multi Agents.json index 93a4ebcf..be7ceeaf 100644 --- a/packages/server/marketplaces/agentflows/Multi Agents.json +++ b/packages/server/marketplaces/agentflows/Multi Agents.json @@ -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" } ] } diff --git a/packages/server/marketplaces/agentflows/Patient Concierge.json b/packages/server/marketplaces/agentflows/Patient Concierge.json index a974a8a3..31a16cdd 100644 --- a/packages/server/marketplaces/agentflows/Patient Concierge.json +++ b/packages/server/marketplaces/agentflows/Patient Concierge.json @@ -7,13 +7,13 @@ "id": "seqAgent_0", "position": { "x": 775.8784674767973, - "y": -100.09604051672113 + "y": -222.95218911189113 }, "type": "customNode", "data": { "id": "seqAgent_0", "label": "Agent", - "version": 1, + "version": 2, "name": "seqAgent", "type": "Agent", "baseClasses": ["Agent"], @@ -46,6 +46,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", @@ -56,6 +64,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", @@ -163,14 +202,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", @@ -186,9 +226,13 @@ "systemMessagePrompt": "You are the Assistant in our Patient Concierge system. The patient has verified their identity and is now allowed access to only their information. \n\nUse the function tool \"patient_information_database\" to look up patient procedures that match the Patient's name and ID with \"patient_name\" and \"user_id\" in that database. \n\nDo not make up information if it is not represented in the function tool database calls. Use this date format when to referring to dates in the databases: MM-DD-YYYY\n\nDO NOT ALLOW PATIENTS TO PROCEDE TO ACCESS OTHER PATIENT INFORMATION OR IT MAY RESULT IN A PHI VIOLATION.", "humanMessagePrompt": "", "tools": ["{{customTool_1.data.instance}}"], - "sequentialNode": ["{{seqCondition_0.data.instance}}"], + "sequentialNode": ["{{seqCondition_0.data.instance}}", "{{seqCondition_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": "", "selectedUpdateStateMemoryTab_seqAgent_0": "updateStateMemoryUI" @@ -206,11 +250,11 @@ "selected": false }, "width": 300, - "height": 764, + "height": 877, "selected": false, "positionAbsolute": { "x": 775.8784674767973, - "y": -100.09604051672113 + "y": -222.95218911189113 }, "dragging": false }, @@ -224,7 +268,7 @@ "data": { "id": "seqEnd_0", "label": "End", - "version": 1, + "version": 2, "name": "seqEnd", "type": "End", "baseClasses": ["End"], @@ -233,10 +277,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": { @@ -265,7 +309,7 @@ "data": { "id": "seqState_0", "label": "State", - "version": 1, + "version": 2, "name": "seqState", "type": "State", "baseClasses": ["State"], @@ -273,7 +317,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", @@ -281,7 +325,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.", @@ -313,7 +357,7 @@ "additionalParams": true }, { - "label": "State (Code)", + "label": "Custom State (Code)", "name": "stateMemoryCode", "type": "code", "description": "JSON object representing the state", @@ -329,6 +373,7 @@ "inputAnchors": [], "inputs": { "stateMemory": "stateMemoryUI", + "selectedStateTab_seqState_0": "stateMemoryUI", "stateMemoryUI": "[{\"key\":\"userInfo\",\"type\":\"Replace\",\"defaultValue\":\"\",\"actions\":\"\",\"id\":1}]" }, "outputAnchors": [ @@ -344,7 +389,7 @@ "selected": false }, "width": 300, - "height": 253, + "height": 251, "selected": false, "positionAbsolute": { "x": -339.5104253267711, @@ -362,7 +407,7 @@ "data": { "id": "seqStart_0", "label": "Start", - "version": 1, + "version": 2, "name": "seqStart", "type": "Start", "baseClasses": ["Start"], @@ -422,7 +467,7 @@ "selected": false }, "width": 300, - "height": 383, + "height": 382, "selected": false, "positionAbsolute": { "x": 60.339339995889304, @@ -440,7 +485,7 @@ "data": { "id": "seqCondition_0", "label": "Condition", - "version": 1, + "version": 2, "name": "seqCondition", "type": "Condition", "baseClasses": ["Condition"], @@ -564,31 +609,32 @@ "conditionName": "If user has been verified", "sequentialNode": ["{{seqStart_0.data.instance}}"], "condition": "", - "conditionUI": "[{\"variable\":\"$flow.state.userInfo\",\"operation\":\"Is Not Empty\",\"value\":\"\",\"output\":\"Concierge\",\"actions\":\"\",\"id\":0}]", "selectedConditionFunctionTab_seqCondition_0": "conditionUI", - "conditionFunction": "" + "conditionUI": "[{\"variable\":\"$flow.state.userInfo\",\"operation\":\"Is Not Empty\",\"value\":\"\",\"output\":\"Concierge\",\"actions\":\"\",\"id\":0}]" }, "outputAnchors": [ { "name": "output", "label": "Output", "type": "options", + "description": "", "options": [ { - "id": "seqCondition_0-output-concierge-Agent|LLMNode|ToolNode", + "id": "seqCondition_0-output-concierge-Condition", "name": "concierge", "label": "Concierge", - "type": "Agent | LLMNode | ToolNode", + "type": "Condition", "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 } - ] + ], + "default": "next" } ], "outputs": { @@ -597,7 +643,7 @@ "selected": false }, "width": 300, - "height": 475, + "height": 474, "selected": false, "positionAbsolute": { "x": 418.50150866955073, @@ -777,7 +823,7 @@ "selected": false }, "width": 300, - "height": 670, + "height": 669, "selected": false, "positionAbsolute": { "x": -316.6467912940658, @@ -795,7 +841,7 @@ "data": { "id": "seqAgent_1", "label": "Agent", - "version": 1, + "version": 2, "name": "seqAgent", "type": "Agent", "baseClasses": ["Agent"], @@ -828,6 +874,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", @@ -838,6 +892,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", @@ -945,14 +1030,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", @@ -968,12 +1054,15 @@ "systemMessagePrompt": "You are an Identity Verfication Specialist in the Patient Concierge system. You job is to verify the identity of the patient before any questions about their upcoming procedure can be addressed.\n\nBegin by greeting the patient and informing them that they need to verify their identity before proceeding. If verification is successful, allow the patient to ask questions about their procedure. If verification fails, kindly inform the patient and offer assistance for re-verification. Make sure both the patient name and date of birth matches records in the patient identity database before proceeding (\"patient_name\", \"date_of_birth\")\n\nSteps:\n1. Greet the patient.\n2. Inform them about the need for identity verification.\n3. Request the patient's full name and date of birth.\n4. Verify the information against the records.\n5. If verification is successful, handle any questions about the upcoming procedure.\n6. If verification fails, provide appropriate instructions or assistance.\n\nExample Interaction:\n1. “To verify your identity, please provide your full name and date of birth.”\n2. If verification is successful:\n - “Thank you for verifying your identity. How can I assist you with your upcoming procedure?”\n3. If verification fails:\n - “I’m sorry, but your identity could not be verified. Please try again or contact support for assistance.”\n\nUse the function tool \"patient_identity_database\" to verify identity. User might give date of birth in different format, be smart and convert it into MM-DD-YYYY format. When verifying identity, if the information does not match, reply with \"Sorry your information is not in our database.\"", "humanMessagePrompt": "", "tools": ["{{customTool_0.data.instance}}"], - "sequentialNode": ["{{seqCondition_0.data.instance}}"], + "sequentialNode": ["{{seqCondition_0.data.instance}}", "{{seqCondition_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": "", - "updateStateMemoryUI": "[]", "selectedUpdateStateMemoryTab_seqAgent_1": "updateStateMemoryCode", "updateStateMemoryCode": "const result = $flow.output;\nconst usedTools = result.usedTools ?? [];\n\n// Check if correct tool is being used\nconst calledTool = usedTools.find((usedTool) => usedTool.tool === \"patient_identity_database\");\nif (!calledTool) return {};\n\n\ntry {\n const parsedToolOutput = JSON.parse(calledTool.toolOutput);\n return {\n userInfo: parsedToolOutput // parsing tool output since its always string\n };\n} catch (e) {\n return {};\n}\n" }, @@ -990,7 +1079,7 @@ "selected": false }, "width": 300, - "height": 764, + "height": 877, "selected": false, "positionAbsolute": { "x": 773.440353076265, @@ -1066,7 +1155,7 @@ "selected": false }, "width": 300, - "height": 328, + "height": 327, "selected": false, "positionAbsolute": { "x": -664.9588570520918, @@ -1116,7 +1205,7 @@ "selected": false }, "width": 300, - "height": 286, + "height": 285, "selected": false, "positionAbsolute": { "x": 416.23687182130743, @@ -1166,7 +1255,7 @@ "selected": false }, "width": 300, - "height": 286, + "height": 285, "selected": false, "positionAbsolute": { "x": 406.451652299109, @@ -1177,14 +1266,14 @@ { "id": "seqEnd_1", "position": { - "x": 1126.4753085175494, - "y": 1297.921087662632 + "x": 1141.757749450836, + "y": 1414.623363880458 }, "type": "customNode", "data": { "id": "seqEnd_1", "label": "End", - "version": 1, + "version": 2, "name": "seqEnd", "type": "End", "baseClasses": ["End"], @@ -1193,10 +1282,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": { @@ -1209,8 +1298,8 @@ "width": 300, "height": 143, "positionAbsolute": { - "x": 1126.4753085175494, - "y": 1297.921087662632 + "x": 1141.757749450836, + "y": 1414.623363880458 }, "selected": false, "dragging": false @@ -1225,10 +1314,11 @@ "data": { "id": "stickyNote_0", "label": "Sticky Note", - "version": 1, + "version": 2, "name": "stickyNote", "type": "StickyNote", "baseClasses": ["StickyNote"], + "tags": ["Utilities"], "category": "Utilities", "description": "Add a sticky note", "inputParams": [ @@ -1277,10 +1367,11 @@ "data": { "id": "stickyNote_1", "label": "Sticky Note", - "version": 1, + "version": 2, "name": "stickyNote", "type": "StickyNote", "baseClasses": ["StickyNote"], + "tags": ["Utilities"], "category": "Utilities", "description": "Add a sticky note", "inputParams": [ @@ -1329,10 +1420,11 @@ "data": { "id": "stickyNote_2", "label": "Sticky Note", - "version": 1, + "version": 2, "name": "stickyNote", "type": "StickyNote", "baseClasses": ["StickyNote"], + "tags": ["Utilities"], "category": "Utilities", "description": "Add a sticky note", "inputParams": [ @@ -1381,10 +1473,11 @@ "data": { "id": "stickyNote_3", "label": "Sticky Note", - "version": 1, + "version": 2, "name": "stickyNote", "type": "StickyNote", "baseClasses": ["StickyNote"], + "tags": ["Utilities"], "category": "Utilities", "description": "Add a sticky note", "inputParams": [ @@ -1433,10 +1526,11 @@ "data": { "id": "stickyNote_4", "label": "Sticky Note", - "version": 1, + "version": 2, "name": "stickyNote", "type": "StickyNote", "baseClasses": ["StickyNote"], + "tags": ["Utilities"], "category": "Utilities", "description": "Add a sticky note", "inputParams": [ @@ -1485,10 +1579,11 @@ "data": { "id": "stickyNote_5", "label": "Sticky Note", - "version": 1, + "version": 2, "name": "stickyNote", "type": "StickyNote", "baseClasses": ["StickyNote"], + "tags": ["Utilities"], "category": "Utilities", "description": "Add a sticky note", "inputParams": [ @@ -1537,10 +1632,11 @@ "data": { "id": "stickyNote_6", "label": "Sticky Note", - "version": 1, + "version": 2, "name": "stickyNote", "type": "StickyNote", "baseClasses": ["StickyNote"], + "tags": ["Utilities"], "category": "Utilities", "description": "Add a sticky note", "inputParams": [ @@ -1613,14 +1709,6 @@ "type": "buttonedge", "id": "seqStart_0-seqStart_0-output-seqStart-Start-seqCondition_0-seqCondition_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" }, - { - "source": "seqCondition_0", - "sourceHandle": "seqCondition_0-output-end-Agent|LLMNode|ToolNode", - "target": "seqAgent_1", - "targetHandle": "seqAgent_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode", - "type": "buttonedge", - "id": "seqCondition_0-seqCondition_0-output-end-Agent|LLMNode|ToolNode-seqAgent_1-seqAgent_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode" - }, { "source": "customTool_0", "sourceHandle": "customTool_0-output-customTool-CustomTool|Tool|StructuredTool|Runnable", @@ -1641,25 +1729,33 @@ "source": "seqAgent_0", "sourceHandle": "seqAgent_0-output-seqAgent-Agent", "target": "seqEnd_0", - "targetHandle": "seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "targetHandle": "seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode", "type": "buttonedge", - "id": "seqAgent_0-seqAgent_0-output-seqAgent-Agent-seqEnd_0-seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqAgent_0-seqAgent_0-output-seqAgent-Agent-seqEnd_0-seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" }, { "source": "seqAgent_1", "sourceHandle": "seqAgent_1-output-seqAgent-Agent", "target": "seqEnd_1", - "targetHandle": "seqEnd_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "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-Start | Agent | LLMNode | ToolNode" + "id": "seqAgent_1-seqAgent_1-output-seqAgent-Agent-seqEnd_1-seqEnd_1-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" }, { "source": "seqCondition_0", - "sourceHandle": "seqCondition_0-output-concierge-Agent|LLMNode|ToolNode", + "sourceHandle": "seqCondition_0-output-concierge-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-concierge-Agent|LLMNode|ToolNode-seqAgent_0-seqAgent_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqCondition_0-seqCondition_0-output-concierge-Condition-seqAgent_0-seqAgent_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" + }, + { + "source": "seqCondition_0", + "sourceHandle": "seqCondition_0-output-end-Condition", + "target": "seqAgent_1", + "targetHandle": "seqAgent_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqCondition_0-seqCondition_0-output-end-Condition-seqAgent_1-seqAgent_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" } ] } diff --git a/packages/server/marketplaces/agentflows/Plan and Execute.json b/packages/server/marketplaces/agentflows/Plan and Execute.json index cdddc9ca..1d3e096a 100644 --- a/packages/server/marketplaces/agentflows/Plan and Execute.json +++ b/packages/server/marketplaces/agentflows/Plan and Execute.json @@ -6,14 +6,14 @@ { "id": "seqStart_0", "position": { - "x": 270.8034759443938, - "y": 197.40349682053647 + "x": 283.66331227381755, + "y": 199.2406162961684 }, "type": "customNode", "data": { "id": "seqStart_0", "label": "Start", - "version": 1, + "version": 2, "name": "seqStart", "type": "Start", "baseClasses": ["Start"], @@ -76,8 +76,8 @@ "height": 382, "selected": false, "positionAbsolute": { - "x": 270.8034759443938, - "y": 197.40349682053647 + "x": 283.66331227381755, + "y": 199.2406162961684 }, "dragging": false }, @@ -91,7 +91,7 @@ "data": { "id": "seqEnd_0", "label": "End", - "version": 1, + "version": 2, "name": "seqEnd", "type": "End", "baseClasses": ["End"], @@ -100,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": { @@ -312,7 +312,7 @@ "data": { "id": "seqLLMNode_0", "label": "LLM Node", - "version": 1, + "version": 2, "name": "seqLLMNode", "type": "LLMNode", "baseClasses": ["LLMNode"], @@ -477,11 +477,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", @@ -496,11 +496,12 @@ "llmNodeName": "planner", "systemMessagePrompt": "For the given objective, come up with a simple step by step plan.\n\nThis plan should involve individual tasks, that if executed correctly will yield the correct answer. Do not add any superfluous steps.\n\nThe result of the final step should be the final answer. Make sure that each step has all the information needed - do not skip steps.\n\n{objective}", "humanMessagePrompt": "", - "sequentialNode": ["{{seqStart_0.data.instance}}"], + "sequentialNode": ["{{seqStart_0.data.instance}}", "{{seqStart_0.data.instance}}"], "model": "", "promptValues": "{\"objective\":\"{{question}}\"}", "llmStructuredOutput": "[{\"key\":\"steps\",\"type\":\"String Array\",\"enumValues\":\"\",\"description\":\"different steps to follow, should be in sorted order\",\"actions\":\"\",\"id\":0}]", "updateStateMemory": "updateStateMemoryUI", + "selectedUpdateStateMemoryTab_seqLLMNode_0": "updateStateMemoryUI", "updateStateMemoryUI": "[{\"key\":\"plan\",\"value\":\"$flow.output.steps\",\"actions\":\"\",\"id\":0}]" }, "outputAnchors": [ @@ -516,7 +517,7 @@ "selected": false }, "width": 300, - "height": 431, + "height": 450, "selected": false, "positionAbsolute": { "x": 648.4687909190533, @@ -527,14 +528,14 @@ { "id": "seqState_0", "position": { - "x": -525.7145883375572, - "y": 411.1106840856376 + "x": -516.05863088425, + "y": 408.69669472231084 }, "type": "customNode", "data": { "id": "seqState_0", "label": "State", - "version": 1, + "version": 2, "name": "seqState", "type": "State", "baseClasses": ["State"], @@ -542,7 +543,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", @@ -550,7 +551,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.", @@ -582,7 +583,7 @@ "additionalParams": true }, { - "label": "State (Code)", + "label": "Custom State (Code)", "name": "stateMemoryCode", "type": "code", "description": "JSON object representing the state", @@ -598,6 +599,7 @@ "inputAnchors": [], "inputs": { "stateMemory": "stateMemoryUI", + "selectedStateTab_seqState_0": "stateMemoryUI", "stateMemoryUI": "[{\"key\":\"plan\",\"type\":\"Replace\",\"defaultValue\":\"\",\"actions\":\"\",\"id\":0},{\"key\":\"pastSteps\",\"type\":\"Append\",\"defaultValue\":\"\",\"actions\":\"\",\"id\":1},{\"key\":\"response\",\"type\":\"Replace\",\"defaultValue\":\"\",\"actions\":\"\",\"id\":2},{\"key\":\"action\",\"type\":\"Replace\",\"defaultValue\":\"\",\"actions\":\"\",\"id\":3}]" }, "outputAnchors": [ @@ -616,8 +618,8 @@ "height": 251, "selected": false, "positionAbsolute": { - "x": -525.7145883375572, - "y": 411.1106840856376 + "x": -516.05863088425, + "y": 408.69669472231084 }, "dragging": false }, @@ -625,13 +627,13 @@ "id": "seqAgent_0", "position": { "x": 1008.3773499083541, - "y": 31.13942347960358 + "y": 40.695257663897564 }, "type": "customNode", "data": { "id": "seqAgent_0", "label": "Agent", - "version": 1, + "version": 2, "name": "seqAgent", "type": "Agent", "baseClasses": ["Agent"], @@ -664,6 +666,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", @@ -674,6 +684,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", @@ -781,14 +822,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", @@ -804,12 +846,15 @@ "systemMessagePrompt": "You are a helpful assistant that solve an objective by searching the internet using the given tool", "humanMessagePrompt": "{question}", "tools": ["{{googleCustomSearch_0.data.instance}}"], - "sequentialNode": ["{{seqLLMNode_0.data.instance}}"], + "sequentialNode": ["{{seqLLMNode_0.data.instance}}", "{{seqLLMNode_0.data.instance}}"], "model": "", + "interrupt": "", "promptValues": "{\"question\":\"$flow.state.plan[0]\"}", + "approvalPrompt": "You are about to execute tool: {tools}. Ask if user want to proceed", + "approveButtonText": "Yes", + "rejectButtonText": "No", "updateStateMemory": "updateStateMemoryUI", "maxIterations": "", - "updateStateMemoryUI": "[]", "selectedUpdateStateMemoryTab_seqAgent_0": "updateStateMemoryCode", "updateStateMemoryCode": "// Get the first task\nconst task = $flow.state.plan[0];\nconst outputContent = $flow.output.content;\n\n// Now, we have processed the first task, remove it from array\nconst remainingPlans = $flow.state.plan.slice(1);\n\nreturn {\n pastSteps: [[task, outputContent]],\n plan: remainingPlans,\n};" }, @@ -826,11 +871,11 @@ "selected": false }, "width": 300, - "height": 762, + "height": 877, "selected": false, "positionAbsolute": { "x": 1008.3773499083541, - "y": 31.13942347960358 + "y": 40.695257663897564 }, "dragging": false }, @@ -844,7 +889,7 @@ "data": { "id": "seqLLMNode_1", "label": "LLM Node", - "version": 1, + "version": 2, "name": "seqLLMNode", "type": "LLMNode", "baseClasses": ["LLMNode"], @@ -1009,11 +1054,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", @@ -1028,11 +1073,12 @@ "llmNodeName": "replan", "systemMessagePrompt": "For the given objective, come up with a simple step by step plan. \nThis plan should involve individual tasks, that if executed correctly will yield the correct answer. Do not add any superfluous steps.\nThe result of the final step should be the final answer. Make sure that each step has all the information needed - do not skip steps.\n\nYour objective was this:\n{input}\n\nYour original plan was this:\n{plan}\n\nYou have currently done the follow steps:\n{pastSteps}\n\nUpdate your plan accordingly. Only add steps to the plan that still NEED to be done. Do not return previously done steps as part of the plan.\n\nIf no more steps are needed, return JSON output like %7B\"action\": \"FINISH\", \"response\": , \"steps: []\"%7D\n\nOtherwise, fill out the plan and return the output in the following format: %7B\"action\": \"CONTINUE\", \"response\": \"\", \"steps\": []%7D\n\nRemember, action can only be FINISH or CONTINUE", "humanMessagePrompt": "", - "sequentialNode": ["{{seqAgent_0.data.instance}}"], + "sequentialNode": ["{{seqAgent_0.data.instance}}", "{{seqAgent_0.data.instance}}"], "model": "", "promptValues": "{\"input\":\"{{question}}\",\"plan\":\"$flow.state.plan\",\"pastSteps\":\"$flow.state.pastSteps\"}", "llmStructuredOutput": "[{\"key\":\"action\",\"type\":\"Enum\",\"enumValues\":\"FINISH, CONTINUE\",\"description\":\"next action to take\",\"actions\":\"\",\"id\":0},{\"key\":\"steps\",\"type\":\"String Array\",\"enumValues\":\"\",\"description\":\"different steps to follow, should be in sorted order\",\"actions\":\"\",\"id\":1},{\"key\":\"response\",\"type\":\"String\",\"enumValues\":\"\",\"description\":\"final response\",\"actions\":\"\",\"id\":2}]", "updateStateMemory": "updateStateMemoryUI", + "selectedUpdateStateMemoryTab_seqLLMNode_1": "updateStateMemoryUI", "updateStateMemoryUI": "[{\"key\":\"response\",\"value\":\"$flow.output.response\",\"actions\":\"\",\"id\":0},{\"key\":\"plan\",\"value\":\"$flow.output.steps\",\"actions\":\"\",\"id\":1},{\"key\":\"action\",\"value\":\"$flow.output.action\",\"actions\":\"\",\"id\":2}]" }, "outputAnchors": [ @@ -1048,7 +1094,7 @@ "selected": false }, "width": 300, - "height": 431, + "height": 450, "selected": false, "positionAbsolute": { "x": 1399.9937770241447, @@ -1066,7 +1112,7 @@ "data": { "id": "seqCondition_0", "label": "Condition", - "version": 1, + "version": 2, "name": "seqCondition", "type": "Condition", "baseClasses": ["Condition"], @@ -1190,37 +1236,39 @@ "conditionName": "Check action", "sequentialNode": ["{{seqLLMNode_1.data.instance}}"], "condition": "", - "conditionUI": "[{\"variable\":\"$flow.state.action\",\"operation\":\"Contains\",\"value\":\"CONTINUE\",\"output\":\"Continue\",\"actions\":\"\",\"id\":0},{\"variable\":\"$flow.state.action\",\"operation\":\"Contains\",\"value\":\"FINISH\",\"output\":\"Generate\",\"actions\":\"\",\"id\":1}]", - "selectedConditionFunctionTab_seqCondition_0": "conditionUI" + "selectedConditionFunctionTab_seqCondition_0": "conditionUI", + "conditionUI": "[{\"variable\":\"$flow.state.action\",\"operation\":\"Contains\",\"value\":\"CONTINUE\",\"output\":\"Continue\",\"actions\":\"\",\"id\":0},{\"variable\":\"$flow.state.action\",\"operation\":\"Contains\",\"value\":\"FINISH\",\"output\":\"Generate\",\"actions\":\"\",\"id\":1}]" }, "outputAnchors": [ { "name": "output", "label": "Output", "type": "options", + "description": "", "options": [ { - "id": "seqCondition_0-output-continue-Agent|LLMNode|ToolNode", + "id": "seqCondition_0-output-continue-Condition", "name": "continue", "label": "Continue", - "type": "Agent | LLMNode | ToolNode", + "type": "Condition", "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-generate-Agent|LLMNode|ToolNode", + "id": "seqCondition_0-output-generate-Condition", "name": "generate", "label": "Generate", - "type": "Agent | LLMNode | ToolNode", + "type": "Condition", "isAnchor": true } - ] + ], + "default": "next" } ], "outputs": { @@ -1240,14 +1288,14 @@ { "id": "seqLoop_0", "position": { - "x": 2165.5413404902483, - "y": 137.6950659389894 + "x": 2177.6112873068823, + "y": 144.93703402896983 }, "type": "customNode", "data": { "id": "seqLoop_0", "label": "Loop", - "version": 1, + "version": 2, "name": "seqLoop", "type": "Loop", "baseClasses": ["Loop"], @@ -1257,23 +1305,23 @@ { "label": "Loop To", "name": "loopToName", - "description": "Name of the agent to loop back to", + "description": "Name of the agent/llm to loop back to", "type": "string", - "placeholder": "agent1", + "placeholder": "Agent", "id": "seqLoop_0-input-loopToName-string" } ], "inputAnchors": [ { - "label": "Start | Agent | LLM | Tool Node", + "label": "Agent | Condition | LLM | Tool Node", "name": "sequentialNode", - "type": "Start | Agent | LLMNode | ToolNode", + "type": "Agent | Condition | LLMNode | ToolNode", "list": true, - "id": "seqLoop_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqLoop_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" } ], "inputs": { - "sequentialNode": ["{{seqCondition_0.data.instance}}"], + "sequentialNode": ["{{seqCondition_0.data.instance}}", "{{seqCondition_0.data.instance}}"], "loopToName": "agent" }, "outputAnchors": [], @@ -1284,8 +1332,8 @@ "height": 241, "selected": false, "positionAbsolute": { - "x": 2165.5413404902483, - "y": 137.6950659389894 + "x": 2177.6112873068823, + "y": 144.93703402896983 }, "dragging": false }, @@ -1340,14 +1388,14 @@ { "id": "seqEnd_1", "position": { - "x": 2545.0923771805938, - "y": 856.3939761670131 + "x": 2550.580762684655, + "y": 942.3786823973096 }, "type": "customNode", "data": { "id": "seqEnd_1", "label": "End", - "version": 1, + "version": 2, "name": "seqEnd", "type": "End", "baseClasses": ["End"], @@ -1356,10 +1404,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": { @@ -1373,22 +1421,22 @@ "height": 143, "selected": false, "positionAbsolute": { - "x": 2545.0923771805938, - "y": 856.3939761670131 + "x": 2550.580762684655, + "y": 942.3786823973096 }, "dragging": false }, { "id": "seqLLMNode_3", "position": { - "x": 2196.534673643061, - "y": 679.076382001725 + "x": 2191.7066949164073, + "y": 688.7323394550323 }, "type": "customNode", "data": { "id": "seqLLMNode_3", "label": "LLM Node", - "version": 1, + "version": 2, "name": "seqLLMNode", "type": "LLMNode", "baseClasses": ["LLMNode"], @@ -1553,11 +1601,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_3-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqLLMNode_3-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" }, { "label": "Chat Model", @@ -1572,11 +1620,12 @@ "llmNodeName": "generate", "systemMessagePrompt": "For the given objective, come up with a simple step by step plan. \nThis plan should involve individual tasks, that if executed correctly will yield the correct answer. Do not add any superfluous steps.\nThe result of the final step should be the final answer. Make sure that each step has all the information needed - do not skip steps.\n\nYour objective was this:\n{objective}\n\nYour original plan was this:\n{plan}\n\nYou have currently done the follow steps:\n{pastSteps}\n\nYou have the final response:\n{response}\n\nReturn a full answer combining all the perspective above", "humanMessagePrompt": "", - "sequentialNode": ["{{seqCondition_0.data.instance}}"], + "sequentialNode": ["{{seqCondition_0.data.instance}}", "{{seqCondition_0.data.instance}}"], "model": "", "promptValues": "{\"objective\":\"{{question}}\",\"response\":\"$flow.state.response\",\"plan\":\"$flow.state.plan\",\"pastSteps\":\"$flow.state.pastSteps\"}", "llmStructuredOutput": "", "updateStateMemory": "updateStateMemoryUI", + "selectedUpdateStateMemoryTab_seqLLMNode_3": "updateStateMemoryUI", "updateStateMemoryUI": "[]" }, "outputAnchors": [ @@ -1592,19 +1641,19 @@ "selected": false }, "width": 300, - "height": 431, + "height": 450, "selected": false, "dragging": false, "positionAbsolute": { - "x": 2196.534673643061, - "y": 679.076382001725 + "x": 2191.7066949164073, + "y": 688.7323394550323 } }, { "id": "stickyNote_0", "position": { - "x": -539.8238902900496, - "y": -3.882603532988014 + "x": -513.158859797605, + "y": -28.123540344301205 }, "type": "stickyNote", "data": { @@ -1645,11 +1694,11 @@ "selected": false }, "width": 300, - "height": 364, + "height": 404, "selected": false, "positionAbsolute": { - "x": -539.8238902900496, - "y": -3.882603532988014 + "x": -513.158859797605, + "y": -28.123540344301205 }, "dragging": false }, @@ -1657,7 +1706,7 @@ "id": "stickyNote_1", "position": { "x": 651.5991573765737, - "y": 619.5366041903698 + "y": 651.3893848046831 }, "type": "stickyNote", "data": { @@ -1702,7 +1751,7 @@ "selected": false, "positionAbsolute": { "x": 651.5991573765737, - "y": 619.5366041903698 + "y": 651.3893848046831 }, "dragging": false }, @@ -1868,8 +1917,8 @@ { "id": "stickyNote_5", "position": { - "x": 2189.3034258063108, - "y": 607.3552983883712 + "x": 2194.081342898458, + "y": 600.9847422655085 }, "type": "stickyNote", "data": { @@ -1913,8 +1962,8 @@ "height": 62, "selected": false, "positionAbsolute": { - "x": 2189.3034258063108, - "y": 607.3552983883712 + "x": 2194.081342898458, + "y": 600.9847422655085 }, "dragging": false } @@ -1936,38 +1985,6 @@ "type": "buttonedge", "id": "seqState_0-seqState_0-output-seqState-State-seqStart_0-seqStart_0-input-state-State" }, - { - "source": "seqCondition_0", - "sourceHandle": "seqCondition_0-output-end-Agent|LLMNode|ToolNode", - "target": "seqEnd_0", - "targetHandle": "seqEnd_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode", - "type": "buttonedge", - "id": "seqCondition_0-seqCondition_0-output-end-Agent|LLMNode|ToolNode-seqEnd_0-seqEnd_0-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 | 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", - "target": "seqAgent_0", - "targetHandle": "seqAgent_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode", - "type": "buttonedge", - "id": "seqLLMNode_0-seqLLMNode_0-output-seqLLMNode-LLMNode-seqAgent_0-seqAgent_0-input-sequentialNode-Start | Agent | LLMNode | ToolNode" - }, - { - "source": "seqAgent_0", - "sourceHandle": "seqAgent_0-output-seqAgent-Agent", - "target": "seqLLMNode_1", - "targetHandle": "seqLLMNode_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode", - "type": "buttonedge", - "id": "seqAgent_0-seqAgent_0-output-seqAgent-Agent-seqLLMNode_1-seqLLMNode_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode" - }, { "source": "seqLLMNode_1", "sourceHandle": "seqLLMNode_1-output-seqLLMNode-LLMNode", @@ -1985,28 +2002,60 @@ "id": "googleCustomSearch_0-googleCustomSearch_0-output-googleCustomSearch-GoogleCustomSearchAPI|Tool|StructuredTool|Runnable-seqAgent_0-seqAgent_0-input-tools-Tool" }, { - "source": "seqCondition_0", - "sourceHandle": "seqCondition_0-output-continue-Agent|LLMNode|ToolNode", - "target": "seqLoop_0", - "targetHandle": "seqLoop_0-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-continue-Agent|LLMNode|ToolNode-seqLoop_0-seqLoop_0-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": "seqLLMNode_0", + "sourceHandle": "seqLLMNode_0-output-seqLLMNode-LLMNode", + "target": "seqAgent_0", + "targetHandle": "seqAgent_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqLLMNode_0-seqLLMNode_0-output-seqLLMNode-LLMNode-seqAgent_0-seqAgent_0-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" + }, + { + "source": "seqAgent_0", + "sourceHandle": "seqAgent_0-output-seqAgent-Agent", + "target": "seqLLMNode_1", + "targetHandle": "seqLLMNode_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqAgent_0-seqAgent_0-output-seqAgent-Agent-seqLLMNode_1-seqLLMNode_1-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" }, { "source": "seqCondition_0", - "sourceHandle": "seqCondition_0-output-generate-Agent|LLMNode|ToolNode", - "target": "seqLLMNode_3", - "targetHandle": "seqLLMNode_3-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "sourceHandle": "seqCondition_0-output-continue-Condition", + "target": "seqLoop_0", + "targetHandle": "seqLoop_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode", "type": "buttonedge", - "id": "seqCondition_0-seqCondition_0-output-generate-Agent|LLMNode|ToolNode-seqLLMNode_3-seqLLMNode_3-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqCondition_0-seqCondition_0-output-continue-Condition-seqLoop_0-seqLoop_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" + }, + { + "source": "seqCondition_0", + "sourceHandle": "seqCondition_0-output-end-Condition", + "target": "seqEnd_0", + "targetHandle": "seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqCondition_0-seqCondition_0-output-end-Condition-seqEnd_0-seqEnd_0-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" + }, + { + "source": "seqCondition_0", + "sourceHandle": "seqCondition_0-output-generate-Condition", + "target": "seqLLMNode_3", + "targetHandle": "seqLLMNode_3-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode", + "type": "buttonedge", + "id": "seqCondition_0-seqCondition_0-output-generate-Condition-seqLLMNode_3-seqLLMNode_3-input-sequentialNode-Start | Agent | Condition | LLMNode | ToolNode" }, { "source": "seqLLMNode_3", "sourceHandle": "seqLLMNode_3-output-seqLLMNode-LLMNode", "target": "seqEnd_1", - "targetHandle": "seqEnd_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode", + "targetHandle": "seqEnd_1-input-sequentialNode-Agent | Condition | LLMNode | ToolNode", "type": "buttonedge", - "id": "seqLLMNode_3-seqLLMNode_3-output-seqLLMNode-LLMNode-seqEnd_1-seqEnd_1-input-sequentialNode-Start | Agent | LLMNode | ToolNode" + "id": "seqLLMNode_3-seqLLMNode_3-output-seqLLMNode-LLMNode-seqEnd_1-seqEnd_1-input-sequentialNode-Agent | Condition | LLMNode | ToolNode" } ] } diff --git a/packages/server/marketplaces/agentflows/Support Routing System.json b/packages/server/marketplaces/agentflows/Support Routing System.json index bf8a2024..97e00901 100644 --- a/packages/server/marketplaces/agentflows/Support Routing System.json +++ b/packages/server/marketplaces/agentflows/Support Routing System.json @@ -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" } ] } diff --git a/packages/ui/src/ui-component/dialog/NodeInfoDialog.jsx b/packages/ui/src/ui-component/dialog/NodeInfoDialog.jsx index 638f4eed..a0bc8aed 100644 --- a/packages/ui/src/ui-component/dialog/NodeInfoDialog.jsx +++ b/packages/ui/src/ui-component/dialog/NodeInfoDialog.jsx @@ -4,8 +4,9 @@ import { useEffect } from 'react' import PropTypes from 'prop-types' // Material -import { Dialog, DialogContent, DialogTitle } from '@mui/material' +import { Button, Dialog, DialogContent, DialogTitle } from '@mui/material' import { TableViewOnly } from '@/ui-component/table/Table' +import { IconBook2 } from '@tabler/icons-react' // Store import { HIDE_CANVAS_DIALOG, SHOW_CANVAS_DIALOG } from '@/store/actions' @@ -163,6 +164,20 @@ const NodeInfoDialog = ({ show, dialogProps, onCancel }) => { ))} +
+ {dialogProps.data.documentation && ( + + )} )} diff --git a/packages/ui/src/utils/genericHelper.js b/packages/ui/src/utils/genericHelper.js index a6039261..17330caa 100644 --- a/packages/ui/src/utils/genericHelper.js +++ b/packages/ui/src/utils/genericHelper.js @@ -207,6 +207,15 @@ export const updateOutdatedNodeData = (newComponentNodeData, existingComponentNo } } } + // Check for tabs + const inputParamsWithTabIdentifiers = initNewComponentNodeData.inputParams.filter((param) => param.tabIdentifier) || [] + + for (const inputParam of inputParamsWithTabIdentifiers) { + const tabIdentifier = `${inputParam.tabIdentifier}_${existingComponentNodeData.id}` + let selectedTabValue = existingComponentNodeData.inputs[tabIdentifier] || inputParam.default + initNewComponentNodeData.inputs[tabIdentifier] = selectedTabValue + initNewComponentNodeData.inputs[selectedTabValue] = existingComponentNodeData.inputs[selectedTabValue] + } // Update outputs with existing outputs if (existingComponentNodeData.outputs) { @@ -217,6 +226,24 @@ export const updateOutdatedNodeData = (newComponentNodeData, existingComponentNo } } + // Special case for Condition node to update outputAnchors + if (initNewComponentNodeData.name.includes('seqCondition')) { + const options = existingComponentNodeData.outputAnchors[0].options || [] + + const newOptions = [] + for (let i = 0; i < options.length; i += 1) { + if (options[i].isAnchor) { + newOptions.push({ + ...options[i], + id: `${initNewComponentNodeData.id}-output-${options[i].name}-Condition`, + type: 'Condition' + }) + } + } + + initNewComponentNodeData.outputAnchors[0].options = newOptions + } + return initNewComponentNodeData } @@ -831,7 +858,7 @@ const createJsonArray = (labels) => { return { label: label, name: toCamelCase(label), - baseClasses: ['Agent', 'LLMNode', 'ToolNode'], + baseClasses: ['Condition'], isAnchor: true } }) diff --git a/packages/ui/src/views/canvas/AddNodes.jsx b/packages/ui/src/views/canvas/AddNodes.jsx index 08ba0cdd..3b8133ca 100644 --- a/packages/ui/src/views/canvas/AddNodes.jsx +++ b/packages/ui/src/views/canvas/AddNodes.jsx @@ -178,6 +178,7 @@ const AddNodes = ({ nodesData, node, isAgentCanvas }) => { setNodes(filteredResult) accordianCategories['Multi Agents'] = true accordianCategories['Sequential Agents'] = true + accordianCategories['Memory'] = true setCategoryExpanded(accordianCategories) } else { const taggedNodes = groupByTags(nodes, newTabValue)