diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Market Research.json b/src/backend/base/langflow/initial_setup/starter_projects/Market Research.json
index 45e89d181..0e216c046 100644
--- a/src/backend/base/langflow/initial_setup/starter_projects/Market Research.json
+++ b/src/backend/base/langflow/initial_setup/starter_projects/Market Research.json
@@ -9,16 +9,12 @@
"dataType": "StructuredOutputComponent",
"id": "StructuredOutputComponent-Kqbq4",
"name": "structured_output",
- "output_types": [
- "Data"
- ]
+ "output_types": ["Data"]
},
"targetHandle": {
"fieldName": "data",
"id": "ParseData-7XOFR",
- "inputTypes": [
- "Data"
- ],
+ "inputTypes": ["Data"],
"type": "other"
}
},
@@ -37,16 +33,12 @@
"dataType": "ChatInput",
"id": "ChatInput-tMLRq",
"name": "message",
- "output_types": [
- "Message"
- ]
+ "output_types": ["Message"]
},
"targetHandle": {
"fieldName": "input_value",
"id": "Agent-dcKuR",
- "inputTypes": [
- "Message"
- ],
+ "inputTypes": ["Message"],
"type": "str"
}
},
@@ -58,23 +50,19 @@
"targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œAgent-dcKuRœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
},
{
- "animated": true,
+ "animated": false,
"className": "",
"data": {
"sourceHandle": {
"dataType": "Agent",
"id": "Agent-dcKuR",
"name": "response",
- "output_types": [
- "Message"
- ]
+ "output_types": ["Message"]
},
"targetHandle": {
"fieldName": "input_value",
"id": "StructuredOutputComponent-Kqbq4",
- "inputTypes": [
- "Message"
- ],
+ "inputTypes": ["Message"],
"type": "str"
}
},
@@ -93,16 +81,12 @@
"dataType": "TavilySearchComponent",
"id": "TavilySearchComponent-cGK9T",
"name": "component_as_tool",
- "output_types": [
- "Tool"
- ]
+ "output_types": ["Tool"]
},
"targetHandle": {
"fieldName": "tools",
"id": "Agent-dcKuR",
- "inputTypes": [
- "Tool"
- ],
+ "inputTypes": ["Tool"],
"type": "other"
}
},
@@ -120,16 +104,12 @@
"dataType": "OpenAIModel",
"id": "OpenAIModel-prL67",
"name": "model_output",
- "output_types": [
- "LanguageModel"
- ]
+ "output_types": ["LanguageModel"]
},
"targetHandle": {
"fieldName": "llm",
"id": "StructuredOutputComponent-Kqbq4",
- "inputTypes": [
- "LanguageModel"
- ],
+ "inputTypes": ["LanguageModel"],
"type": "other"
}
},
@@ -145,18 +125,12 @@
"dataType": "ParseData",
"id": "ParseData-7XOFR",
"name": "text",
- "output_types": [
- "Message"
- ]
+ "output_types": ["Message"]
},
"targetHandle": {
"fieldName": "input_value",
"id": "ChatOutput-JrLxU",
- "inputTypes": [
- "Data",
- "DataFrame",
- "Message"
- ],
+ "inputTypes": ["Data", "DataFrame", "Message"],
"type": "str"
}
},
@@ -174,9 +148,7 @@
"display_name": "Chat Input",
"id": "ChatInput-tMLRq",
"node": {
- "base_classes": [
- "Message"
- ],
+ "base_classes": ["Message"],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@@ -210,9 +182,7 @@
"name": "message",
"selected": "Message",
"tool_mode": true,
- "types": [
- "Message"
- ],
+ "types": ["Message"],
"value": "__UNDEFINED__"
}
],
@@ -225,9 +195,7 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "background_color",
@@ -246,9 +214,7 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@@ -349,10 +315,7 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
- "options": [
- "Machine",
- "User"
- ],
+ "options": ["Machine", "User"],
"placeholder": "",
"required": false,
"show": true,
@@ -367,9 +330,7 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "sender_name",
@@ -388,9 +349,7 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "session_id",
@@ -425,9 +384,7 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "text_color",
@@ -469,9 +426,7 @@
"display_name": "Chat Output",
"id": "ChatOutput-JrLxU",
"node": {
- "base_classes": [
- "Message"
- ],
+ "base_classes": ["Message"],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@@ -505,9 +460,7 @@
"name": "message",
"selected": "Message",
"tool_mode": true,
- "types": [
- "Message"
- ],
+ "types": ["Message"],
"value": "__UNDEFINED__"
}
],
@@ -520,9 +473,7 @@
"display_name": "Background Color",
"dynamic": false,
"info": "The background color of the icon.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "background_color",
@@ -542,9 +493,7 @@
"display_name": "Icon",
"dynamic": false,
"info": "The icon of the message.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "chat_icon",
@@ -600,9 +549,7 @@
"display_name": "Data Template",
"dynamic": false,
"info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "data_template",
@@ -622,11 +569,7 @@
"display_name": "Text",
"dynamic": false,
"info": "Message to be passed as output.",
- "input_types": [
- "Data",
- "DataFrame",
- "Message"
- ],
+ "input_types": ["Data", "DataFrame", "Message"],
"list": false,
"load_from_db": false,
"name": "input_value",
@@ -647,10 +590,7 @@
"dynamic": false,
"info": "Type of sender.",
"name": "sender",
- "options": [
- "Machine",
- "User"
- ],
+ "options": ["Machine", "User"],
"placeholder": "",
"required": false,
"show": true,
@@ -666,9 +606,7 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Name of the sender.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "sender_name",
@@ -688,9 +626,7 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "session_id",
@@ -726,9 +662,7 @@
"display_name": "Text Color",
"dynamic": false,
"info": "The text color of the name",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "text_color",
@@ -883,9 +817,7 @@
"display_name": "Structured Output",
"id": "StructuredOutputComponent-Kqbq4",
"node": {
- "base_classes": [
- "Data"
- ],
+ "base_classes": ["Data"],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@@ -913,9 +845,7 @@
"method": "build_structured_output",
"name": "structured_output",
"selected": "Data",
- "types": [
- "Data"
- ],
+ "types": ["Data"],
"value": "__UNDEFINED__"
}
],
@@ -946,9 +876,7 @@
"display_name": "Input message",
"dynamic": false,
"info": "",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "input_value",
@@ -968,9 +896,7 @@
"display_name": "Language Model",
"dynamic": false,
"info": "The language model to use to generate the structured output.",
- "input_types": [
- "LanguageModel"
- ],
+ "input_types": ["LanguageModel"],
"list": false,
"name": "llm",
"placeholder": "",
@@ -1162,9 +1088,7 @@
"data": {
"id": "ParseData-7XOFR",
"node": {
- "base_classes": [
- "Message"
- ],
+ "base_classes": ["Message"],
"beta": false,
"category": "helpers",
"conditional_paths": [],
@@ -1173,11 +1097,7 @@
"display_name": "Parse Data",
"documentation": "",
"edited": false,
- "field_order": [
- "data",
- "template",
- "sep"
- ],
+ "field_order": ["data", "template", "sep"],
"frozen": false,
"icon": "message-square",
"key": "ParseData",
@@ -1196,9 +1116,7 @@
"name": "text",
"selected": "Message",
"tool_mode": true,
- "types": [
- "Message"
- ],
+ "types": ["Message"],
"value": "__UNDEFINED__"
},
{
@@ -1209,9 +1127,7 @@
"name": "data_list",
"selected": "Data",
"tool_mode": true,
- "types": [
- "Data"
- ],
+ "types": ["Data"],
"value": "__UNDEFINED__"
}
],
@@ -1242,9 +1158,7 @@
"display_name": "Data",
"dynamic": false,
"info": "The data to convert to text.",
- "input_types": [
- "Data"
- ],
+ "input_types": ["Data"],
"list": true,
"name": "data",
"placeholder": "",
@@ -1279,9 +1193,7 @@
"display_name": "Template",
"dynamic": false,
"info": "The template to use for formatting the data. It can contain the keys {text}, {data} or any other key in the Data.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"multiline": true,
@@ -1324,9 +1236,7 @@
"display_name": "Agent",
"id": "Agent-dcKuR",
"node": {
- "base_classes": [
- "Message"
- ],
+ "base_classes": ["Message"],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@@ -1377,9 +1287,7 @@
"name": "response",
"selected": "Message",
"tool_mode": true,
- "types": [
- "Message"
- ],
+ "types": ["Message"],
"value": "__UNDEFINED__"
}
],
@@ -1408,9 +1316,7 @@
"display_name": "Agent Description [Deprecated]",
"dynamic": false,
"info": "The description of the agent. This is only used when in Tool Mode. Defaults to 'A helpful assistant with access to the following tools:' and tools are added dynamically. This feature is deprecated and will be removed in future versions.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"multiline": true,
@@ -1461,9 +1367,7 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"load_from_db": true,
"name": "api_key",
"password": true,
@@ -1514,9 +1418,7 @@
"display_name": "Input",
"dynamic": false,
"info": "The input provided by the user for the agent to process.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "input_value",
@@ -1608,9 +1510,7 @@
"display_name": "External Memory",
"dynamic": false,
"info": "Retrieve messages from an external memory. If empty, it will use the Langflow tables.",
- "input_types": [
- "Memory"
- ],
+ "input_types": ["Memory"],
"list": false,
"name": "memory",
"placeholder": "",
@@ -1704,10 +1604,7 @@
"dynamic": false,
"info": "Order of the messages.",
"name": "order",
- "options": [
- "Ascending",
- "Descending"
- ],
+ "options": ["Ascending", "Descending"],
"placeholder": "",
"required": false,
"show": true,
@@ -1741,11 +1638,7 @@
"dynamic": false,
"info": "Filter by sender type.",
"name": "sender",
- "options": [
- "Machine",
- "User",
- "Machine and User"
- ],
+ "options": ["Machine", "User", "Machine and User"],
"placeholder": "",
"required": false,
"show": true,
@@ -1761,9 +1654,7 @@
"display_name": "Sender Name",
"dynamic": false,
"info": "Filter by sender name.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "sender_name",
@@ -1783,9 +1674,7 @@
"display_name": "Session ID",
"dynamic": false,
"info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"name": "session_id",
@@ -1805,9 +1694,7 @@
"display_name": "Agent Instructions",
"dynamic": false,
"info": "System Prompt: Initial instructions and context provided to guide the agent's behavior.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"multiline": true,
@@ -1844,9 +1731,7 @@
"display_name": "Template",
"dynamic": false,
"info": "The template to use for formatting the data. It can contain the keys {text}, {sender} or any other key in the message data.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"load_from_db": false,
"multiline": true,
@@ -1885,9 +1770,7 @@
"display_name": "Tools",
"dynamic": false,
"info": "These are the tools that the agent can use to help with tasks.",
- "input_types": [
- "Tool"
- ],
+ "input_types": ["Tool"],
"list": true,
"name": "tools",
"placeholder": "",
@@ -1972,10 +1855,7 @@
"display_name": "Tavily AI Search",
"id": "TavilySearchComponent-cGK9T",
"node": {
- "base_classes": [
- "Data",
- "Message"
- ],
+ "base_classes": ["Data", "Message"],
"beta": false,
"conditional_paths": [],
"custom_fields": {},
@@ -2010,9 +1890,7 @@
"required_inputs": null,
"selected": "Tool",
"tool_mode": true,
- "types": [
- "Tool"
- ],
+ "types": ["Tool"],
"value": "__UNDEFINED__"
}
],
@@ -2025,10 +1903,8 @@
"display_name": "Tavily API Key",
"dynamic": false,
"info": "Your Tavily API Key.",
- "input_types": [
- "Message"
- ],
- "load_from_db": false,
+ "input_types": ["Message"],
+ "load_from_db": true,
"name": "api_key",
"password": true,
"placeholder": "",
@@ -2116,9 +1992,7 @@
"display_name": "Search Query",
"dynamic": false,
"info": "The search query you want to execute with Tavily.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@@ -2142,10 +2016,7 @@
"dynamic": false,
"info": "The depth of the search.",
"name": "search_depth",
- "options": [
- "basic",
- "advanced"
- ],
+ "options": ["basic", "advanced"],
"options_metadata": [],
"placeholder": "",
"required": false,
@@ -2165,12 +2036,7 @@
"dynamic": false,
"info": "The time range back from the current date to include in the search results.",
"name": "time_range",
- "options": [
- "day",
- "week",
- "month",
- "year"
- ],
+ "options": ["day", "week", "month", "year"],
"options_metadata": [],
"placeholder": "",
"required": false,
@@ -2205,10 +2071,7 @@
"description": "Modify tool names and descriptions to help agents understand when to use each tool.",
"field_parsers": {
"commands": "commands",
- "name": [
- "snake_case",
- "no_blank"
- ]
+ "name": ["snake_case", "no_blank"]
},
"hide_options": true
},
@@ -2262,16 +2125,12 @@
{
"description": "fetch_content(api_key: Message) - **Tavily AI** is a search engine optimized for LLMs and RAG, aimed at efficient, quick, and persistent search results.",
"name": "TavilySearchComponent-fetch_content",
- "tags": [
- "TavilySearchComponent-fetch_content"
- ]
+ "tags": ["TavilySearchComponent-fetch_content"]
},
{
"description": "fetch_content_text(api_key: Message) - **Tavily AI** is a search engine optimized for LLMs and RAG, aimed at efficient, quick, and persistent search results.",
"name": "TavilySearchComponent-fetch_content_text",
- "tags": [
- "TavilySearchComponent-fetch_content_text"
- ]
+ "tags": ["TavilySearchComponent-fetch_content_text"]
}
]
},
@@ -2284,10 +2143,7 @@
"dynamic": false,
"info": "The category of the search.",
"name": "topic",
- "options": [
- "general",
- "news"
- ],
+ "options": ["general", "news"],
"options_metadata": [],
"placeholder": "",
"required": false,
@@ -2321,10 +2177,7 @@
"data": {
"id": "OpenAIModel-prL67",
"node": {
- "base_classes": [
- "LanguageModel",
- "Message"
- ],
+ "base_classes": ["LanguageModel", "Message"],
"beta": false,
"category": "models",
"conditional_paths": [],
@@ -2363,9 +2216,7 @@
"required_inputs": [],
"selected": "Message",
"tool_mode": true,
- "types": [
- "Message"
- ],
+ "types": ["Message"],
"value": "__UNDEFINED__"
},
{
@@ -2374,14 +2225,10 @@
"display_name": "Language Model",
"method": "build_model",
"name": "model_output",
- "required_inputs": [
- "api_key"
- ],
+ "required_inputs": ["api_key"],
"selected": "LanguageModel",
"tool_mode": true,
- "types": [
- "LanguageModel"
- ],
+ "types": ["LanguageModel"],
"value": "__UNDEFINED__"
}
],
@@ -2395,9 +2242,7 @@
"display_name": "OpenAI API Key",
"dynamic": false,
"info": "The OpenAI API Key to use for the OpenAI model.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"load_from_db": true,
"name": "api_key",
"password": true,
@@ -2432,9 +2277,7 @@
"display_name": "Input",
"dynamic": false,
"info": "",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@@ -2616,9 +2459,7 @@
"display_name": "System Message",
"dynamic": false,
"info": "System message to pass to the model.",
- "input_types": [
- "Message"
- ],
+ "input_types": ["Message"],
"list": false,
"list_add_label": "Add More",
"load_from_db": false,
@@ -2714,8 +2555,5 @@
"is_component": false,
"last_tested_version": "1.1.1",
"name": "Market Research",
- "tags": [
- "assistants",
- "agents"
- ]
-}
\ No newline at end of file
+ "tags": ["assistants", "agents"]
+}
diff --git a/src/backend/tests/data/ChatInputTest.json b/src/backend/tests/data/ChatInputTest.json
index 3c516067e..408d8e13e 100644
--- a/src/backend/tests/data/ChatInputTest.json
+++ b/src/backend/tests/data/ChatInputTest.json
@@ -903,7 +903,7 @@
"stroke": "#555"
},
"className": "stroke-foreground stroke-connection",
- "animated": true,
+ "animated": false,
"id": "reactflow__edge-LLMChain-e2dhNLLMChain|LLMChain-e2dhN|Chain|LLMChain|function|Text-ChatOutput-1jlJyText|message|ChatOutput-1jlJy"
}
],
diff --git a/src/backend/tests/data/TwoOutputsTest.json b/src/backend/tests/data/TwoOutputsTest.json
index 4cd060249..b91551227 100644
--- a/src/backend/tests/data/TwoOutputsTest.json
+++ b/src/backend/tests/data/TwoOutputsTest.json
@@ -1,1024 +1,996 @@
{
- "name": "TwoOutputsTest",
- "description": "",
- "data": {
- "nodes": [
- {
- "width": 384,
- "height": 359,
- "id": "PromptTemplate-CweKz",
- "type": "genericNode",
- "position": {
- "x": 969.6448076246203,
- "y": 528.7788853763968
- },
- "data": {
- "type": "PromptTemplate",
- "node": {
- "template": {
- "output_parser": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "output_parser",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "BaseOutputParser",
- "list": false
- },
- "input_variables": {
- "required": true,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "input_variables",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": true,
- "value": [
- "input"
- ]
- },
- "partial_variables": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "partial_variables",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "code",
- "list": false
- },
- "template": {
- "required": true,
- "placeholder": "",
- "show": true,
- "multiline": true,
- "password": false,
- "name": "template",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "prompt",
- "list": false,
- "value": "Input: {input}\nAI:"
- },
- "template_format": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "value": "f-string",
- "password": false,
- "name": "template_format",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": false
- },
- "validate_template": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "value": true,
- "password": false,
- "name": "validate_template",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "bool",
- "list": false
- },
- "_type": "PromptTemplate",
- "input": {
- "required": false,
- "placeholder": "",
- "show": true,
- "multiline": true,
- "value": "",
- "password": false,
- "name": "input",
- "display_name": "input",
- "advanced": false,
- "input_types": [
- "Document",
- "BaseOutputParser",
- "str"
- ],
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": false
- }
- },
- "description": "A prompt template for a language model.",
- "base_classes": [
- "BasePromptTemplate",
- "StringPromptTemplate",
- "PromptTemplate"
- ],
- "name": "",
- "display_name": "PromptTemplate",
- "documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
- "custom_fields": {
- "": [
- "input"
- ],
- "template": [
- "input"
- ]
- },
- "output_types": [],
- "field_formatters": {
- "formatters": {
- "openai_api_key": {}
- },
- "base_formatters": {
- "kwargs": {},
- "optional": {},
- "list": {},
- "dict": {},
- "union": {},
- "multiline": {},
- "show": {},
- "password": {},
- "default": {},
- "headers": {},
- "dict_code_file": {},
- "model_fields": {
- "MODEL_DICT": {
- "OpenAI": [
- "text-davinci-003",
- "text-davinci-002",
- "text-curie-001",
- "text-babbage-001",
- "text-ada-001"
- ],
- "ChatOpenAI": [
- "gpt-3.5-turbo-0613",
- "gpt-3.5-turbo",
- "gpt-3.5-turbo-16k-0613",
- "gpt-3.5-turbo-16k",
- "gpt-4-0613",
- "gpt-4-32k-0613",
- "gpt-4",
- "gpt-4-32k"
- ],
- "Anthropic": [
- "claude-v1",
- "claude-v1-100k",
- "claude-instant-v1",
- "claude-instant-v1-100k",
- "claude-v1.3",
- "claude-v1.3-100k",
- "claude-v1.2",
- "claude-v1.0",
- "claude-instant-v1.1",
- "claude-instant-v1.1-100k",
- "claude-instant-v1.0"
- ],
- "ChatAnthropic": [
- "claude-v1",
- "claude-v1-100k",
- "claude-instant-v1",
- "claude-instant-v1-100k",
- "claude-v1.3",
- "claude-v1.3-100k",
- "claude-v1.2",
- "claude-v1.0",
- "claude-instant-v1.1",
- "claude-instant-v1.1-100k",
- "claude-instant-v1.0"
- ]
- }
- }
- }
- },
- "beta": false,
- "error": null
- },
- "id": "PromptTemplate-CweKz"
- },
- "selected": false,
- "positionAbsolute": {
- "x": 969.6448076246203,
- "y": 528.7788853763968
+ "name": "TwoOutputsTest",
+ "description": "",
+ "data": {
+ "nodes": [
+ {
+ "width": 384,
+ "height": 359,
+ "id": "PromptTemplate-CweKz",
+ "type": "genericNode",
+ "position": {
+ "x": 969.6448076246203,
+ "y": 528.7788853763968
+ },
+ "data": {
+ "type": "PromptTemplate",
+ "node": {
+ "template": {
+ "output_parser": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "output_parser",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "BaseOutputParser",
+ "list": false
+ },
+ "input_variables": {
+ "required": true,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "input_variables",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": true,
+ "value": ["input"]
+ },
+ "partial_variables": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "partial_variables",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "code",
+ "list": false
+ },
+ "template": {
+ "required": true,
+ "placeholder": "",
+ "show": true,
+ "multiline": true,
+ "password": false,
+ "name": "template",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "prompt",
+ "list": false,
+ "value": "Input: {input}\nAI:"
+ },
+ "template_format": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "value": "f-string",
+ "password": false,
+ "name": "template_format",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": false
+ },
+ "validate_template": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "value": true,
+ "password": false,
+ "name": "validate_template",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "bool",
+ "list": false
+ },
+ "_type": "PromptTemplate",
+ "input": {
+ "required": false,
+ "placeholder": "",
+ "show": true,
+ "multiline": true,
+ "value": "",
+ "password": false,
+ "name": "input",
+ "display_name": "input",
+ "advanced": false,
+ "input_types": ["Document", "BaseOutputParser", "str"],
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": false
+ }
+ },
+ "description": "A prompt template for a language model.",
+ "base_classes": [
+ "BasePromptTemplate",
+ "StringPromptTemplate",
+ "PromptTemplate"
+ ],
+ "name": "",
+ "display_name": "PromptTemplate",
+ "documentation": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/",
+ "custom_fields": {
+ "": ["input"],
+ "template": ["input"]
+ },
+ "output_types": [],
+ "field_formatters": {
+ "formatters": {
+ "openai_api_key": {}
+ },
+ "base_formatters": {
+ "kwargs": {},
+ "optional": {},
+ "list": {},
+ "dict": {},
+ "union": {},
+ "multiline": {},
+ "show": {},
+ "password": {},
+ "default": {},
+ "headers": {},
+ "dict_code_file": {},
+ "model_fields": {
+ "MODEL_DICT": {
+ "OpenAI": [
+ "text-davinci-003",
+ "text-davinci-002",
+ "text-curie-001",
+ "text-babbage-001",
+ "text-ada-001"
+ ],
+ "ChatOpenAI": [
+ "gpt-3.5-turbo-0613",
+ "gpt-3.5-turbo",
+ "gpt-3.5-turbo-16k-0613",
+ "gpt-3.5-turbo-16k",
+ "gpt-4-0613",
+ "gpt-4-32k-0613",
+ "gpt-4",
+ "gpt-4-32k"
+ ],
+ "Anthropic": [
+ "claude-v1",
+ "claude-v1-100k",
+ "claude-instant-v1",
+ "claude-instant-v1-100k",
+ "claude-v1.3",
+ "claude-v1.3-100k",
+ "claude-v1.2",
+ "claude-v1.0",
+ "claude-instant-v1.1",
+ "claude-instant-v1.1-100k",
+ "claude-instant-v1.0"
+ ],
+ "ChatAnthropic": [
+ "claude-v1",
+ "claude-v1-100k",
+ "claude-instant-v1",
+ "claude-instant-v1-100k",
+ "claude-v1.3",
+ "claude-v1.3-100k",
+ "claude-v1.2",
+ "claude-v1.0",
+ "claude-instant-v1.1",
+ "claude-instant-v1.1-100k",
+ "claude-instant-v1.0"
+ ]
+ }
}
+ }
},
- {
- "width": 384,
- "height": 307,
- "id": "LLMChain-HUM6g",
- "type": "genericNode",
- "position": {
- "x": 1515.3241458756393,
- "y": 732.4536491407735
- },
- "data": {
- "type": "LLMChain",
- "node": {
- "template": {
- "callbacks": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "callbacks",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "langchain.callbacks.base.BaseCallbackHandler",
- "list": true
- },
- "llm": {
- "required": true,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "password": false,
- "name": "llm",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "BaseLanguageModel",
- "list": false
- },
- "memory": {
- "required": false,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "password": false,
- "name": "memory",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "BaseMemory",
- "list": false
- },
- "output_parser": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "output_parser",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "BaseLLMOutputParser",
- "list": false
- },
- "prompt": {
- "required": true,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "password": false,
- "name": "prompt",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "BasePromptTemplate",
- "list": false
- },
- "llm_kwargs": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "llm_kwargs",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "code",
- "list": false
- },
- "metadata": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "metadata",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "code",
- "list": false
- },
- "output_key": {
- "required": true,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "value": "text",
- "password": false,
- "name": "output_key",
- "advanced": true,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": false
- },
- "return_final_only": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "value": true,
- "password": false,
- "name": "return_final_only",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "bool",
- "list": false
- },
- "tags": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "tags",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": true
- },
- "verbose": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "value": false,
- "password": false,
- "name": "verbose",
- "advanced": true,
- "dynamic": false,
- "info": "",
- "type": "bool",
- "list": false
- },
- "_type": "LLMChain"
- },
- "description": "Chain to run queries against LLMs.",
- "base_classes": [
- "LLMChain",
- "Chain",
- "function",
- "Text"
- ],
- "display_name": "LLMChain",
- "custom_fields": {},
- "output_types": [],
- "documentation": "https://python.langchain.com/docs/modules/chains/foundational/llm_chain",
- "beta": false,
- "error": null
- },
- "id": "LLMChain-HUM6g"
- },
- "selected": false,
- "positionAbsolute": {
- "x": 1515.3241458756393,
- "y": 732.4536491407735
- },
- "dragging": false
- },
- {
- "width": 384,
- "height": 621,
- "id": "ChatOpenAI-02kOF",
- "type": "genericNode",
- "position": {
- "x": 483,
- "y": 942.8665628296949
- },
- "data": {
- "type": "ChatOpenAI",
- "node": {
- "template": {
- "callbacks": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "callbacks",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "langchain.callbacks.base.BaseCallbackHandler",
- "list": true
- },
- "cache": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "cache",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "bool",
- "list": false
- },
- "client": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "client",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "Any",
- "list": false
- },
- "max_retries": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "value": 6,
- "password": false,
- "name": "max_retries",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "int",
- "list": false
- },
- "max_tokens": {
- "required": false,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "password": true,
- "name": "max_tokens",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "int",
- "list": false,
- "value": ""
- },
- "metadata": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "metadata",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "code",
- "list": false
- },
- "model_kwargs": {
- "required": false,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "password": false,
- "name": "model_kwargs",
- "advanced": true,
- "dynamic": false,
- "info": "",
- "type": "code",
- "list": false
- },
- "model_name": {
- "required": false,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "value": "gpt-3.5-turbo-0613",
- "password": false,
- "options": [
- "gpt-3.5-turbo-0613",
- "gpt-3.5-turbo",
- "gpt-3.5-turbo-16k-0613",
- "gpt-3.5-turbo-16k",
- "gpt-4-0613",
- "gpt-4-32k-0613",
- "gpt-4",
- "gpt-4-32k"
- ],
- "name": "model_name",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": true
- },
- "n": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "value": 1,
- "password": false,
- "name": "n",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "int",
- "list": false
- },
- "openai_api_base": {
- "required": false,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "password": false,
- "name": "openai_api_base",
- "display_name": "OpenAI API Base",
- "advanced": false,
- "dynamic": false,
- "info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
- "type": "str",
- "list": false
- },
- "openai_api_key": {
- "required": false,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "value": "",
- "password": true,
- "name": "openai_api_key",
- "display_name": "OpenAI API Key",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": false
- },
- "openai_organization": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "openai_organization",
- "display_name": "OpenAI Organization",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": false
- },
- "openai_proxy": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "openai_proxy",
- "display_name": "OpenAI Proxy",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": false
- },
- "request_timeout": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "request_timeout",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "float",
- "list": false
- },
- "streaming": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "value": false,
- "password": false,
- "name": "streaming",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "bool",
- "list": false
- },
- "tags": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "tags",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": true
- },
- "temperature": {
- "required": false,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "value": 0.7,
- "password": false,
- "name": "temperature",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "float",
- "list": false
- },
- "tiktoken_model_name": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "password": false,
- "name": "tiktoken_model_name",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": false
- },
- "verbose": {
- "required": false,
- "placeholder": "",
- "show": false,
- "multiline": false,
- "value": false,
- "password": false,
- "name": "verbose",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "bool",
- "list": false
- },
- "_type": "ChatOpenAI"
- },
- "description": "`OpenAI` Chat large language models API.",
- "base_classes": [
- "ChatOpenAI",
- "BaseLanguageModel",
- "BaseChatModel",
- "BaseLLM"
- ],
- "display_name": "ChatOpenAI",
- "custom_fields": {},
- "output_types": [],
- "documentation": "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai",
- "beta": false,
- "error": null
- },
- "id": "ChatOpenAI-02kOF"
- },
- "selected": false,
- "positionAbsolute": {
- "x": 483,
- "y": 942.8665628296949
- }
- },
- {
- "width": 384,
- "height": 389,
- "id": "ChatOutput-8SWFf",
- "type": "genericNode",
- "position": {
- "x": 2035.5749798606498,
- "y": 651.0174452514373
- },
- "data": {
- "type": "ChatOutput",
- "node": {
- "template": {
- "code": {
- "dynamic": true,
- "required": true,
- "placeholder": "",
- "show": true,
- "multiline": true,
- "value": "from typing import Optional\nfrom langflow.api.v1.schemas import ChatMessage\nfrom langflow.services.utils import get_chat_manager\nfrom langflow.custom import CustomComponent\nfrom anyio.from_thread import start_blocking_portal\nfrom loguru import logger\nfrom langflow.field_typing import Text\n\n\nclass ChatOutput(CustomComponent):\n display_name = \"Chat Output\"\n\n def build_config(self):\n return {\"message\": {\"input_types\": [\"str\"]}}\n\n def build(self, message: Optional[Text], is_ai: bool = False) -> Text:\n if not message:\n return \"\"\n try:\n chat_manager = get_chat_manager()\n chat_message = ChatMessage(message=message, is_bot=is_ai)\n # send_message is a coroutine\n # run in a thread safe manner\n with start_blocking_portal() as portal:\n portal.call(chat_manager.send_message, chat_message)\n chat_manager.chat_history.add_message(\n chat_manager.cache_manager.current_client_id, chat_message\n )\n except Exception as exc:\n logger.exception(exc)\n logger.debug(f\"Error sending message to chat: {exc}\")\n\n return message\n",
- "password": false,
- "name": "code",
- "advanced": false,
- "type": "code",
- "list": false
- },
- "_type": "CustomComponent",
- "is_ai": {
- "required": true,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "value": false,
- "password": false,
- "name": "is_ai",
- "display_name": "is_ai",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "bool",
- "list": false
- },
- "message": {
- "required": false,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "password": false,
- "name": "message",
- "display_name": "message",
- "advanced": false,
- "input_types": [
- "Text"
- ],
- "dynamic": false,
- "info": "",
- "type": "Text",
- "list": false
- }
- },
- "description": "Used to send a message to the chat.",
- "base_classes": [
- "str"
- ],
- "display_name": "Chat Output",
- "custom_fields": {
- "is_ai": null,
- "message": null
- },
- "output_types": [
- "ChatOutput"
- ],
- "documentation": "",
- "beta": true,
- "error": null
- },
- "id": "ChatOutput-8SWFf"
- },
- "selected": false,
- "positionAbsolute": {
- "x": 2035.5749798606498,
- "y": 651.0174452514373
- }
- },
- {
- "width": 384,
- "height": 273,
- "id": "ChatInput-PqtHe",
- "type": "genericNode",
- "position": {
- "x": 504.7467002897712,
- "y": 388.46875
- },
- "data": {
- "type": "ChatInput",
- "node": {
- "template": {
- "code": {
- "dynamic": true,
- "required": true,
- "placeholder": "",
- "show": false,
- "multiline": true,
- "value": "from typing import Optional\nfrom langflow.custom import CustomComponent\n\n\nclass ChatInput(CustomComponent):\n display_name = \"Chat Input\"\n\n def build(self, message: Optional[str] = \"\") -> str:\n return message\n",
- "password": false,
- "name": "code",
- "advanced": false,
- "type": "code",
- "list": false
- },
- "_type": "CustomComponent",
- "message": {
- "required": false,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "value": "",
- "password": false,
- "name": "message",
- "display_name": "message",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": false
- }
- },
- "description": "Used to get user input from the chat.",
- "base_classes": [
- "str"
- ],
- "display_name": "Chat Input",
- "custom_fields": {
- "message": null
- },
- "output_types": [
- "ChatInput"
- ],
- "documentation": "",
- "beta": true,
- "error": null
- },
- "id": "ChatInput-PqtHe"
- },
- "selected": false,
- "positionAbsolute": {
- "x": 504.7467002897712,
- "y": 388.46875
- }
- },
- {
- "width": 384,
- "height": 475,
- "id": "Tool-jyI4N",
- "type": "genericNode",
- "position": {
- "x": 2044.485030617051,
- "y": 1131.4250055845532
- },
- "data": {
- "type": "Tool",
- "node": {
- "template": {
- "func": {
- "required": true,
- "placeholder": "",
- "show": true,
- "multiline": true,
- "password": false,
- "name": "func",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "function",
- "list": false
- },
- "description": {
- "required": true,
- "placeholder": "",
- "show": true,
- "multiline": true,
- "value": "Test tool",
- "password": false,
- "name": "description",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": false
- },
- "name": {
- "required": true,
- "placeholder": "",
- "show": true,
- "multiline": true,
- "value": "Tool",
- "password": false,
- "name": "name",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "str",
- "list": false
- },
- "return_direct": {
- "required": true,
- "placeholder": "",
- "show": true,
- "multiline": false,
- "value": false,
- "password": false,
- "name": "return_direct",
- "advanced": false,
- "dynamic": false,
- "info": "",
- "type": "bool",
- "list": false
- },
- "_type": "Tool"
- },
- "description": "Converts a chain, agent or function into a tool.",
- "base_classes": [
- "Tool",
- "BaseTool"
- ],
- "display_name": "Tool",
- "custom_fields": {},
- "output_types": [],
- "documentation": "",
- "beta": false,
- "error": null
- },
- "id": "Tool-jyI4N"
- },
- "selected": true,
- "positionAbsolute": {
- "x": 2044.485030617051,
- "y": 1131.4250055845532
- },
- "dragging": false
- }
- ],
- "edges": [
- {
- "source": "PromptTemplate-CweKz",
- "target": "LLMChain-HUM6g",
- "sourceHandle": "PromptTemplate|PromptTemplate-CweKz|BasePromptTemplate|StringPromptTemplate|PromptTemplate",
- "targetHandle": "BasePromptTemplate|prompt|LLMChain-HUM6g",
- "id": "reactflow__edge-PromptTemplate-CweKzPromptTemplate|PromptTemplate-CweKz|BasePromptTemplate|StringPromptTemplate|PromptTemplate-LLMChain-HUM6gBasePromptTemplate|prompt|LLMChain-HUM6g",
- "style": {
- "stroke": "#555"
- },
- "className": "stroke-gray-900 ",
- "animated": false,
- "selected": false
- },
- {
- "source": "ChatOpenAI-02kOF",
- "target": "LLMChain-HUM6g",
- "sourceHandle": "ChatOpenAI|ChatOpenAI-02kOF|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM",
- "targetHandle": "BaseLanguageModel|llm|LLMChain-HUM6g",
- "id": "reactflow__edge-ChatOpenAI-02kOFChatOpenAI|ChatOpenAI-02kOF|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM-LLMChain-HUM6gBaseLanguageModel|llm|LLMChain-HUM6g",
- "style": {
- "stroke": "#555"
- },
- "className": "stroke-gray-900 ",
- "animated": false,
- "selected": false
- },
- {
- "source": "ChatInput-PqtHe",
- "target": "PromptTemplate-CweKz",
- "sourceHandle": "ChatInput|ChatInput-PqtHe|str",
- "targetHandle": "Document;BaseOutputParser;str|input|PromptTemplate-CweKz",
- "id": "reactflow__edge-ChatInput-PqtHeChatInput|ChatInput-PqtHe|str-PromptTemplate-CweKzDocument;BaseOutputParser;str|input|PromptTemplate-CweKz",
- "style": {
- "stroke": "#555"
- },
- "className": "stroke-gray-900 ",
- "animated": false,
- "selected": false
- },
- {
- "source": "LLMChain-HUM6g",
- "sourceHandle": "LLMChain|LLMChain-HUM6g|LLMChain|Chain|function|Text",
- "target": "ChatOutput-8SWFf",
- "targetHandle": "Text|message|ChatOutput-8SWFf",
- "style": {
- "stroke": "#555"
- },
- "className": "stroke-foreground stroke-connection",
- "animated": true,
- "id": "reactflow__edge-LLMChain-HUM6gLLMChain|LLMChain-HUM6g|LLMChain|Chain|function|Text-ChatOutput-8SWFfText|message|ChatOutput-8SWFf"
- },
- {
- "source": "LLMChain-HUM6g",
- "sourceHandle": "LLMChain|LLMChain-HUM6g|LLMChain|Chain|function|Text",
- "target": "Tool-jyI4N",
- "targetHandle": "function|func|Tool-jyI4N",
- "style": {
- "stroke": "#555"
- },
- "className": "stroke-foreground stroke-connection",
- "animated": false,
- "id": "reactflow__edge-LLMChain-HUM6gLLMChain|LLMChain-HUM6g|LLMChain|Chain|function|Text-Tool-jyI4Nfunction|func|Tool-jyI4N"
- }
- ],
- "viewport": {
- "x": -401.32668426335044,
- "y": -129.59138346130635,
- "zoom": 0.5073779796520557
+ "beta": false,
+ "error": null
+ },
+ "id": "PromptTemplate-CweKz"
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 969.6448076246203,
+ "y": 528.7788853763968
}
- },
- "id": "cf923ccb-e14c-4754-96eb-a8a3b5bbe082",
- "user_id": "c65bfea3-3eea-4e71-8fc4-106238eb0583"
-}
\ No newline at end of file
+ },
+ {
+ "width": 384,
+ "height": 307,
+ "id": "LLMChain-HUM6g",
+ "type": "genericNode",
+ "position": {
+ "x": 1515.3241458756393,
+ "y": 732.4536491407735
+ },
+ "data": {
+ "type": "LLMChain",
+ "node": {
+ "template": {
+ "callbacks": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "callbacks",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "langchain.callbacks.base.BaseCallbackHandler",
+ "list": true
+ },
+ "llm": {
+ "required": true,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "password": false,
+ "name": "llm",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "BaseLanguageModel",
+ "list": false
+ },
+ "memory": {
+ "required": false,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "password": false,
+ "name": "memory",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "BaseMemory",
+ "list": false
+ },
+ "output_parser": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "output_parser",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "BaseLLMOutputParser",
+ "list": false
+ },
+ "prompt": {
+ "required": true,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "password": false,
+ "name": "prompt",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "BasePromptTemplate",
+ "list": false
+ },
+ "llm_kwargs": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "llm_kwargs",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "code",
+ "list": false
+ },
+ "metadata": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "metadata",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "code",
+ "list": false
+ },
+ "output_key": {
+ "required": true,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "value": "text",
+ "password": false,
+ "name": "output_key",
+ "advanced": true,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": false
+ },
+ "return_final_only": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "value": true,
+ "password": false,
+ "name": "return_final_only",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "bool",
+ "list": false
+ },
+ "tags": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "tags",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": true
+ },
+ "verbose": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "value": false,
+ "password": false,
+ "name": "verbose",
+ "advanced": true,
+ "dynamic": false,
+ "info": "",
+ "type": "bool",
+ "list": false
+ },
+ "_type": "LLMChain"
+ },
+ "description": "Chain to run queries against LLMs.",
+ "base_classes": ["LLMChain", "Chain", "function", "Text"],
+ "display_name": "LLMChain",
+ "custom_fields": {},
+ "output_types": [],
+ "documentation": "https://python.langchain.com/docs/modules/chains/foundational/llm_chain",
+ "beta": false,
+ "error": null
+ },
+ "id": "LLMChain-HUM6g"
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 1515.3241458756393,
+ "y": 732.4536491407735
+ },
+ "dragging": false
+ },
+ {
+ "width": 384,
+ "height": 621,
+ "id": "ChatOpenAI-02kOF",
+ "type": "genericNode",
+ "position": {
+ "x": 483,
+ "y": 942.8665628296949
+ },
+ "data": {
+ "type": "ChatOpenAI",
+ "node": {
+ "template": {
+ "callbacks": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "callbacks",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "langchain.callbacks.base.BaseCallbackHandler",
+ "list": true
+ },
+ "cache": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "cache",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "bool",
+ "list": false
+ },
+ "client": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "client",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "Any",
+ "list": false
+ },
+ "max_retries": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "value": 6,
+ "password": false,
+ "name": "max_retries",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "int",
+ "list": false
+ },
+ "max_tokens": {
+ "required": false,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "password": true,
+ "name": "max_tokens",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "int",
+ "list": false,
+ "value": ""
+ },
+ "metadata": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "metadata",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "code",
+ "list": false
+ },
+ "model_kwargs": {
+ "required": false,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "password": false,
+ "name": "model_kwargs",
+ "advanced": true,
+ "dynamic": false,
+ "info": "",
+ "type": "code",
+ "list": false
+ },
+ "model_name": {
+ "required": false,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "value": "gpt-3.5-turbo-0613",
+ "password": false,
+ "options": [
+ "gpt-3.5-turbo-0613",
+ "gpt-3.5-turbo",
+ "gpt-3.5-turbo-16k-0613",
+ "gpt-3.5-turbo-16k",
+ "gpt-4-0613",
+ "gpt-4-32k-0613",
+ "gpt-4",
+ "gpt-4-32k"
+ ],
+ "name": "model_name",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": true
+ },
+ "n": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "value": 1,
+ "password": false,
+ "name": "n",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "int",
+ "list": false
+ },
+ "openai_api_base": {
+ "required": false,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "password": false,
+ "name": "openai_api_base",
+ "display_name": "OpenAI API Base",
+ "advanced": false,
+ "dynamic": false,
+ "info": "\nThe base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\nYou can change this to use other APIs like JinaChat, LocalAI and Prem.\n",
+ "type": "str",
+ "list": false
+ },
+ "openai_api_key": {
+ "required": false,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "value": "",
+ "password": true,
+ "name": "openai_api_key",
+ "display_name": "OpenAI API Key",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": false
+ },
+ "openai_organization": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "openai_organization",
+ "display_name": "OpenAI Organization",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": false
+ },
+ "openai_proxy": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "openai_proxy",
+ "display_name": "OpenAI Proxy",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": false
+ },
+ "request_timeout": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "request_timeout",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "float",
+ "list": false
+ },
+ "streaming": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "value": false,
+ "password": false,
+ "name": "streaming",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "bool",
+ "list": false
+ },
+ "tags": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "tags",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": true
+ },
+ "temperature": {
+ "required": false,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "value": 0.7,
+ "password": false,
+ "name": "temperature",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "float",
+ "list": false
+ },
+ "tiktoken_model_name": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "password": false,
+ "name": "tiktoken_model_name",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": false
+ },
+ "verbose": {
+ "required": false,
+ "placeholder": "",
+ "show": false,
+ "multiline": false,
+ "value": false,
+ "password": false,
+ "name": "verbose",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "bool",
+ "list": false
+ },
+ "_type": "ChatOpenAI"
+ },
+ "description": "`OpenAI` Chat large language models API.",
+ "base_classes": [
+ "ChatOpenAI",
+ "BaseLanguageModel",
+ "BaseChatModel",
+ "BaseLLM"
+ ],
+ "display_name": "ChatOpenAI",
+ "custom_fields": {},
+ "output_types": [],
+ "documentation": "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/openai",
+ "beta": false,
+ "error": null
+ },
+ "id": "ChatOpenAI-02kOF"
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 483,
+ "y": 942.8665628296949
+ }
+ },
+ {
+ "width": 384,
+ "height": 389,
+ "id": "ChatOutput-8SWFf",
+ "type": "genericNode",
+ "position": {
+ "x": 2035.5749798606498,
+ "y": 651.0174452514373
+ },
+ "data": {
+ "type": "ChatOutput",
+ "node": {
+ "template": {
+ "code": {
+ "dynamic": true,
+ "required": true,
+ "placeholder": "",
+ "show": true,
+ "multiline": true,
+ "value": "from typing import Optional\nfrom langflow.api.v1.schemas import ChatMessage\nfrom langflow.services.utils import get_chat_manager\nfrom langflow.custom import CustomComponent\nfrom anyio.from_thread import start_blocking_portal\nfrom loguru import logger\nfrom langflow.field_typing import Text\n\n\nclass ChatOutput(CustomComponent):\n display_name = \"Chat Output\"\n\n def build_config(self):\n return {\"message\": {\"input_types\": [\"str\"]}}\n\n def build(self, message: Optional[Text], is_ai: bool = False) -> Text:\n if not message:\n return \"\"\n try:\n chat_manager = get_chat_manager()\n chat_message = ChatMessage(message=message, is_bot=is_ai)\n # send_message is a coroutine\n # run in a thread safe manner\n with start_blocking_portal() as portal:\n portal.call(chat_manager.send_message, chat_message)\n chat_manager.chat_history.add_message(\n chat_manager.cache_manager.current_client_id, chat_message\n )\n except Exception as exc:\n logger.exception(exc)\n logger.debug(f\"Error sending message to chat: {exc}\")\n\n return message\n",
+ "password": false,
+ "name": "code",
+ "advanced": false,
+ "type": "code",
+ "list": false
+ },
+ "_type": "CustomComponent",
+ "is_ai": {
+ "required": true,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "value": false,
+ "password": false,
+ "name": "is_ai",
+ "display_name": "is_ai",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "bool",
+ "list": false
+ },
+ "message": {
+ "required": false,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "password": false,
+ "name": "message",
+ "display_name": "message",
+ "advanced": false,
+ "input_types": ["Text"],
+ "dynamic": false,
+ "info": "",
+ "type": "Text",
+ "list": false
+ }
+ },
+ "description": "Used to send a message to the chat.",
+ "base_classes": ["str"],
+ "display_name": "Chat Output",
+ "custom_fields": {
+ "is_ai": null,
+ "message": null
+ },
+ "output_types": ["ChatOutput"],
+ "documentation": "",
+ "beta": true,
+ "error": null
+ },
+ "id": "ChatOutput-8SWFf"
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 2035.5749798606498,
+ "y": 651.0174452514373
+ }
+ },
+ {
+ "width": 384,
+ "height": 273,
+ "id": "ChatInput-PqtHe",
+ "type": "genericNode",
+ "position": {
+ "x": 504.7467002897712,
+ "y": 388.46875
+ },
+ "data": {
+ "type": "ChatInput",
+ "node": {
+ "template": {
+ "code": {
+ "dynamic": true,
+ "required": true,
+ "placeholder": "",
+ "show": false,
+ "multiline": true,
+ "value": "from typing import Optional\nfrom langflow.custom import CustomComponent\n\n\nclass ChatInput(CustomComponent):\n display_name = \"Chat Input\"\n\n def build(self, message: Optional[str] = \"\") -> str:\n return message\n",
+ "password": false,
+ "name": "code",
+ "advanced": false,
+ "type": "code",
+ "list": false
+ },
+ "_type": "CustomComponent",
+ "message": {
+ "required": false,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "value": "",
+ "password": false,
+ "name": "message",
+ "display_name": "message",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": false
+ }
+ },
+ "description": "Used to get user input from the chat.",
+ "base_classes": ["str"],
+ "display_name": "Chat Input",
+ "custom_fields": {
+ "message": null
+ },
+ "output_types": ["ChatInput"],
+ "documentation": "",
+ "beta": true,
+ "error": null
+ },
+ "id": "ChatInput-PqtHe"
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 504.7467002897712,
+ "y": 388.46875
+ }
+ },
+ {
+ "width": 384,
+ "height": 475,
+ "id": "Tool-jyI4N",
+ "type": "genericNode",
+ "position": {
+ "x": 2044.485030617051,
+ "y": 1131.4250055845532
+ },
+ "data": {
+ "type": "Tool",
+ "node": {
+ "template": {
+ "func": {
+ "required": true,
+ "placeholder": "",
+ "show": true,
+ "multiline": true,
+ "password": false,
+ "name": "func",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "function",
+ "list": false
+ },
+ "description": {
+ "required": true,
+ "placeholder": "",
+ "show": true,
+ "multiline": true,
+ "value": "Test tool",
+ "password": false,
+ "name": "description",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": false
+ },
+ "name": {
+ "required": true,
+ "placeholder": "",
+ "show": true,
+ "multiline": true,
+ "value": "Tool",
+ "password": false,
+ "name": "name",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "str",
+ "list": false
+ },
+ "return_direct": {
+ "required": true,
+ "placeholder": "",
+ "show": true,
+ "multiline": false,
+ "value": false,
+ "password": false,
+ "name": "return_direct",
+ "advanced": false,
+ "dynamic": false,
+ "info": "",
+ "type": "bool",
+ "list": false
+ },
+ "_type": "Tool"
+ },
+ "description": "Converts a chain, agent or function into a tool.",
+ "base_classes": ["Tool", "BaseTool"],
+ "display_name": "Tool",
+ "custom_fields": {},
+ "output_types": [],
+ "documentation": "",
+ "beta": false,
+ "error": null
+ },
+ "id": "Tool-jyI4N"
+ },
+ "selected": true,
+ "positionAbsolute": {
+ "x": 2044.485030617051,
+ "y": 1131.4250055845532
+ },
+ "dragging": false
+ }
+ ],
+ "edges": [
+ {
+ "source": "PromptTemplate-CweKz",
+ "target": "LLMChain-HUM6g",
+ "sourceHandle": "PromptTemplate|PromptTemplate-CweKz|BasePromptTemplate|StringPromptTemplate|PromptTemplate",
+ "targetHandle": "BasePromptTemplate|prompt|LLMChain-HUM6g",
+ "id": "reactflow__edge-PromptTemplate-CweKzPromptTemplate|PromptTemplate-CweKz|BasePromptTemplate|StringPromptTemplate|PromptTemplate-LLMChain-HUM6gBasePromptTemplate|prompt|LLMChain-HUM6g",
+ "style": {
+ "stroke": "#555"
+ },
+ "className": "stroke-gray-900 ",
+ "animated": false,
+ "selected": false
+ },
+ {
+ "source": "ChatOpenAI-02kOF",
+ "target": "LLMChain-HUM6g",
+ "sourceHandle": "ChatOpenAI|ChatOpenAI-02kOF|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM",
+ "targetHandle": "BaseLanguageModel|llm|LLMChain-HUM6g",
+ "id": "reactflow__edge-ChatOpenAI-02kOFChatOpenAI|ChatOpenAI-02kOF|ChatOpenAI|BaseLanguageModel|BaseChatModel|BaseLLM-LLMChain-HUM6gBaseLanguageModel|llm|LLMChain-HUM6g",
+ "style": {
+ "stroke": "#555"
+ },
+ "className": "stroke-gray-900 ",
+ "animated": false,
+ "selected": false
+ },
+ {
+ "source": "ChatInput-PqtHe",
+ "target": "PromptTemplate-CweKz",
+ "sourceHandle": "ChatInput|ChatInput-PqtHe|str",
+ "targetHandle": "Document;BaseOutputParser;str|input|PromptTemplate-CweKz",
+ "id": "reactflow__edge-ChatInput-PqtHeChatInput|ChatInput-PqtHe|str-PromptTemplate-CweKzDocument;BaseOutputParser;str|input|PromptTemplate-CweKz",
+ "style": {
+ "stroke": "#555"
+ },
+ "className": "stroke-gray-900 ",
+ "animated": false,
+ "selected": false
+ },
+ {
+ "source": "LLMChain-HUM6g",
+ "sourceHandle": "LLMChain|LLMChain-HUM6g|LLMChain|Chain|function|Text",
+ "target": "ChatOutput-8SWFf",
+ "targetHandle": "Text|message|ChatOutput-8SWFf",
+ "style": {
+ "stroke": "#555"
+ },
+ "className": "stroke-foreground stroke-connection",
+ "animated": false,
+ "id": "reactflow__edge-LLMChain-HUM6gLLMChain|LLMChain-HUM6g|LLMChain|Chain|function|Text-ChatOutput-8SWFfText|message|ChatOutput-8SWFf"
+ },
+ {
+ "source": "LLMChain-HUM6g",
+ "sourceHandle": "LLMChain|LLMChain-HUM6g|LLMChain|Chain|function|Text",
+ "target": "Tool-jyI4N",
+ "targetHandle": "function|func|Tool-jyI4N",
+ "style": {
+ "stroke": "#555"
+ },
+ "className": "stroke-foreground stroke-connection",
+ "animated": false,
+ "id": "reactflow__edge-LLMChain-HUM6gLLMChain|LLMChain-HUM6g|LLMChain|Chain|function|Text-Tool-jyI4Nfunction|func|Tool-jyI4N"
+ }
+ ],
+ "viewport": {
+ "x": -401.32668426335044,
+ "y": -129.59138346130635,
+ "zoom": 0.5073779796520557
+ }
+ },
+ "id": "cf923ccb-e14c-4754-96eb-a8a3b5bbe082",
+ "user_id": "c65bfea3-3eea-4e71-8fc4-106238eb0583"
+}
diff --git a/src/frontend/src/modals/exportModal/index.tsx b/src/frontend/src/modals/exportModal/index.tsx
index 8235fc8a3..fda72a402 100644
--- a/src/frontend/src/modals/exportModal/index.tsx
+++ b/src/frontend/src/modals/exportModal/index.tsx
@@ -21,6 +21,7 @@ const ExportModal = forwardRef(
const setNoticeData = useAlertStore((state) => state.setNoticeData);
const [checked, setChecked] = useState(false);
const currentFlow = useFlowStore((state) => state.currentFlow);
+ const isBuilding = useFlowStore((state) => state.isBuilding);
useEffect(() => {
setName(currentFlow?.name ?? "");
setDescription(currentFlow?.description ?? "");
@@ -105,7 +106,7 @@ const ExportModal = forwardRef(
-
+
);
},
diff --git a/src/frontend/src/utils/reactflowUtils.ts b/src/frontend/src/utils/reactflowUtils.ts
index ee779e8dc..cf045e1f5 100644
--- a/src/frontend/src/utils/reactflowUtils.ts
+++ b/src/frontend/src/utils/reactflowUtils.ts
@@ -55,7 +55,9 @@ export function checkChatInput(nodes: Node[]) {
}
export function cleanEdges(nodes: AllNodeType[], edges: EdgeType[]) {
- let newEdges = cloneDeep(edges);
+ let newEdges: EdgeType[] = cloneDeep(
+ edges.map((edge) => ({ ...edge, selected: false, animated: false })),
+ );
edges.forEach((edge) => {
// check if the source and target node still exists
const sourceNode = nodes.find((node) => node.id === edge.source);