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);