Spaces:
Sleeping
Sleeping
Commit ·
9462c3e
1
Parent(s): 9637aae
Flows e Componentes adicionados
Browse files- Flows e Componentes/Bloxplot_Route.json +1 -1
- Flows e Componentes/Bloxplot_Router.json +1 -1
- Flows e Componentes/Consulta cpf_api.json +1 -0
- Flows e Componentes/Financeiro.json +1 -0
- Flows e Componentes/Json to Data.json +1 -0
- Flows e Componentes/Roteador (com agente).json +0 -0
- Flows e Componentes/Roteador (flow as a tool).json +0 -0
- Flows e Componentes/Roteador (run flow).json +0 -0
- Flows e Componentes/Roteador (sem agente).json +1 -1
- Flows e Componentes/Router.json +1 -1
Flows e Componentes/Bloxplot_Route.json
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"data":{"edges":[],"nodes":[{"data":{"type":"RouteComponent","node":{"template":{"_type":"Component","code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"from langflow.custom import Component\r\nfrom langflow.inputs import MessageTextInput\r\nfrom langflow.template import Output\r\nfrom langflow.schema import Data\r\n\r\nclass RouteComponent(Component):\r\n display_name = \"Route\"\r\n description = \"Defines a route with a name and example phrases.\"\r\n icon = \"
|
|
|
|
| 1 |
+
{"description": "Defines a route with a name and example phrases.", "icon": null, "icon_bg_color": null, "updated_at": "2024-08-28T23:08:08+00:00", "webhook": false, "id": "2b502680-7ea4-45ad-b472-fefb232537fb", "name": "Bloxplot_Route", "is_component": true, "endpoint_name": null, "data": {"edges": [], "nodes": [{"data": {"type": "RouteComponent", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.custom import Component\r\nfrom langflow.inputs import MessageTextInput\r\nfrom langflow.template import Output\r\nfrom langflow.schema import Data\r\n\r\nclass RouteComponent(Component):\r\n display_name = \"Route\"\r\n description = \"Defines a route with a name and example phrases.\"\r\n icon = \"\u2b06\ufe0f\"\r\n\r\n inputs = [\r\n MessageTextInput(\r\n name=\"route_name\", \r\n display_name=\"Route Name\", \r\n info=\"Name of the route.\"\r\n ),\r\n MessageTextInput(\r\n name=\"example_phrases\", \r\n display_name=\"Example Phrases\", \r\n info=\"Example phrases for the route.\", \r\n is_list=True\r\n ),\r\n ]\r\n\r\n outputs = [\r\n Output(display_name=\"Route Data\", name=\"route_data\", method=\"get_route_data\"),\r\n ]\r\n\r\n def get_route_data(self) -> Data:\r\n # Acessa os inputs\r\n route_name = self.route_name\r\n example_phrases = self.example_phrases\r\n\r\n # Retorna os dados como Data\r\n return Data(data={\r\n \"route_name\": route_name,\r\n \"example_phrases\": example_phrases\r\n })\r\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "example_phrases": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": true, "required": false, "placeholder": "", "show": true, "name": "example_phrases", "value": ["acesso a pasta", "Pasta p\u00fablico"], "display_name": "Example Phrases", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "Example phrases for the route.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "route_name": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "route_name", "value": "Oi", "display_name": "Route Name", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "Name of the route.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}}, "description": "Defines a route with a name and example phrases.", "icon": "\u2b06\ufe0f", "base_classes": ["Data"], "display_name": "Route", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Data"], "selected": "Data", "name": "route_data", "display_name": "Route Data", "method": "get_route_data", "value": "__UNDEFINED__", "cache": true}], "field_order": ["route_name", "example_phrases"], "beta": false, "edited": true, "official": false}, "id": "RouteComponent-WnLDZ", "description": "Defines a concept with a name and example phrases.", "display_name": "Custom Component"}, "id": "RouteComponent-WnLDZ", "position": {"x": 0, "y": 0}, "type": "genericNode"}], "viewport": {"x": 1, "y": 1, "zoom": 1}}, "user_id": "5d4de74a-c7c6-45e3-a567-78ef1c3df3f3", "folder_id": "8facaf57-d395-4405-9e8a-5aa0778e5d0b"}
|
Flows e Componentes/Bloxplot_Router.json
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"data":{"edges":[],"nodes":[{"data":{"type":"RouterComponent","node":{"template":{"_type":"Component","routes_data":{"trace_as_metadata":true,"list":true,"trace_as_input":true,"required":false,"placeholder":"","show":true,"name":"routes_data","value":"","display_name":"Routes Data","advanced":false,"input_types":["Data"],"dynamic":false,"info":"Data from Route components.","title_case":false,"type":"other","_input_type":"DataInput"},"aggregation_method":{"trace_as_metadata":true,"options":["mean","max","min"],"combobox":false,"required":false,"placeholder":"","show":true,"name":"aggregation_method","value":"max","display_name":"Aggregation Method","advanced":false,"dynamic":false,"info":"Method to aggregate similarity scores.","title_case":false,"type":"str","_input_type":"DropdownInput","load_from_db":false},"api_key":{"load_from_db":
|
|
|
|
| 1 |
+
{"description": "Classifies an input phrase based on similarity to defined routes.", "icon": null, "icon_bg_color": null, "updated_at": "2024-08-28T23:08:09+00:00", "webhook": false, "id": "30c8825b-6a70-445c-a93f-19e3b521e9c7", "name": "Bloxplot_Router", "is_component": true, "endpoint_name": null, "data": {"edges": [], "nodes": [{"data": {"type": "RouterComponent", "node": {"template": {"_type": "Component", "routes_data": {"trace_as_metadata": true, "list": true, "trace_as_input": true, "required": false, "placeholder": "", "show": true, "name": "routes_data", "value": "", "display_name": "Routes Data", "advanced": false, "input_types": ["Data"], "dynamic": false, "info": "Data from Route components.", "title_case": false, "type": "other", "_input_type": "DataInput"}, "aggregation_method": {"trace_as_metadata": true, "options": ["mean", "max", "min"], "combobox": false, "required": false, "placeholder": "", "show": true, "name": "aggregation_method", "value": "max", "display_name": "Aggregation Method", "advanced": false, "dynamic": false, "info": "Method to aggregate similarity scores.", "title_case": false, "type": "str", "_input_type": "DropdownInput", "load_from_db": false}, "api_key": {"load_from_db": false, "required": false, "placeholder": "", "show": true, "name": "api_key", "value": null, "display_name": "API Key", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "", "title_case": false, "password": true, "type": "str", "_input_type": "SecretStrInput"}, "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.custom import Component\r\nfrom langflow.io import DataInput, MessageTextInput, SecretStrInput, DropdownInput\r\nfrom langflow.template import Output\r\nfrom langflow.schema.message import Message\r\nfrom langflow.schema import Data\r\nfrom semantic_router import Route\r\nfrom semantic_router.encoders import OpenAIEncoder\r\nfrom semantic_router.layer import RouteLayer\r\n\r\nclass RouterComponent(Component):\r\n display_name = \"Router Component\"\r\n description = \"Classifies an input phrase based on similarity to defined concepts.\"\r\n icon = \"\ud83d\udd00\"\r\n\r\n inputs = [\r\n DataInput(\r\n name=\"routes_data\", \r\n display_name=\"Routes Data\", \r\n info=\"Data from Route components.\", \r\n is_list=True\r\n ),\r\n MessageTextInput(\r\n name=\"input_text\",\r\n display_name=\"Input Text\",\r\n info=\"The primary text input for the operation.\",\r\n ),\r\n SecretStrInput(\r\n name=\"api_key\",\r\n display_name=\"API Key\"\r\n ),\r\n DropdownInput(\r\n name=\"aggregation_method\", \r\n display_name=\"Aggregation Method\", \r\n options=[\"mean\", \"max\", \"min\"], \r\n info=\"Method to aggregate similarity scores.\"\r\n ),\r\n ]\r\n\r\n outputs = [\r\n Output(\r\n display_name=\"Route\", \r\n name=\"route_output\", \r\n method=\"build_route\"\r\n ),\r\n ]\r\n\r\n def build_route(self) -> Message:\r\n # Construa os objetos Route usando os dados de entrada\r\n routes = [\r\n Route(name=route_data.data['route_name'], utterances=route_data.data['example_phrases'])\r\n for route_data in self.routes_data\r\n ]\r\n \r\n encoder = OpenAIEncoder(\r\n openai_api_key=self.api_key\r\n )\r\n \r\n route_layer = RouteLayer(\r\n encoder=encoder, \r\n routes=routes, \r\n aggregation=self.aggregation_method\r\n )\r\n \r\n message = Message(text=route_layer(self.input_text).name)\r\n self.status = message\r\n return message\r\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_text": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_text", "value": "Pessoal. Estamos precisando de duas m\u00e1quinas adicionais na reda\u00e7\u00e3o do Esporte. Uma designada para Sergio Pinheiro, m\u00e1quina de uso padr\u00e3o, com instala\u00e7\u00e3o de iNews, Teams, leitor de PDF, player de v\u00eddeo, acesso ao p\u00fablico (pasta WhatsApp). Outra para Tiago Lemos, ge.globo, com os programas: - Premiere - ANews - Chrome - Acesso \u00e0 pasta p\u00fablico/WhatsApp - Acessos ao Aspera e Backstage (publica\u00e7\u00f5es da globo) Abs", "display_name": "Input Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "The primary text input for the operation.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}}, "description": "Classifies an input phrase based on similarity to defined concepts.", "icon": "\ud83d\udd00", "base_classes": ["Message"], "display_name": "Router", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "route_output", "display_name": "Route", "method": "build_route", "value": "__UNDEFINED__", "cache": true}], "field_order": ["routes_data", "input_text", "api_key", "aggregation_method"], "beta": false, "edited": true, "lf_version": "1.0.17", "official": false}, "id": "RouterComponent-YdGzw"}, "id": "RouterComponent-YdGzw", "position": {"x": 0, "y": 0}, "type": "genericNode"}], "viewport": {"x": 1, "y": 1, "zoom": 1}}, "user_id": "5d4de74a-c7c6-45e3-a567-78ef1c3df3f3", "folder_id": "8facaf57-d395-4405-9e8a-5aa0778e5d0b"}
|
Flows e Componentes/Consulta cpf_api.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"description": "Consulta dados de um cliente atrav\u00e9s do CPF utilizando uma API.", "icon": null, "icon_bg_color": null, "updated_at": "2024-08-29T00:05:15+00:00", "webhook": false, "id": "49e227af-b5a2-4215-b11b-65ca90ea5ba1", "name": "Consulta cpf_api", "is_component": true, "endpoint_name": null, "data": {"edges": [], "nodes": [{"data": {"type": "CPFConsultaComponent", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "import requests\r\nfrom langflow.custom import Component\r\nfrom langflow.inputs import MessageTextInput\r\nfrom langflow.template import Output\r\nfrom langflow.schema import Data\r\n\r\nclass CPFConsultaComponent(Component):\r\n display_name = \"Consulta CPF\"\r\n description = \"Consulta dados de um cliente atrav\u00e9s do CPF utilizando uma API.\"\r\n icon = \"search\"\r\n\r\n inputs = [\r\n MessageTextInput(\r\n name=\"cpf_input\",\r\n display_name=\"CPF\",\r\n info=\"CPF do cliente para consulta.\",\r\n ),\r\n ]\r\n\r\n outputs = [\r\n Output(display_name=\"Dados do Cliente\", name=\"client_data\", method=\"get_client_data\"),\r\n ]\r\n\r\n def get_client_data(self) -> Data:\r\n cpf = self.cpf_input\r\n url = f\"https://jcnok-test1.hf.space/verificar-cliente/{cpf}\"\r\n \r\n try:\r\n response = requests.get(url)\r\n response.raise_for_status()\r\n data = response.json()\r\n # Atualiza a sa\u00edda do componente com os dados obtidos da API\r\n return Data(data={\"result\": data})\r\n except requests.exceptions.HTTPError as http_err:\r\n return Data(data={\"error\": f\"Erro HTTP: {http_err}\"})\r\n except Exception as err:\r\n return Data(data={\"error\": f\"Erro na consulta: {err}\"})\r\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "cpf_input": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "cpf_input", "value": "123.456.789-00", "display_name": "CPF", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "CPF do cliente para consulta.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}}, "description": "Consulta dados de um cliente atrav\u00e9s do CPF utilizando uma API.", "icon": "search", "base_classes": ["Data"], "display_name": "Consulta cpf_api", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Data"], "selected": "Data", "name": "client_data", "display_name": "Dados do Cliente", "method": "get_client_data", "value": "__UNDEFINED__", "cache": true}], "field_order": ["cpf_input"], "beta": false, "edited": true, "lf_version": "1.0.17", "official": false}, "id": "CPFConsultaComponent-QqaaH"}, "id": "CPFConsultaComponent-QqaaH", "position": {"x": 0, "y": 0}, "type": "genericNode"}], "viewport": {"x": 1, "y": 1, "zoom": 1}}, "user_id": "5d4de74a-c7c6-45e3-a567-78ef1c3df3f3", "folder_id": "8facaf57-d395-4405-9e8a-5aa0778e5d0b"}
|
Flows e Componentes/Financeiro.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"description": "Language Models, Unleashed.", "icon": null, "icon_bg_color": null, "updated_at": "2024-08-28T23:13:46+00:00", "webhook": false, "id": "84c1c622-fbc9-4f75-ac78-6fbef7eac669", "name": "Financeiro", "is_component": false, "endpoint_name": null, "data": {"nodes": [{"id": "ChatInput-qmi3A", "type": "genericNode", "position": {"x": -105.8669588840296, "y": 788.8332269805171}, "data": {"type": "ChatInput", "node": {"template": {"_type": "Component", "files": {"trace_as_metadata": true, "file_path": "", "fileTypes": ["txt", "md", "mdx", "csv", "json", "yaml", "yml", "xml", "html", "htm", "pdf", "docx", "py", "sh", "sql", "js", "ts", "tsx", "jpg", "jpeg", "png", "bmp", "image"], "list": true, "required": false, "placeholder": "", "show": true, "name": "files", "value": "", "display_name": "Files", "advanced": true, "dynamic": false, "info": "Files to be sent with the message.", "title_case": false, "type": "file", "_input_type": "FileInput"}, "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.base.data.utils import IMG_FILE_TYPES, TEXT_FILE_TYPES\nfrom langflow.base.io.chat import ChatComponent\nfrom langflow.inputs import BoolInput\nfrom langflow.io import DropdownInput, FileInput, MessageTextInput, MultilineInput, Output\nfrom langflow.memory import store_message\nfrom langflow.schema.message import Message\nfrom langflow.utils.constants import MESSAGE_SENDER_AI, MESSAGE_SENDER_USER, MESSAGE_SENDER_NAME_USER\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n name = \"ChatInput\"\n\n inputs = [\n MultilineInput(\n name=\"input_value\",\n display_name=\"Text\",\n value=\"\",\n info=\"Message to be passed as input.\",\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_USER,\n info=\"Type of sender.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_USER,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n FileInput(\n name=\"files\",\n display_name=\"Files\",\n file_types=TEXT_FILE_TYPES + IMG_FILE_TYPES,\n info=\"Files to be sent with the message.\",\n advanced=True,\n is_list=True,\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def message_response(self) -> Message:\n message = Message(\n text=self.input_value,\n sender=self.sender,\n sender_name=self.sender_name,\n session_id=self.session_id,\n files=self.files,\n )\n\n if (\n self.session_id\n and isinstance(message, Message)\n and isinstance(message.text, str)\n and self.should_store_message\n ):\n store_message(\n message,\n flow_id=self.graph.flow_id,\n )\n self.message.value = message\n\n self.status = message\n return message\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_value": {"trace_as_input": true, "multiline": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "", "display_name": "Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "Message to be passed as input.", "title_case": false, "type": "str", "_input_type": "MultilineInput"}, "sender": {"trace_as_metadata": true, "options": ["Machine", "User"], "combobox": false, "required": false, "placeholder": "", "show": true, "name": "sender", "value": "User", "display_name": "Sender Type", "advanced": true, "dynamic": false, "info": "Type of sender.", "title_case": false, "type": "str", "_input_type": "DropdownInput"}, "sender_name": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "sender_name", "value": "User", "display_name": "Sender Name", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "Name of the sender.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "session_id": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "session_id", "value": "", "display_name": "Session ID", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "The session ID of the chat. If empty, the current session ID parameter will be used.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "should_store_message": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "should_store_message", "value": true, "display_name": "Store Messages", "advanced": true, "dynamic": false, "info": "Store the message in the history.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}}, "description": "Get chat inputs from the Playground.", "icon": "ChatInput", "base_classes": ["Message"], "display_name": "Chat Input", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "message", "display_name": "Message", "method": "message_response", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value", "should_store_message", "sender", "sender_name", "session_id", "files"], "beta": false, "edited": false, "lf_version": "1.0.16"}, "id": "ChatInput-qmi3A"}, "selected": false, "width": 384, "height": 297, "positionAbsolute": {"x": -105.8669588840296, "y": 788.8332269805171}, "dragging": false}, {"id": "ChatOutput-cRTNk", "type": "genericNode", "position": {"x": 2994.463438276988, "y": 747.5585436304123}, "data": {"type": "ChatOutput", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.inputs import BoolInput\nfrom langflow.io import DropdownInput, MessageTextInput, Output\nfrom langflow.memory import store_message\nfrom langflow.schema.message import Message\nfrom langflow.utils.constants import MESSAGE_SENDER_NAME_AI, MESSAGE_SENDER_USER, MESSAGE_SENDER_AI\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n name = \"ChatOutput\"\n\n inputs = [\n MessageTextInput(\n name=\"input_value\",\n display_name=\"Text\",\n info=\"Message to be passed as output.\",\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_AI,\n advanced=True,\n info=\"Type of sender.\",\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_AI,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"data_template\",\n display_name=\"Data Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def message_response(self) -> Message:\n message = Message(\n text=self.input_value,\n sender=self.sender,\n sender_name=self.sender_name,\n session_id=self.session_id,\n )\n if (\n self.session_id\n and isinstance(message, Message)\n and isinstance(message.text, str)\n and self.should_store_message\n ):\n store_message(\n message,\n flow_id=self.graph.flow_id,\n )\n self.message.value = message\n\n self.status = message\n return message\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "data_template": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "data_template", "value": "{text}", "display_name": "Data Template", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "input_value": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "", "display_name": "Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "Message to be passed as output.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "sender": {"trace_as_metadata": true, "options": ["Machine", "User"], "combobox": false, "required": false, "placeholder": "", "show": true, "name": "sender", "value": "Machine", "display_name": "Sender Type", "advanced": true, "dynamic": false, "info": "Type of sender.", "title_case": false, "type": "str", "_input_type": "DropdownInput"}, "sender_name": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "sender_name", "value": "AI", "display_name": "Sender Name", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "Name of the sender.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "session_id": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "session_id", "value": "", "display_name": "Session ID", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "The session ID of the chat. If empty, the current session ID parameter will be used.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "should_store_message": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "should_store_message", "value": true, "display_name": "Store Messages", "advanced": true, "dynamic": false, "info": "Store the message in the history.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}}, "description": "Display a chat message in the Playground.", "icon": "ChatOutput", "base_classes": ["Message"], "display_name": "Chat Output", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "message", "display_name": "Message", "method": "message_response", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value", "should_store_message", "sender", "sender_name", "session_id", "data_template"], "beta": false, "edited": false, "lf_version": "1.0.16"}, "id": "ChatOutput-cRTNk"}, "selected": false, "width": 384, "height": 297, "positionAbsolute": {"x": 2994.463438276988, "y": 747.5585436304123}, "dragging": false}, {"id": "RouterComponent-r0zF9", "type": "genericNode", "position": {"x": 614.5754277315505, "y": 732.9172001763126}, "data": {"type": "RouterComponent", "node": {"template": {"_type": "Component", "api_key": {"load_from_db": false, "required": false, "placeholder": "", "show": true, "name": "api_key", "value": null, "display_name": "API Key", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "", "title_case": false, "password": true, "type": "str", "_input_type": "SecretStrInput"}, "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.custom import Component\r\nfrom langflow.io import SecretStrInput, Output, MessageTextInput\r\nfrom langflow.schema import Data\r\nfrom langflow.schema.message import Message\r\nfrom semantic_router import Route\r\nfrom semantic_router.encoders import OpenAIEncoder\r\nfrom semantic_router.layer import RouteLayer\r\n\r\nclass RouterComponent(Component):\r\n display_name = \"Router Component\"\r\n description = \"\"\r\n documentation: str = \"\"\r\n icon = \"router_component\"\r\n name = \"RouterComponent\"\r\n\r\n inputs = [\r\n SecretStrInput(name=\"api_key\", display_name=\"API Key\"),\r\n MessageTextInput(\r\n name=\"input_text\",\r\n display_name=\"Input Text\",\r\n info=\"The primary text input for the operation.\",\r\n )\r\n \r\n ]\r\n\r\n outputs = [\r\n Output(display_name=\"Route\", name=\"route_output\", method=\"build_route\"),\r\n ]\r\n \r\n # Definindo as rotas\r\n suporte_tecnico = Route(\r\n name=\"Suporte T\u00e9cnico\",\r\n utterances=[\r\n \"problemas com internet\",\r\n \"reiniciar roteador\",\r\n \"problemas com Wi-Fi\",\r\n \"conex\u00e3o lenta\",\r\n \"sem conex\u00e3o\",\r\n \"roteador piscando\",\r\n \"cabo desconectado\",\r\n \"internet cai\",\r\n \"n\u00e3o consegue conectar\",\r\n \"senha do Wi-Fi\",\r\n \"rede n\u00e3o aparece\",\r\n \"sinal fraco\",\r\n \"problemas com IPv6\",\r\n \"problemas com VPN\",\r\n \"DNS n\u00e3o responde\"\r\n ]\r\n )\r\n \r\n financeiro = Route(\r\n name=\"Financeiro\",\r\n utterances=[\r\n \"consultar fatura\",\r\n \"segunda via\",\r\n \"verificar pagamento\",\r\n \"fatura atrasada\",\r\n \"negociar d\u00edvida\",\r\n \"parcelamento\",\r\n \"data de vencimento\",\r\n \"n\u00e3o recebi a fatura\",\r\n \"valor da fatura\",\r\n \"pagamento duplicado\",\r\n \"extrato detalhado\",\r\n \"fatura digital\",\r\n \"alterar forma de pagamento\",\r\n \"cancelar d\u00e9bito autom\u00e1tico\",\r\n \"mudar dia de vencimento\"\r\n ]\r\n )\r\n \r\n planos_servicos = Route(\r\n name=\"Planos e Servi\u00e7os\",\r\n utterances=[\r\n \"informa\u00e7\u00f5es sobre planos\",\r\n \"mudan\u00e7a de plano\",\r\n \"novos servi\u00e7os\",\r\n \"upgrade de plano\",\r\n \"downgrade de plano\",\r\n \"comparar planos\",\r\n \"inclus\u00e3o de servi\u00e7o\",\r\n \"exclus\u00e3o de servi\u00e7o\",\r\n \"promo\u00e7\u00f5es\",\r\n \"alterar velocidade\",\r\n \"detalhes do plano\",\r\n \"validade da promo\u00e7\u00e3o\",\r\n \"alterar franquia de dados\",\r\n \"adicionar canais\",\r\n \"cancelar plano\"\r\n ]\r\n )\r\n\r\n cadastro = Route(\r\n name=\"Cadastro\",\r\n utterances=[\r\n \"atualiza\u00e7\u00e3o de dados cadastrais\",\r\n \"verifica\u00e7\u00e3o de informa\u00e7\u00f5es\",\r\n \"alterar endere\u00e7o\",\r\n \"alterar telefone\",\r\n \"alterar email\",\r\n \"incluir dependente\",\r\n \"excluir dependente\",\r\n \"atualizar documento\",\r\n \"cadastrar biometria\",\r\n \"ativar reconhecimento facial\",\r\n \"alterar senha\",\r\n \"recuperar senha\",\r\n \"desbloquear conta\",\r\n \"ativar conta\",\r\n \"excluir conta\"\r\n ]\r\n )\r\n \r\n atendimento_geral = Route(\r\n name=\"Atendimento Geral\",\r\n utterances=[\r\n \"outras solicita\u00e7\u00f5es\",\r\n \"atendimento presencial\",\r\n \"agendar visita t\u00e9cnica\",\r\n \"reclama\u00e7\u00f5es\",\r\n \"elogios\",\r\n \"sugest\u00f5es\",\r\n \"falar com atendente\",\r\n \"hor\u00e1rio de atendimento\",\r\n \"endere\u00e7o da loja\",\r\n \"perguntas frequentes\",\r\n \"suporte em redes sociais\",\r\n \"solicitar contato\",\r\n \"enviar email\",\r\n \"chat online\",\r\n \"acessar \u00e1rea do cliente\"\r\n ]\r\n )\r\n \r\n routes = [suporte_tecnico, financeiro, planos_servicos, cadastro, atendimento_geral]\r\n encoder = OpenAIEncoder(\r\n openai_api_key=\"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\"\r\n )\r\n \r\n def build_route(self) -> Message:\r\n route_layer = RouteLayer(encoder=self.encoder, routes=self.routes)\r\n message = Message(text=route_layer(self.input_text).name)\r\n self.status = message\r\n return message\r\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_text": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_text", "value": "", "display_name": "Input Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "The primary text input for the operation.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}}, "description": "", "icon": "router_component", "base_classes": ["Message"], "display_name": "Router", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "route_output", "display_name": "Route", "method": "build_route", "value": "__UNDEFINED__", "cache": true}], "field_order": ["api_key", "input_text"], "beta": false, "edited": true, "lf_version": "1.0.16"}, "id": "RouterComponent-r0zF9"}, "selected": false, "width": 384, "height": 375}, {"id": "TextOutput-vB5o2", "type": "genericNode", "position": {"x": 1109.7181562415515, "y": 803.0856044745171}, "data": {"type": "TextOutput", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.base.io.text import TextComponent\nfrom langflow.io import MessageTextInput, Output\nfrom langflow.schema.message import Message\n\n\nclass TextOutputComponent(TextComponent):\n display_name = \"Text Output\"\n description = \"Display a text output in the Playground.\"\n icon = \"type\"\n name = \"TextOutput\"\n\n inputs = [\n MessageTextInput(\n name=\"input_value\",\n display_name=\"Text\",\n info=\"Text to be passed as output.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Text\", name=\"text\", method=\"text_response\"),\n ]\n\n def text_response(self) -> Message:\n message = Message(\n text=self.input_value,\n )\n self.status = self.input_value\n return message\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_value": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "", "display_name": "Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "Text to be passed as output.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}}, "description": "Display a text output in the Playground.", "icon": "type", "base_classes": ["Message"], "display_name": "Text Output", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "text", "display_name": "Text", "method": "text_response", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value"], "beta": false, "edited": false, "lf_version": "1.0.16"}, "id": "TextOutput-vB5o2"}, "selected": false, "width": 384, "height": 297}, {"id": "Prompt-j8mtW", "type": "genericNode", "position": {"x": 1592.2041705290271, "y": 790.0553384285408}, "data": {"type": "Prompt", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.base.prompts.api_utils import process_prompt_template\nfrom langflow.custom import Component\nfrom langflow.inputs.inputs import DefaultPromptField\nfrom langflow.io import Output, PromptInput\nfrom langflow.schema.message import Message\nfrom langflow.template.utils import update_template_values\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n trace_type = \"prompt\"\n name = \"Prompt\"\n\n inputs = [\n PromptInput(name=\"template\", display_name=\"Template\"),\n ]\n\n outputs = [\n Output(display_name=\"Prompt Message\", name=\"prompt\", method=\"build_prompt\"),\n ]\n\n async def build_prompt(\n self,\n ) -> Message:\n prompt = await Message.from_template_and_variables(**self._attributes)\n self.status = prompt.text\n return prompt\n\n def _update_template(self, frontend_node: dict):\n prompt_template = frontend_node[\"template\"][\"template\"][\"value\"]\n custom_fields = frontend_node[\"custom_fields\"]\n frontend_node_template = frontend_node[\"template\"]\n _ = process_prompt_template(\n template=prompt_template,\n name=\"template\",\n custom_fields=custom_fields,\n frontend_node_template=frontend_node_template,\n )\n return frontend_node\n\n def post_code_processing(self, new_frontend_node: dict, current_frontend_node: dict):\n \"\"\"\n This function is called after the code validation is done.\n \"\"\"\n frontend_node = super().post_code_processing(new_frontend_node, current_frontend_node)\n template = frontend_node[\"template\"][\"template\"][\"value\"]\n # Kept it duplicated for backwards compatibility\n _ = process_prompt_template(\n template=template,\n name=\"template\",\n custom_fields=frontend_node[\"custom_fields\"],\n frontend_node_template=frontend_node[\"template\"],\n )\n # Now that template is updated, we need to grab any values that were set in the current_frontend_node\n # and update the frontend_node with those values\n update_template_values(new_template=frontend_node, previous_template=current_frontend_node[\"template\"])\n return frontend_node\n\n def _get_fallback_input(self, **kwargs):\n return DefaultPromptField(**kwargs)\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "template": {"trace_as_input": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "template", "value": "Voc\u00ea \u00e9 um especialista em {menu} e precisa ajudar o usu\u00e1rio:\n\nusu\u00e1rio: {input}", "display_name": "Template", "advanced": false, "dynamic": false, "info": "", "title_case": false, "type": "prompt", "_input_type": "PromptInput"}, "menu": {"field_type": "str", "required": false, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "", "fileTypes": [], "file_path": "", "password": false, "name": "menu", "display_name": "menu", "advanced": false, "input_types": ["Message", "Text"], "dynamic": false, "info": "", "load_from_db": false, "title_case": false, "type": "str"}, "input": {"field_type": "str", "required": false, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "", "fileTypes": [], "file_path": "", "password": false, "name": "input", "display_name": "input", "advanced": false, "input_types": ["Message", "Text"], "dynamic": false, "info": "", "load_from_db": false, "title_case": false, "type": "str"}}, "description": "Create a prompt template with dynamic variables.", "icon": "prompts", "is_input": null, "is_output": null, "is_composition": null, "base_classes": ["Message"], "name": "", "display_name": "Prompt", "documentation": "", "custom_fields": {"template": ["menu", "input"]}, "output_types": [], "full_path": null, "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "prompt", "hidden": null, "display_name": "Prompt Message", "method": "build_prompt", "value": "__UNDEFINED__", "cache": true}], "field_order": ["template"], "beta": false, "error": null, "edited": false, "lf_version": "1.0.16"}, "id": "Prompt-j8mtW"}, "selected": false, "width": 384, "height": 497}, {"id": "ToolCallingAgent-tIQgU", "type": "genericNode", "position": {"x": 2203.5849625323017, "y": 488.69506256172326}, "data": {"type": "ToolCallingAgent", "node": {"template": {"_type": "Component", "chat_history": {"trace_as_metadata": true, "list": true, "trace_as_input": true, "required": false, "placeholder": "", "show": true, "name": "chat_history", "value": "", "display_name": "Chat History", "advanced": true, "input_types": ["Data"], "dynamic": false, "info": "", "title_case": false, "type": "other", "_input_type": "DataInput"}, "llm": {"trace_as_metadata": true, "list": false, "required": true, "placeholder": "", "show": true, "name": "llm", "value": "", "display_name": "Language Model", "advanced": false, "input_types": ["LanguageModel"], "dynamic": false, "info": "", "title_case": false, "type": "other", "_input_type": "HandleInput"}, "tools": {"trace_as_metadata": true, "list": true, "required": false, "placeholder": "", "show": true, "name": "tools", "value": "", "display_name": "Tools", "advanced": false, "input_types": ["Tool", "BaseTool"], "dynamic": false, "info": "", "title_case": false, "type": "other", "_input_type": "HandleInput"}, "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from typing import Optional, List\n\nfrom langchain.agents import create_tool_calling_agent\nfrom langchain_core.prompts import ChatPromptTemplate, PromptTemplate, HumanMessagePromptTemplate\nfrom langflow.base.agents.agent import LCToolsAgentComponent\nfrom langflow.inputs import MultilineInput\nfrom langflow.inputs.inputs import HandleInput, DataInput\nfrom langflow.schema import Data\n\n\nclass ToolCallingAgentComponent(LCToolsAgentComponent):\n display_name: str = \"Tool Calling Agent\"\n description: str = \"Agent that uses tools\"\n icon = \"LangChain\"\n beta = True\n name = \"ToolCallingAgent\"\n\n inputs = LCToolsAgentComponent._base_inputs + [\n HandleInput(name=\"llm\", display_name=\"Language Model\", input_types=[\"LanguageModel\"], required=True),\n MultilineInput(\n name=\"system_prompt\",\n display_name=\"System Prompt\",\n info=\"System prompt for the agent.\",\n value=\"You are a helpful assistant\",\n ),\n MultilineInput(\n name=\"user_prompt\", display_name=\"Prompt\", info=\"This prompt must contain 'input' key.\", value=\"{input}\"\n ),\n DataInput(name=\"chat_history\", display_name=\"Chat History\", is_list=True, advanced=True),\n ]\n\n def get_chat_history_data(self) -> Optional[List[Data]]:\n return self.chat_history\n\n def create_agent_runnable(self):\n if \"input\" not in self.user_prompt:\n raise ValueError(\"Prompt must contain 'input' key.\")\n messages = [\n (\"system\", self.system_prompt),\n (\"placeholder\", \"{chat_history}\"),\n HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=[\"input\"], template=self.user_prompt)),\n (\"placeholder\", \"{agent_scratchpad}\"),\n ]\n prompt = ChatPromptTemplate.from_messages(messages)\n return create_tool_calling_agent(self.llm, self.tools, prompt)\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "handle_parsing_errors": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "handle_parsing_errors", "value": true, "display_name": "Handle Parse Errors", "advanced": true, "dynamic": false, "info": "", "title_case": false, "type": "bool", "_input_type": "BoolInput"}, "input_value": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "", "display_name": "Input", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "max_iterations": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "max_iterations", "value": 15, "display_name": "Max Iterations", "advanced": true, "dynamic": false, "info": "", "title_case": false, "type": "int", "_input_type": "IntInput"}, "system_prompt": {"trace_as_input": true, "multiline": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "system_prompt", "value": "Que envia a entrada do usu\u00e1rio diretamente para a tool adequada", "display_name": "System Prompt", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "System prompt for the agent.", "title_case": false, "type": "str", "_input_type": "MultilineInput"}, "user_prompt": {"trace_as_input": true, "multiline": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "user_prompt", "value": "{input}", "display_name": "Prompt", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "This prompt must contain 'input' key.", "title_case": false, "type": "str", "_input_type": "MultilineInput"}, "verbose": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "verbose", "value": true, "display_name": "Verbose", "advanced": true, "dynamic": false, "info": "", "title_case": false, "type": "bool", "_input_type": "BoolInput"}}, "description": "Agent that uses tools", "icon": "LangChain", "base_classes": ["AgentExecutor", "Message"], "display_name": "Tool Calling Agent", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["AgentExecutor"], "selected": "AgentExecutor", "name": "agent", "display_name": "Agent", "method": "build_agent", "value": "__UNDEFINED__", "cache": true}, {"types": ["Message"], "selected": "Message", "name": "response", "display_name": "Response", "method": "message_response", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value", "handle_parsing_errors", "verbose", "max_iterations", "tools", "llm", "system_prompt", "user_prompt", "chat_history"], "beta": true, "edited": false, "lf_version": "1.0.16"}, "id": "ToolCallingAgent-tIQgU"}, "selected": false, "width": 384, "height": 610}, {"id": "FlowTool-jg17g", "type": "genericNode", "position": {"x": 1440.4695265303076, "y": 83.67513882729253}, "data": {"type": "FlowTool", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from typing import Any, List, Optional\n\nfrom langflow.base.langchain_utilities.model import LCToolComponent\nfrom langflow.base.tools.flow_tool import FlowTool\nfrom langflow.field_typing import Tool\nfrom langflow.graph.graph.base import Graph\nfrom langflow.helpers.flow import get_flow_inputs\nfrom langflow.io import BoolInput, DropdownInput, Output, StrInput\nfrom langflow.schema import Data\nfrom langflow.schema.dotdict import dotdict\n\n\nclass FlowToolComponent(LCToolComponent):\n display_name = \"Flow as Tool\"\n description = \"Construct a Tool from a function that runs the loaded Flow.\"\n field_order = [\"flow_name\", \"name\", \"description\", \"return_direct\"]\n trace_type = \"tool\"\n name = \"FlowTool\"\n beta = True\n\n def get_flow_names(self) -> List[str]:\n flow_datas = self.list_flows()\n return [flow_data.data[\"name\"] for flow_data in flow_datas]\n\n def get_flow(self, flow_name: str) -> Optional[Data]:\n \"\"\"\n Retrieves a flow by its name.\n\n Args:\n flow_name (str): The name of the flow to retrieve.\n\n Returns:\n Optional[Text]: The flow record if found, None otherwise.\n \"\"\"\n flow_datas = self.list_flows()\n for flow_data in flow_datas:\n if flow_data.data[\"name\"] == flow_name:\n return flow_data\n return None\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):\n if field_name == \"flow_name\":\n build_config[\"flow_name\"][\"options\"] = self.get_flow_names()\n\n return build_config\n\n inputs = [\n DropdownInput(\n name=\"flow_name\", display_name=\"Flow Name\", info=\"The name of the flow to run.\", refresh_button=True\n ),\n StrInput(\n name=\"name\",\n display_name=\"Name\",\n info=\"The name of the tool.\",\n ),\n StrInput(\n name=\"description\",\n display_name=\"Description\",\n info=\"The description of the tool.\",\n ),\n BoolInput(\n name=\"return_direct\",\n display_name=\"Return Direct\",\n info=\"Return the result directly from the Tool.\",\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(name=\"api_build_tool\", display_name=\"Tool\", method=\"build_tool\"),\n ]\n\n def build_tool(self) -> Tool:\n FlowTool.update_forward_refs()\n if \"flow_name\" not in self._attributes or not self._attributes[\"flow_name\"]:\n raise ValueError(\"Flow name is required\")\n flow_name = self._attributes[\"flow_name\"]\n flow_data = self.get_flow(flow_name)\n if not flow_data:\n raise ValueError(\"Flow not found.\")\n graph = Graph.from_payload(flow_data.data[\"data\"])\n inputs = get_flow_inputs(graph)\n tool = FlowTool(\n name=self.name,\n description=self.description,\n graph=graph,\n return_direct=self.return_direct,\n inputs=inputs,\n flow_id=str(flow_data.id),\n user_id=str(self.user_id),\n )\n description_repr = repr(tool.description).strip(\"'\")\n args_str = \"\\n\".join([f\"- {arg_name}: {arg_data['description']}\" for arg_name, arg_data in tool.args.items()])\n self.status = f\"{description_repr}\\nArguments:\\n{args_str}\"\n return tool # type: ignore\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "description": {"trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "description", "value": "Chefe do escrit\u00f3rio financeiro", "display_name": "Description", "advanced": false, "dynamic": false, "info": "The description of the tool.", "title_case": false, "type": "str", "_input_type": "StrInput"}, "flow_name": {"trace_as_metadata": true, "options": ["CFO", "Roteador (com agente)", "Roteador (sem agente)"], "combobox": false, "required": false, "placeholder": "", "show": true, "name": "flow_name", "value": "CFO", "display_name": "Flow Name", "advanced": false, "dynamic": false, "info": "The name of the flow to run.", "refresh_button": true, "title_case": false, "type": "str", "_input_type": "DropdownInput"}, "name": {"trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "name", "value": "CFO", "display_name": "Name", "advanced": false, "dynamic": false, "info": "The name of the tool.", "title_case": false, "type": "str", "_input_type": "StrInput"}, "return_direct": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "return_direct", "value": false, "display_name": "Return Direct", "advanced": true, "dynamic": false, "info": "Return the result directly from the Tool.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}}, "description": "Construct a Tool from a function that runs the loaded Flow.", "base_classes": ["Tool"], "display_name": "Flow as Tool", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Tool"], "selected": "Tool", "name": "api_build_tool", "display_name": "Tool", "method": "build_tool", "value": "__UNDEFINED__", "cache": true}], "field_order": ["flow_name", "name", "description", "return_direct"], "beta": true, "edited": false, "lf_version": "1.0.16"}, "id": "FlowTool-jg17g"}, "selected": false, "width": 384, "height": 497, "dragging": false}, {"id": "OpenAIModel-MyO0R", "type": "genericNode", "position": {"x": 1643.5049558650617, "y": 1320.1626360508194}, "data": {"type": "OpenAIModel", "node": {"template": {"_type": "Component", "api_key": {"load_from_db": false, "required": false, "placeholder": "", "show": true, "name": "api_key", "value": null, "display_name": "OpenAI API Key", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "The OpenAI API Key to use for the OpenAI model.", "title_case": false, "password": true, "type": "str", "_input_type": "SecretStrInput"}, "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "import operator\nfrom functools import reduce\n\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.inputs import (\n BoolInput,\n DictInput,\n DropdownInput,\n FloatInput,\n IntInput,\n SecretStrInput,\n StrInput,\n)\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = LCModelComponent._base_inputs + [\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(name=\"model_kwargs\", display_name=\"Model Kwargs\", advanced=True),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DictInput(\n name=\"output_schema\",\n is_list=True,\n display_name=\"Schema\",\n advanced=True,\n info=\"The schema for the Output of the model. You must pass the word JSON in the prompt. If left blank, JSON mode will be disabled.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n ),\n FloatInput(name=\"temperature\", display_name=\"Temperature\", value=0.1),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n # self.output_schema is a list of dictionaries\n # let's convert it to a dictionary\n output_schema_dict: dict[str, str] = reduce(operator.ior, self.output_schema or {}, {})\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = bool(output_schema_dict) or self.json_mode\n seed = self.seed\n\n if openai_api_key:\n api_key = SecretStr(openai_api_key)\n else:\n api_key = None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n )\n if json_mode:\n if output_schema_dict:\n output = output.with_structured_output(schema=output_schema_dict, method=\"json_mode\") # type: ignore\n else:\n output = output.bind(response_format={\"type\": \"json_object\"}) # type: ignore\n\n return output # type: ignore\n\n def _get_exception_message(self, e: Exception):\n \"\"\"\n Get a message from an OpenAI exception.\n\n Args:\n exception (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n\n try:\n from openai import BadRequestError\n except ImportError:\n return\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\") # type: ignore\n if message:\n return message\n return\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_value": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "", "display_name": "Input", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "", "title_case": false, "type": "str", "_input_type": "MessageInput"}, "json_mode": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "json_mode", "value": false, "display_name": "JSON Mode", "advanced": true, "dynamic": false, "info": "If True, it will output JSON regardless of passing a schema.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}, "max_tokens": {"trace_as_metadata": true, "range_spec": {"step_type": "float", "min": 0, "max": 128000, "step": 0.1}, "list": false, "required": false, "placeholder": "", "show": true, "name": "max_tokens", "value": "", "display_name": "Max Tokens", "advanced": true, "dynamic": false, "info": "The maximum number of tokens to generate. Set to 0 for unlimited tokens.", "title_case": false, "type": "int", "_input_type": "IntInput"}, "model_kwargs": {"trace_as_input": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "model_kwargs", "value": {}, "display_name": "Model Kwargs", "advanced": true, "dynamic": false, "info": "", "title_case": false, "type": "dict", "_input_type": "DictInput"}, "model_name": {"trace_as_metadata": true, "options": ["gpt-4o-mini", "gpt-4o", "gpt-4-turbo", "gpt-4-turbo-preview", "gpt-4", "gpt-3.5-turbo", "gpt-3.5-turbo-0125"], "combobox": false, "required": false, "placeholder": "", "show": true, "name": "model_name", "value": "gpt-4o-mini", "display_name": "Model Name", "advanced": false, "dynamic": false, "info": "", "title_case": false, "type": "str", "_input_type": "DropdownInput"}, "openai_api_base": {"trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "openai_api_base", "value": "", "display_name": "OpenAI API Base", "advanced": true, "dynamic": false, "info": "The base URL of the OpenAI API. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.", "title_case": false, "type": "str", "_input_type": "StrInput"}, "output_schema": {"trace_as_input": true, "list": true, "required": false, "placeholder": "", "show": true, "name": "output_schema", "value": {}, "display_name": "Schema", "advanced": true, "dynamic": false, "info": "The schema for the Output of the model. You must pass the word JSON in the prompt. If left blank, JSON mode will be disabled.", "title_case": false, "type": "dict", "_input_type": "DictInput"}, "seed": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "seed", "value": 1, "display_name": "Seed", "advanced": true, "dynamic": false, "info": "The seed controls the reproducibility of the job.", "title_case": false, "type": "int", "_input_type": "IntInput"}, "stream": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "stream", "value": false, "display_name": "Stream", "advanced": true, "dynamic": false, "info": "Stream the response from the model. Streaming works only in Chat.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}, "system_message": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "system_message", "value": "", "display_name": "System Message", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "System message to pass to the model.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "temperature": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "temperature", "value": 0.1, "display_name": "Temperature", "advanced": false, "dynamic": false, "info": "", "title_case": false, "type": "float", "_input_type": "FloatInput"}}, "description": "Generates text using OpenAI LLMs.", "icon": "OpenAI", "base_classes": ["LanguageModel", "Message"], "display_name": "OpenAI", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "text_output", "display_name": "Text", "method": "text_response", "value": "__UNDEFINED__", "cache": true}, {"types": ["LanguageModel"], "selected": "LanguageModel", "name": "model_output", "display_name": "Language Model", "method": "build_model", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value", "system_message", "stream", "max_tokens", "model_kwargs", "json_mode", "output_schema", "model_name", "openai_api_base", "api_key", "temperature", "seed"], "beta": false, "edited": false, "lf_version": "1.0.16"}, "id": "OpenAIModel-MyO0R"}, "selected": false, "width": 384, "height": 599}], "edges": [], "viewport": {"x": 2.365581540026483, "y": -140.77648411382603, "zoom": 0.4502420286420125}}, "user_id": "5d4de74a-c7c6-45e3-a567-78ef1c3df3f3", "folder_id": "8facaf57-d395-4405-9e8a-5aa0778e5d0b"}
|
Flows e Componentes/Json to Data.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"description": "Converte um dado JSON em objeto Data", "icon": null, "icon_bg_color": null, "updated_at": "2024-08-29T01:14:16+00:00", "webhook": false, "id": "2609b8c2-55c1-4bad-8cc6-19d49aabb311", "name": "Json to Data", "is_component": true, "endpoint_name": null, "data": {"edges": [], "nodes": [{"data": {"type": "JsonToDataComponent", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.custom import Component\r\nfrom langflow.inputs import MessageTextInput\r\nfrom langflow.template import Output\r\nfrom langflow.schema import Data\r\nimport json\r\n\r\nclass JsonToDataComponent(Component):\r\n display_name = \"JSON to Data\"\r\n description = \"Converte um dado JSON em objeto Data\"\r\n icon = \"\ud83e\uddea\" # Escolha um \u00edcone apropriado\r\n\r\n inputs = [\r\n MessageTextInput(\r\n name=\"json_input\",\r\n display_name=\"JSON Input\",\r\n info=\"Insira o dado em formato JSON.\",\r\n )\r\n ]\r\n\r\n outputs = [\r\n Output(display_name=\"Data Output\", name=\"data_output\", method=\"convert_json_to_data\"),\r\n ]\r\n\r\n def convert_json_to_data(self) -> Data:\r\n json_input = self.json_input\r\n \r\n # Converte o JSON em um dicion\u00e1rio Python\r\n try:\r\n data_dict = json.loads(json_input)\r\n except json.JSONDecodeError as e:\r\n self.status = f\"Erro ao decodificar JSON: {str(e)}\"\r\n return Data(data={\"error\": str(e)})\r\n\r\n # Cria o objeto Data a partir do dicion\u00e1rio\r\n #self.status = \"JSON convertido com sucesso\"\r\n return Data(data=data_dict)\r\n\r\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "json_input": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "json_input", "value": "", "display_name": "JSON Input", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "Insira o dado em formato JSON.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}}, "description": "Converte um dado JSON em objeto Data", "icon": "\ud83e\uddea", "base_classes": ["Data"], "display_name": "Json to Data", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Data"], "selected": "Data", "name": "data_output", "display_name": "Data Output", "method": "convert_json_to_data", "value": "__UNDEFINED__", "cache": true}], "field_order": ["json_input"], "beta": false, "edited": true, "official": false}, "id": "JsonToDataComponent-KNRxp"}, "id": "JsonToDataComponent-KNRxp", "position": {"x": 0, "y": 0}, "type": "genericNode"}], "viewport": {"x": 1, "y": 1, "zoom": 1}}, "user_id": "5d4de74a-c7c6-45e3-a567-78ef1c3df3f3", "folder_id": "8facaf57-d395-4405-9e8a-5aa0778e5d0b"}
|
Flows e Componentes/Roteador (com agente).json
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
Flows e Componentes/Roteador (flow as a tool).json
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
Flows e Componentes/Roteador (run flow).json
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
Flows e Componentes/Roteador (sem agente).json
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"name": "Roteador (sem agente)", "icon": null, "is_component": false, "endpoint_name": null, "data": {"nodes": [{"id": "RouterComponent-Of3SX", "type": "genericNode", "position": {"x": -249.5083023515918, "y": 388.5711390606666}, "data": {"type": "RouterComponent", "node": {"template": {"_type": "Component", "api_key": {"load_from_db": false, "required": false, "placeholder": "", "show": true, "name": "api_key", "value": null, "display_name": "API Key", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "", "title_case": false, "password": true, "type": "str", "_input_type": "SecretStrInput"}, "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.custom import Component\r\nfrom langflow.io import SecretStrInput, Output, MessageTextInput\r\nfrom langflow.schema import Data\r\nfrom langflow.schema.message import Message\r\nfrom semantic_router import Route\r\nfrom semantic_router.encoders import OpenAIEncoder\r\nfrom semantic_router.layer import RouteLayer\r\n\r\nclass RouterComponent(Component):\r\n display_name = \"Router Component\"\r\n description = \"\"\r\n documentation: str = \"\"\r\n icon = \"router_component\"\r\n name = \"RouterComponent\"\r\n\r\n inputs = [\r\n SecretStrInput(name=\"api_key\", display_name=\"API Key\"),\r\n MessageTextInput(\r\n name=\"input_text\",\r\n display_name=\"Input Text\",\r\n info=\"The primary text input for the operation.\",\r\n )\r\n \r\n ]\r\n\r\n outputs = [\r\n Output(display_name=\"Route\", name=\"route_output\", method=\"build_route\"),\r\n ]\r\n \r\n # Definindo as rotas\r\n suporte_tecnico = Route(\r\n name=\"Suporte T\u00e9cnico\",\r\n utterances=[\r\n \"problemas com internet\",\r\n \"reiniciar roteador\",\r\n \"problemas com Wi-Fi\",\r\n \"conex\u00e3o lenta\",\r\n \"sem conex\u00e3o\",\r\n \"roteador piscando\",\r\n \"cabo desconectado\",\r\n \"internet cai\",\r\n \"n\u00e3o consegue conectar\",\r\n \"senha do Wi-Fi\",\r\n \"rede n\u00e3o aparece\",\r\n \"sinal fraco\",\r\n \"problemas com IPv6\",\r\n \"problemas com VPN\",\r\n \"DNS n\u00e3o responde\"\r\n ]\r\n )\r\n \r\n financeiro = Route(\r\n name=\"Financeiro\",\r\n utterances=[\r\n \"consultar fatura\",\r\n \"segunda via\",\r\n \"verificar pagamento\",\r\n \"fatura atrasada\",\r\n \"negociar d\u00edvida\",\r\n \"parcelamento\",\r\n \"data de vencimento\",\r\n \"n\u00e3o recebi a fatura\",\r\n \"valor da fatura\",\r\n \"pagamento duplicado\",\r\n \"extrato detalhado\",\r\n \"fatura digital\",\r\n \"alterar forma de pagamento\",\r\n \"cancelar d\u00e9bito autom\u00e1tico\",\r\n \"mudar dia de vencimento\"\r\n ]\r\n )\r\n \r\n planos_servicos = Route(\r\n name=\"Planos e Servi\u00e7os\",\r\n utterances=[\r\n \"informa\u00e7\u00f5es sobre planos\",\r\n \"mudan\u00e7a de plano\",\r\n \"novos servi\u00e7os\",\r\n \"upgrade de plano\",\r\n \"downgrade de plano\",\r\n \"comparar planos\",\r\n \"inclus\u00e3o de servi\u00e7o\",\r\n \"exclus\u00e3o de servi\u00e7o\",\r\n \"promo\u00e7\u00f5es\",\r\n \"alterar velocidade\",\r\n \"detalhes do plano\",\r\n \"validade da promo\u00e7\u00e3o\",\r\n \"alterar franquia de dados\",\r\n \"adicionar canais\",\r\n \"cancelar plano\"\r\n ]\r\n )\r\n\r\n cadastro = Route(\r\n name=\"Cadastro\",\r\n utterances=[\r\n \"atualiza\u00e7\u00e3o de dados cadastrais\",\r\n \"verifica\u00e7\u00e3o de informa\u00e7\u00f5es\",\r\n \"alterar endere\u00e7o\",\r\n \"alterar telefone\",\r\n \"alterar email\",\r\n \"incluir dependente\",\r\n \"excluir dependente\",\r\n \"atualizar documento\",\r\n \"cadastrar biometria\",\r\n \"ativar reconhecimento facial\",\r\n \"alterar senha\",\r\n \"recuperar senha\",\r\n \"desbloquear conta\",\r\n \"ativar conta\",\r\n \"excluir conta\"\r\n ]\r\n )\r\n \r\n atendimento_geral = Route(\r\n name=\"Atendimento Geral\",\r\n utterances=[\r\n \"outras solicita\u00e7\u00f5es\",\r\n \"atendimento presencial\",\r\n \"agendar visita t\u00e9cnica\",\r\n \"reclama\u00e7\u00f5es\",\r\n \"elogios\",\r\n \"sugest\u00f5es\",\r\n \"falar com atendente\",\r\n \"hor\u00e1rio de atendimento\",\r\n \"endere\u00e7o da loja\",\r\n \"perguntas frequentes\",\r\n \"suporte em redes sociais\",\r\n \"solicitar contato\",\r\n \"enviar email\",\r\n \"chat online\",\r\n \"acessar \u00e1rea do cliente\"\r\n ]\r\n )\r\n \r\n routes = [suporte_tecnico, financeiro, planos_servicos, cadastro, atendimento_geral]\r\n encoder = OpenAIEncoder(\r\n openai_api_key=\"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\"\r\n )\r\n\r\n \r\n def build_route(self) -> Message:\r\n \r\n route_layer = RouteLayer(encoder=self.encoder, routes=self.routes)\r\n message = Message(text=route_layer(self.input_text).name)\r\n self.status = message\r\n return message\r\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_text": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_text", "value": "", "display_name": "Input Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "The primary text input for the operation.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}}, "description": "", "icon": "router_component", "base_classes": ["Message"], "display_name": "Router", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "route_output", "display_name": "Route", "method": "build_route", "value": "__UNDEFINED__", "cache": true}], "field_order": ["api_key", "input_text"], "beta": false, "edited": true, "lf_version": "1.0.16"}, "id": "RouterComponent-Of3SX"}, "selected": false, "width": 384, "height": 375, "dragging": false, "positionAbsolute": {"x": -249.5083023515918, "y": 388.5711390606666}}, {"id": "ChatInput-Glf9Q", "type": "genericNode", "position": {"x": -826.4106034775406, "y": 469.94860996899894}, "data": {"type": "ChatInput", "node": {"template": {"_type": "Component", "files": {"trace_as_metadata": true, "file_path": "", "fileTypes": ["txt", "md", "mdx", "csv", "json", "yaml", "yml", "xml", "html", "htm", "pdf", "docx", "py", "sh", "sql", "js", "ts", "tsx", "jpg", "jpeg", "png", "bmp", "image"], "list": true, "required": false, "placeholder": "", "show": true, "name": "files", "value": "", "display_name": "Files", "advanced": true, "dynamic": false, "info": "Files to be sent with the message.", "title_case": false, "type": "file", "_input_type": "FileInput"}, "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.base.data.utils import IMG_FILE_TYPES, TEXT_FILE_TYPES\nfrom langflow.base.io.chat import ChatComponent\nfrom langflow.inputs import BoolInput\nfrom langflow.io import DropdownInput, FileInput, MessageTextInput, MultilineInput, Output\nfrom langflow.memory import store_message\nfrom langflow.schema.message import Message\nfrom langflow.utils.constants import MESSAGE_SENDER_AI, MESSAGE_SENDER_USER, MESSAGE_SENDER_NAME_USER\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n name = \"ChatInput\"\n\n inputs = [\n MultilineInput(\n name=\"input_value\",\n display_name=\"Text\",\n value=\"\",\n info=\"Message to be passed as input.\",\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_USER,\n info=\"Type of sender.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_USER,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n FileInput(\n name=\"files\",\n display_name=\"Files\",\n file_types=TEXT_FILE_TYPES + IMG_FILE_TYPES,\n info=\"Files to be sent with the message.\",\n advanced=True,\n is_list=True,\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def message_response(self) -> Message:\n message = Message(\n text=self.input_value,\n sender=self.sender,\n sender_name=self.sender_name,\n session_id=self.session_id,\n files=self.files,\n )\n\n if (\n self.session_id\n and isinstance(message, Message)\n and isinstance(message.text, str)\n and self.should_store_message\n ):\n store_message(\n message,\n flow_id=self.graph.flow_id,\n )\n self.message.value = message\n\n self.status = message\n return message\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_value": {"trace_as_input": true, "multiline": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "Minha internet est\u00e1 muito lenta, como posso resolver isso?", "display_name": "Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "Message to be passed as input.", "title_case": false, "type": "str", "_input_type": "MultilineInput"}, "sender": {"trace_as_metadata": true, "options": ["Machine", "User"], "combobox": false, "required": false, "placeholder": "", "show": true, "name": "sender", "value": "User", "display_name": "Sender Type", "advanced": true, "dynamic": false, "info": "Type of sender.", "title_case": false, "type": "str", "_input_type": "DropdownInput"}, "sender_name": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "sender_name", "value": "User", "display_name": "Sender Name", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "Name of the sender.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "session_id": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "session_id", "value": "", "display_name": "Session ID", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "The session ID of the chat. If empty, the current session ID parameter will be used.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "should_store_message": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "should_store_message", "value": true, "display_name": "Store Messages", "advanced": true, "dynamic": false, "info": "Store the message in the history.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}}, "description": "Get chat inputs from the Playground.", "icon": "ChatInput", "base_classes": ["Message"], "display_name": "Chat Input", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "message", "display_name": "Message", "method": "message_response", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value", "should_store_message", "sender", "sender_name", "session_id", "files"], "beta": false, "edited": false, "lf_version": "1.0.16"}, "id": "ChatInput-Glf9Q"}, "selected": false, "width": 384, "height": 297, "positionAbsolute": {"x": -826.4106034775406, "y": 469.94860996899894}, "dragging": false}, {"id": "TextOutput-JmUnx", "type": "genericNode", "position": {"x": 245.63442615840916, "y": 460.23181239705355}, "data": {"type": "TextOutput", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.base.io.text import TextComponent\nfrom langflow.io import MessageTextInput, Output\nfrom langflow.schema.message import Message\n\n\nclass TextOutputComponent(TextComponent):\n display_name = \"Text Output\"\n description = \"Display a text output in the Playground.\"\n icon = \"type\"\n name = \"TextOutput\"\n\n inputs = [\n MessageTextInput(\n name=\"input_value\",\n display_name=\"Text\",\n info=\"Text to be passed as output.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Text\", name=\"text\", method=\"text_response\"),\n ]\n\n def text_response(self) -> Message:\n message = Message(\n text=self.input_value,\n )\n self.status = self.input_value\n return message\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_value": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "", "display_name": "Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "Text to be passed as output.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}}, "description": "Display a text output in the Playground.", "icon": "type", "base_classes": ["Message"], "display_name": "Text Output", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "text", "display_name": "Text", "method": "text_response", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value"], "beta": false, "edited": false, "lf_version": "1.0.16"}, "id": "TextOutput-JmUnx"}, "selected": false, "width": 384, "height": 297, "positionAbsolute": {"x": 245.63442615840916, "y": 460.23181239705355}, "dragging": false}, {"id": "OpenAIModel-swCSQ", "type": "genericNode", "position": {"x": 780.9626668825438, "y": 412.6529653260348}, "data": {"type": "OpenAIModel", "node": {"template": {"_type": "Component", "api_key": {"load_from_db": false, "required": false, "placeholder": "", "show": true, "name": "api_key", "value": null, "display_name": "OpenAI API Key", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "The OpenAI API Key to use for the OpenAI model.", "title_case": false, "password": true, "type": "str", "_input_type": "SecretStrInput"}, "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "import operator\nfrom functools import reduce\n\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.inputs import (\n BoolInput,\n DictInput,\n DropdownInput,\n FloatInput,\n IntInput,\n SecretStrInput,\n StrInput,\n)\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = LCModelComponent._base_inputs + [\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(name=\"model_kwargs\", display_name=\"Model Kwargs\", advanced=True),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DictInput(\n name=\"output_schema\",\n is_list=True,\n display_name=\"Schema\",\n advanced=True,\n info=\"The schema for the Output of the model. You must pass the word JSON in the prompt. If left blank, JSON mode will be disabled.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n ),\n FloatInput(name=\"temperature\", display_name=\"Temperature\", value=0.1),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n # self.output_schema is a list of dictionaries\n # let's convert it to a dictionary\n output_schema_dict: dict[str, str] = reduce(operator.ior, self.output_schema or {}, {})\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = bool(output_schema_dict) or self.json_mode\n seed = self.seed\n\n if openai_api_key:\n api_key = SecretStr(openai_api_key)\n else:\n api_key = None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n )\n if json_mode:\n if output_schema_dict:\n output = output.with_structured_output(schema=output_schema_dict, method=\"json_mode\") # type: ignore\n else:\n output = output.bind(response_format={\"type\": \"json_object\"}) # type: ignore\n\n return output # type: ignore\n\n def _get_exception_message(self, e: Exception):\n \"\"\"\n Get a message from an OpenAI exception.\n\n Args:\n exception (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n\n try:\n from openai import BadRequestError\n except ImportError:\n return\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\") # type: ignore\n if message:\n return message\n return\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_value": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "", "display_name": "Input", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "", "title_case": false, "type": "str", "_input_type": "MessageInput"}, "json_mode": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "json_mode", "value": false, "display_name": "JSON Mode", "advanced": true, "dynamic": false, "info": "If True, it will output JSON regardless of passing a schema.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}, "max_tokens": {"trace_as_metadata": true, "range_spec": {"step_type": "float", "min": 0, "max": 128000, "step": 0.1}, "list": false, "required": false, "placeholder": "", "show": true, "name": "max_tokens", "value": "", "display_name": "Max Tokens", "advanced": true, "dynamic": false, "info": "The maximum number of tokens to generate. Set to 0 for unlimited tokens.", "title_case": false, "type": "int", "_input_type": "IntInput"}, "model_kwargs": {"trace_as_input": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "model_kwargs", "value": {}, "display_name": "Model Kwargs", "advanced": true, "dynamic": false, "info": "", "title_case": false, "type": "dict", "_input_type": "DictInput"}, "model_name": {"trace_as_metadata": true, "options": ["gpt-4o-mini", "gpt-4o", "gpt-4-turbo", "gpt-4-turbo-preview", "gpt-4", "gpt-3.5-turbo", "gpt-3.5-turbo-0125"], "combobox": false, "required": false, "placeholder": "", "show": true, "name": "model_name", "value": "gpt-4o-mini", "display_name": "Model Name", "advanced": false, "dynamic": false, "info": "", "title_case": false, "type": "str", "_input_type": "DropdownInput"}, "openai_api_base": {"trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "openai_api_base", "value": "", "display_name": "OpenAI API Base", "advanced": true, "dynamic": false, "info": "The base URL of the OpenAI API. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.", "title_case": false, "type": "str", "_input_type": "StrInput"}, "output_schema": {"trace_as_input": true, "list": true, "required": false, "placeholder": "", "show": true, "name": "output_schema", "value": {}, "display_name": "Schema", "advanced": true, "dynamic": false, "info": "The schema for the Output of the model. You must pass the word JSON in the prompt. If left blank, JSON mode will be disabled.", "title_case": false, "type": "dict", "_input_type": "DictInput"}, "seed": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "seed", "value": 1, "display_name": "Seed", "advanced": true, "dynamic": false, "info": "The seed controls the reproducibility of the job.", "title_case": false, "type": "int", "_input_type": "IntInput"}, "stream": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "stream", "value": false, "display_name": "Stream", "advanced": true, "dynamic": false, "info": "Stream the response from the model. Streaming works only in Chat.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}, "system_message": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "system_message", "value": "", "display_name": "System Message", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "System message to pass to the model.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "temperature": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "temperature", "value": 0.1, "display_name": "Temperature", "advanced": false, "dynamic": false, "info": "", "title_case": false, "type": "float", "_input_type": "FloatInput"}}, "description": "Generates text using OpenAI LLMs.", "icon": "OpenAI", "base_classes": ["LanguageModel", "Message"], "display_name": "OpenAI", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "text_output", "display_name": "Text", "method": "text_response", "value": "__UNDEFINED__", "cache": true}, {"types": ["LanguageModel"], "selected": "LanguageModel", "name": "model_output", "display_name": "Language Model", "method": "build_model", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value", "system_message", "stream", "max_tokens", "model_kwargs", "json_mode", "output_schema", "model_name", "openai_api_base", "api_key", "temperature", "seed"], "beta": false, "edited": false, "lf_version": "1.0.16"}, "id": "OpenAIModel-swCSQ"}, "selected": false, "width": 384, "height": 599, "dragging": false, "positionAbsolute": {"x": 780.9626668825438, "y": 412.6529653260348}}, {"id": "Prompt-65IPB", "type": "genericNode", "position": {"x": 296.89612355216957, "y": 783.9109444735674}, "data": {"type": "Prompt", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.base.prompts.api_utils import process_prompt_template\nfrom langflow.custom import Component\nfrom langflow.inputs.inputs import DefaultPromptField\nfrom langflow.io import Output, PromptInput\nfrom langflow.schema.message import Message\nfrom langflow.template.utils import update_template_values\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n trace_type = \"prompt\"\n name = \"Prompt\"\n\n inputs = [\n PromptInput(name=\"template\", display_name=\"Template\"),\n ]\n\n outputs = [\n Output(display_name=\"Prompt Message\", name=\"prompt\", method=\"build_prompt\"),\n ]\n\n async def build_prompt(\n self,\n ) -> Message:\n prompt = await Message.from_template_and_variables(**self._attributes)\n self.status = prompt.text\n return prompt\n\n def _update_template(self, frontend_node: dict):\n prompt_template = frontend_node[\"template\"][\"template\"][\"value\"]\n custom_fields = frontend_node[\"custom_fields\"]\n frontend_node_template = frontend_node[\"template\"]\n _ = process_prompt_template(\n template=prompt_template,\n name=\"template\",\n custom_fields=custom_fields,\n frontend_node_template=frontend_node_template,\n )\n return frontend_node\n\n def post_code_processing(self, new_frontend_node: dict, current_frontend_node: dict):\n \"\"\"\n This function is called after the code validation is done.\n \"\"\"\n frontend_node = super().post_code_processing(new_frontend_node, current_frontend_node)\n template = frontend_node[\"template\"][\"template\"][\"value\"]\n # Kept it duplicated for backwards compatibility\n _ = process_prompt_template(\n template=template,\n name=\"template\",\n custom_fields=frontend_node[\"custom_fields\"],\n frontend_node_template=frontend_node[\"template\"],\n )\n # Now that template is updated, we need to grab any values that were set in the current_frontend_node\n # and update the frontend_node with those values\n update_template_values(new_template=frontend_node, previous_template=current_frontend_node[\"template\"])\n return frontend_node\n\n def _get_fallback_input(self, **kwargs):\n return DefaultPromptField(**kwargs)\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "template": {"trace_as_input": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "template", "value": "Voc\u00ea \u00e9 um especialista em {menu} e precisa ajudar o usu\u00e1rio:\n\nusu\u00e1rio: {input}", "display_name": "Template", "advanced": false, "dynamic": false, "info": "", "title_case": false, "type": "prompt", "_input_type": "PromptInput"}, "menu": {"field_type": "str", "required": false, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "", "fileTypes": [], "file_path": "", "password": false, "name": "menu", "display_name": "menu", "advanced": false, "input_types": ["Message", "Text"], "dynamic": false, "info": "", "load_from_db": false, "title_case": false, "type": "str"}, "input": {"field_type": "str", "required": false, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "", "fileTypes": [], "file_path": "", "password": false, "name": "input", "display_name": "input", "advanced": false, "input_types": ["Message", "Text"], "dynamic": false, "info": "", "load_from_db": false, "title_case": false, "type": "str"}}, "description": "Create a prompt template with dynamic variables.", "icon": "prompts", "is_input": null, "is_output": null, "is_composition": null, "base_classes": ["Message"], "name": "", "display_name": "Prompt", "documentation": "", "custom_fields": {"template": ["menu", "input"]}, "output_types": [], "full_path": null, "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "prompt", "hidden": null, "display_name": "Prompt Message", "method": "build_prompt", "value": "__UNDEFINED__", "cache": true}], "field_order": ["template"], "beta": false, "error": null, "edited": false, "lf_version": "1.0.16"}, "id": "Prompt-65IPB"}, "selected": false, "width": 384, "height": 497, "positionAbsolute": {"x": 296.89612355216957, "y": 783.9109444735674}, "dragging": false}, {"id": "ChatOutput-bTMey", "type": "genericNode", "position": {"x": 1253.4405770271298, "y": 606.330928929854}, "data": {"type": "ChatOutput", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.inputs import BoolInput\nfrom langflow.io import DropdownInput, MessageTextInput, Output\nfrom langflow.memory import store_message\nfrom langflow.schema.message import Message\nfrom langflow.utils.constants import MESSAGE_SENDER_NAME_AI, MESSAGE_SENDER_USER, MESSAGE_SENDER_AI\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n name = \"ChatOutput\"\n\n inputs = [\n MessageTextInput(\n name=\"input_value\",\n display_name=\"Text\",\n info=\"Message to be passed as output.\",\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_AI,\n advanced=True,\n info=\"Type of sender.\",\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_AI,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"data_template\",\n display_name=\"Data Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def message_response(self) -> Message:\n message = Message(\n text=self.input_value,\n sender=self.sender,\n sender_name=self.sender_name,\n session_id=self.session_id,\n )\n if (\n self.session_id\n and isinstance(message, Message)\n and isinstance(message.text, str)\n and self.should_store_message\n ):\n store_message(\n message,\n flow_id=self.graph.flow_id,\n )\n self.message.value = message\n\n self.status = message\n return message\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "data_template": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "data_template", "value": "{text}", "display_name": "Data Template", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "input_value": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "", "display_name": "Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "Message to be passed as output.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "sender": {"trace_as_metadata": true, "options": ["Machine", "User"], "combobox": false, "required": false, "placeholder": "", "show": true, "name": "sender", "value": "Machine", "display_name": "Sender Type", "advanced": true, "dynamic": false, "info": "Type of sender.", "title_case": false, "type": "str", "_input_type": "DropdownInput"}, "sender_name": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "sender_name", "value": "AI", "display_name": "Sender Name", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "Name of the sender.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "session_id": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "session_id", "value": "", "display_name": "Session ID", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "The session ID of the chat. If empty, the current session ID parameter will be used.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "should_store_message": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "should_store_message", "value": true, "display_name": "Store Messages", "advanced": true, "dynamic": false, "info": "Store the message in the history.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}}, "description": "Display a chat message in the Playground.", "icon": "ChatOutput", "base_classes": ["Message"], "display_name": "Chat Output", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "message", "display_name": "Message", "method": "message_response", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value", "should_store_message", "sender", "sender_name", "session_id", "data_template"], "beta": false, "edited": false, "lf_version": "1.0.16"}, "id": "ChatOutput-bTMey"}, "selected": false, "width": 384, "height": 297}], "edges": [{"source": "ChatInput-Glf9Q", "sourceHandle": "{\u0153dataType\u0153:\u0153ChatInput\u0153,\u0153id\u0153:\u0153ChatInput-Glf9Q\u0153,\u0153name\u0153:\u0153message\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}", "target": "RouterComponent-Of3SX", "targetHandle": "{\u0153fieldName\u0153:\u0153input_text\u0153,\u0153id\u0153:\u0153RouterComponent-Of3SX\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "data": {"targetHandle": {"fieldName": "input_text", "id": "RouterComponent-Of3SX", "inputTypes": ["Message"], "type": "str"}, "sourceHandle": {"dataType": "ChatInput", "id": "ChatInput-Glf9Q", "name": "message", "output_types": ["Message"]}}, "id": "reactflow__edge-ChatInput-Glf9Q{\u0153dataType\u0153:\u0153ChatInput\u0153,\u0153id\u0153:\u0153ChatInput-Glf9Q\u0153,\u0153name\u0153:\u0153message\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}-RouterComponent-Of3SX{\u0153fieldName\u0153:\u0153input_text\u0153,\u0153id\u0153:\u0153RouterComponent-Of3SX\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "className": ""}, {"source": "RouterComponent-Of3SX", "sourceHandle": "{\u0153dataType\u0153:\u0153RouterComponent\u0153,\u0153id\u0153:\u0153RouterComponent-Of3SX\u0153,\u0153name\u0153:\u0153route_output\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}", "target": "TextOutput-JmUnx", "targetHandle": "{\u0153fieldName\u0153:\u0153input_value\u0153,\u0153id\u0153:\u0153TextOutput-JmUnx\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "data": {"targetHandle": {"fieldName": "input_value", "id": "TextOutput-JmUnx", "inputTypes": ["Message"], "type": "str"}, "sourceHandle": {"dataType": "RouterComponent", "id": "RouterComponent-Of3SX", "name": "route_output", "output_types": ["Message"]}}, "id": "reactflow__edge-RouterComponent-Of3SX{\u0153dataType\u0153:\u0153RouterComponent\u0153,\u0153id\u0153:\u0153RouterComponent-Of3SX\u0153,\u0153name\u0153:\u0153route_output\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}-TextOutput-JmUnx{\u0153fieldName\u0153:\u0153input_value\u0153,\u0153id\u0153:\u0153TextOutput-JmUnx\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "className": ""}, {"source": "TextOutput-JmUnx", "sourceHandle": "{\u0153dataType\u0153:\u0153TextOutput\u0153,\u0153id\u0153:\u0153TextOutput-JmUnx\u0153,\u0153name\u0153:\u0153text\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}", "target": "Prompt-65IPB", "targetHandle": "{\u0153fieldName\u0153:\u0153menu\u0153,\u0153id\u0153:\u0153Prompt-65IPB\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153,\u0153Text\u0153],\u0153type\u0153:\u0153str\u0153}", "data": {"targetHandle": {"fieldName": "menu", "id": "Prompt-65IPB", "inputTypes": ["Message", "Text"], "type": "str"}, "sourceHandle": {"dataType": "TextOutput", "id": "TextOutput-JmUnx", "name": "text", "output_types": ["Message"]}}, "id": "reactflow__edge-TextOutput-JmUnx{\u0153dataType\u0153:\u0153TextOutput\u0153,\u0153id\u0153:\u0153TextOutput-JmUnx\u0153,\u0153name\u0153:\u0153text\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}-Prompt-65IPB{\u0153fieldName\u0153:\u0153menu\u0153,\u0153id\u0153:\u0153Prompt-65IPB\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153,\u0153Text\u0153],\u0153type\u0153:\u0153str\u0153}", "className": ""}, {"source": "ChatInput-Glf9Q", "sourceHandle": "{\u0153dataType\u0153:\u0153ChatInput\u0153,\u0153id\u0153:\u0153ChatInput-Glf9Q\u0153,\u0153name\u0153:\u0153message\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}", "target": "Prompt-65IPB", "targetHandle": "{\u0153fieldName\u0153:\u0153input\u0153,\u0153id\u0153:\u0153Prompt-65IPB\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153,\u0153Text\u0153],\u0153type\u0153:\u0153str\u0153}", "data": {"targetHandle": {"fieldName": "input", "id": "Prompt-65IPB", "inputTypes": ["Message", "Text"], "type": "str"}, "sourceHandle": {"dataType": "ChatInput", "id": "ChatInput-Glf9Q", "name": "message", "output_types": ["Message"]}}, "id": "reactflow__edge-ChatInput-Glf9Q{\u0153dataType\u0153:\u0153ChatInput\u0153,\u0153id\u0153:\u0153ChatInput-Glf9Q\u0153,\u0153name\u0153:\u0153message\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}-Prompt-65IPB{\u0153fieldName\u0153:\u0153input\u0153,\u0153id\u0153:\u0153Prompt-65IPB\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153,\u0153Text\u0153],\u0153type\u0153:\u0153str\u0153}", "className": ""}, {"source": "Prompt-65IPB", "sourceHandle": "{\u0153dataType\u0153:\u0153Prompt\u0153,\u0153id\u0153:\u0153Prompt-65IPB\u0153,\u0153name\u0153:\u0153prompt\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}", "target": "OpenAIModel-swCSQ", "targetHandle": "{\u0153fieldName\u0153:\u0153input_value\u0153,\u0153id\u0153:\u0153OpenAIModel-swCSQ\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "data": {"targetHandle": {"fieldName": "input_value", "id": "OpenAIModel-swCSQ", "inputTypes": ["Message"], "type": "str"}, "sourceHandle": {"dataType": "Prompt", "id": "Prompt-65IPB", "name": "prompt", "output_types": ["Message"]}}, "id": "reactflow__edge-Prompt-65IPB{\u0153dataType\u0153:\u0153Prompt\u0153,\u0153id\u0153:\u0153Prompt-65IPB\u0153,\u0153name\u0153:\u0153prompt\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}-OpenAIModel-swCSQ{\u0153fieldName\u0153:\u0153input_value\u0153,\u0153id\u0153:\u0153OpenAIModel-swCSQ\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "className": ""}, {"source": "OpenAIModel-swCSQ", "sourceHandle": "{\u0153dataType\u0153:\u0153OpenAIModel\u0153,\u0153id\u0153:\u0153OpenAIModel-swCSQ\u0153,\u0153name\u0153:\u0153text_output\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}", "target": "ChatOutput-bTMey", "targetHandle": "{\u0153fieldName\u0153:\u0153input_value\u0153,\u0153id\u0153:\u0153ChatOutput-bTMey\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "data": {"targetHandle": {"fieldName": "input_value", "id": "ChatOutput-bTMey", "inputTypes": ["Message"], "type": "str"}, "sourceHandle": {"dataType": "OpenAIModel", "id": "OpenAIModel-swCSQ", "name": "text_output", "output_types": ["Message"]}}, "id": "reactflow__edge-OpenAIModel-swCSQ{\u0153dataType\u0153:\u0153OpenAIModel\u0153,\u0153id\u0153:\u0153OpenAIModel-swCSQ\u0153,\u0153name\u0153:\u0153text_output\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}-ChatOutput-bTMey{\u0153fieldName\u0153:\u0153input_value\u0153,\u0153id\u0153:\u0153ChatOutput-bTMey\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "className": ""}], "viewport": {"x": 271.01048990360937, "y": -204.80651222435728, "zoom": 0.6701204504101801}}, "user_id": "c70cbea1-c0e0-4d39-85c8-fccdda2e7da9", "folder_id": "d117a1ff-166c-4c0b-9581-1b1bd74c4d5f", "description": "", "icon_bg_color": null, "updated_at": "2024-08-26T22:16:07+00:00", "webhook": false, "id": "013d3809-6bc4-4d5c-990a-9519663c31c3"}
|
|
|
|
| 1 |
+
{"description": "", "icon": null, "icon_bg_color": null, "updated_at": "2024-08-28T23:38:13+00:00", "webhook": false, "id": "298470d4-3b78-44f7-8f25-e88d5762977e", "name": "Roteador (sem agente)", "is_component": false, "endpoint_name": null, "data": {"nodes": [{"id": "RouterComponent-aFHNL", "type": "genericNode", "position": {"x": -321.13721618435017, "y": 281.1277683115291}, "data": {"type": "RouterComponent", "node": {"template": {"_type": "Component", "api_key": {"load_from_db": false, "required": false, "placeholder": "", "show": true, "name": "api_key", "value": null, "display_name": "API Key", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "", "title_case": false, "password": true, "type": "str", "_input_type": "SecretStrInput"}, "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.custom import Component\r\nfrom langflow.io import SecretStrInput, Output, MessageTextInput\r\nfrom langflow.schema import Data\r\nfrom langflow.schema.message import Message\r\nfrom semantic_router import Route\r\nfrom semantic_router.encoders import OpenAIEncoder\r\nfrom semantic_router.layer import RouteLayer\r\n\r\nclass RouterComponent(Component):\r\n display_name = \"Router Component\"\r\n description = \"\"\r\n documentation: str = \"\"\r\n icon = \"router_component\"\r\n name = \"RouterComponent\"\r\n\r\n inputs = [\r\n SecretStrInput(name=\"api_key\", display_name=\"API Key\"),\r\n MessageTextInput(\r\n name=\"input_text\",\r\n display_name=\"Input Text\",\r\n info=\"The primary text input for the operation.\",\r\n )\r\n \r\n ]\r\n\r\n outputs = [\r\n Output(display_name=\"Route\", name=\"route_output\", method=\"build_route\"),\r\n ]\r\n \r\n # Definindo as rotas\r\n suporte_tecnico = Route(\r\n name=\"Suporte T\u00e9cnico\",\r\n utterances=[\r\n \"problemas com internet\",\r\n \"reiniciar roteador\",\r\n \"problemas com Wi-Fi\",\r\n \"conex\u00e3o lenta\",\r\n \"sem conex\u00e3o\",\r\n \"roteador piscando\",\r\n \"cabo desconectado\",\r\n \"internet cai\",\r\n \"n\u00e3o consegue conectar\",\r\n \"senha do Wi-Fi\",\r\n \"rede n\u00e3o aparece\",\r\n \"sinal fraco\",\r\n \"problemas com IPv6\",\r\n \"problemas com VPN\",\r\n \"DNS n\u00e3o responde\"\r\n ]\r\n )\r\n \r\n financeiro = Route(\r\n name=\"Financeiro\",\r\n utterances=[\r\n \"consultar fatura\",\r\n \"segunda via\",\r\n \"verificar pagamento\",\r\n \"fatura atrasada\",\r\n \"negociar d\u00edvida\",\r\n \"parcelamento\",\r\n \"data de vencimento\",\r\n \"n\u00e3o recebi a fatura\",\r\n \"valor da fatura\",\r\n \"pagamento duplicado\",\r\n \"extrato detalhado\",\r\n \"fatura digital\",\r\n \"alterar forma de pagamento\",\r\n \"cancelar d\u00e9bito autom\u00e1tico\",\r\n \"mudar dia de vencimento\"\r\n ]\r\n )\r\n \r\n planos_servicos = Route(\r\n name=\"Planos e Servi\u00e7os\",\r\n utterances=[\r\n \"informa\u00e7\u00f5es sobre planos\",\r\n \"mudan\u00e7a de plano\",\r\n \"novos servi\u00e7os\",\r\n \"upgrade de plano\",\r\n \"downgrade de plano\",\r\n \"comparar planos\",\r\n \"inclus\u00e3o de servi\u00e7o\",\r\n \"exclus\u00e3o de servi\u00e7o\",\r\n \"promo\u00e7\u00f5es\",\r\n \"alterar velocidade\",\r\n \"detalhes do plano\",\r\n \"validade da promo\u00e7\u00e3o\",\r\n \"alterar franquia de dados\",\r\n \"adicionar canais\",\r\n \"cancelar plano\"\r\n ]\r\n )\r\n\r\n cadastro = Route(\r\n name=\"Cadastro\",\r\n utterances=[\r\n \"atualiza\u00e7\u00e3o de dados cadastrais\",\r\n \"verifica\u00e7\u00e3o de informa\u00e7\u00f5es\",\r\n \"alterar endere\u00e7o\",\r\n \"alterar telefone\",\r\n \"alterar email\",\r\n \"incluir dependente\",\r\n \"excluir dependente\",\r\n \"atualizar documento\",\r\n \"cadastrar biometria\",\r\n \"ativar reconhecimento facial\",\r\n \"alterar senha\",\r\n \"recuperar senha\",\r\n \"desbloquear conta\",\r\n \"ativar conta\",\r\n \"excluir conta\"\r\n ]\r\n )\r\n \r\n atendimento_geral = Route(\r\n name=\"Atendimento Geral\",\r\n utterances=[\r\n \"outras solicita\u00e7\u00f5es\",\r\n \"atendimento presencial\",\r\n \"agendar visita t\u00e9cnica\",\r\n \"reclama\u00e7\u00f5es\",\r\n \"elogios\",\r\n \"sugest\u00f5es\",\r\n \"falar com atendente\",\r\n \"hor\u00e1rio de atendimento\",\r\n \"endere\u00e7o da loja\",\r\n \"perguntas frequentes\",\r\n \"suporte em redes sociais\",\r\n \"solicitar contato\",\r\n \"enviar email\",\r\n \"chat online\",\r\n \"acessar \u00e1rea do cliente\"\r\n ]\r\n )\r\n \r\n routes = [suporte_tecnico, financeiro, planos_servicos, cadastro, atendimento_geral]\r\n encoder = OpenAIEncoder(\r\n openai_api_key=\"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\"\r\n )\r\n\r\n \r\n def build_route(self) -> Message:\r\n \r\n route_layer = RouteLayer(encoder=self.encoder, routes=self.routes)\r\n message = Message(text=route_layer(self.input_text).name)\r\n self.status = message\r\n return message\r\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_text": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_text", "value": "", "display_name": "Input Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "The primary text input for the operation.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}}, "description": "", "icon": "router_component", "base_classes": ["Message"], "display_name": "Router", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "route_output", "display_name": "Route", "method": "build_route", "value": "__UNDEFINED__", "cache": true}], "field_order": ["api_key", "input_text"], "beta": false, "edited": true, "lf_version": "1.0.16"}, "id": "RouterComponent-aFHNL"}, "selected": false, "width": 384, "height": 376, "dragging": false, "positionAbsolute": {"x": -321.13721618435017, "y": 281.1277683115291}}, {"id": "ChatInput-dHY1B", "type": "genericNode", "position": {"x": -826.4106034775406, "y": 469.94860996899894}, "data": {"type": "ChatInput", "node": {"template": {"_type": "Component", "files": {"trace_as_metadata": true, "file_path": "", "fileTypes": ["txt", "md", "mdx", "csv", "json", "yaml", "yml", "xml", "html", "htm", "pdf", "docx", "py", "sh", "sql", "js", "ts", "tsx", "jpg", "jpeg", "png", "bmp", "image"], "list": true, "required": false, "placeholder": "", "show": true, "name": "files", "value": "", "display_name": "Files", "advanced": true, "dynamic": false, "info": "Files to be sent with the message.", "title_case": false, "type": "file", "_input_type": "FileInput"}, "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.base.data.utils import IMG_FILE_TYPES, TEXT_FILE_TYPES\nfrom langflow.base.io.chat import ChatComponent\nfrom langflow.inputs import BoolInput\nfrom langflow.io import DropdownInput, FileInput, MessageTextInput, MultilineInput, Output\nfrom langflow.memory import store_message\nfrom langflow.schema.message import Message\nfrom langflow.utils.constants import MESSAGE_SENDER_AI, MESSAGE_SENDER_USER, MESSAGE_SENDER_NAME_USER\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n name = \"ChatInput\"\n\n inputs = [\n MultilineInput(\n name=\"input_value\",\n display_name=\"Text\",\n value=\"\",\n info=\"Message to be passed as input.\",\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_USER,\n info=\"Type of sender.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_USER,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n FileInput(\n name=\"files\",\n display_name=\"Files\",\n file_types=TEXT_FILE_TYPES + IMG_FILE_TYPES,\n info=\"Files to be sent with the message.\",\n advanced=True,\n is_list=True,\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def message_response(self) -> Message:\n message = Message(\n text=self.input_value,\n sender=self.sender,\n sender_name=self.sender_name,\n session_id=self.session_id,\n files=self.files,\n )\n\n if (\n self.session_id\n and isinstance(message, Message)\n and isinstance(message.text, str)\n and self.should_store_message\n ):\n store_message(\n message,\n flow_id=self.graph.flow_id,\n )\n self.message.value = message\n\n self.status = message\n return message\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_value": {"trace_as_input": true, "multiline": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "Minha internet est\u00e1 muito lenta, como posso resolver isso?", "display_name": "Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "Message to be passed as input.", "title_case": false, "type": "str", "_input_type": "MultilineInput"}, "sender": {"trace_as_metadata": true, "options": ["Machine", "User"], "combobox": false, "required": false, "placeholder": "", "show": true, "name": "sender", "value": "User", "display_name": "Sender Type", "advanced": true, "dynamic": false, "info": "Type of sender.", "title_case": false, "type": "str", "_input_type": "DropdownInput"}, "sender_name": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "sender_name", "value": "User", "display_name": "Sender Name", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "Name of the sender.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "session_id": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "session_id", "value": "", "display_name": "Session ID", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "The session ID of the chat. If empty, the current session ID parameter will be used.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "should_store_message": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "should_store_message", "value": true, "display_name": "Store Messages", "advanced": true, "dynamic": false, "info": "Store the message in the history.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}}, "description": "Get chat inputs from the Playground.", "icon": "ChatInput", "base_classes": ["Message"], "display_name": "Chat Input", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "message", "display_name": "Message", "method": "message_response", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value", "should_store_message", "sender", "sender_name", "session_id", "files"], "beta": false, "edited": false, "lf_version": "1.0.16"}, "id": "ChatInput-dHY1B"}, "selected": false, "width": 384, "height": 298, "positionAbsolute": {"x": -826.4106034775406, "y": 469.94860996899894}, "dragging": false}, {"id": "TextOutput-xnbOG", "type": "genericNode", "position": {"x": 178.48231944019824, "y": 349.80390357155113}, "data": {"type": "TextOutput", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.base.io.text import TextComponent\nfrom langflow.io import MessageTextInput, Output\nfrom langflow.schema.message import Message\n\n\nclass TextOutputComponent(TextComponent):\n display_name = \"Text Output\"\n description = \"Display a text output in the Playground.\"\n icon = \"type\"\n name = \"TextOutput\"\n\n inputs = [\n MessageTextInput(\n name=\"input_value\",\n display_name=\"Text\",\n info=\"Text to be passed as output.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Text\", name=\"text\", method=\"text_response\"),\n ]\n\n def text_response(self) -> Message:\n message = Message(\n text=self.input_value,\n )\n self.status = self.input_value\n return message\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_value": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "", "display_name": "Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "Text to be passed as output.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}}, "description": "Display a text output in the Playground.", "icon": "type", "base_classes": ["Message"], "display_name": "Text Output", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "text", "display_name": "Text", "method": "text_response", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value"], "beta": false, "edited": false, "lf_version": "1.0.16"}, "id": "TextOutput-xnbOG"}, "selected": false, "width": 384, "height": 298, "positionAbsolute": {"x": 178.48231944019824, "y": 349.80390357155113}, "dragging": false}, {"id": "OpenAIModel-jIsDD", "type": "genericNode", "position": {"x": 780.9626668825438, "y": 412.6529653260348}, "data": {"type": "OpenAIModel", "node": {"template": {"_type": "Component", "api_key": {"load_from_db": false, "required": false, "placeholder": "", "show": true, "name": "api_key", "value": null, "display_name": "OpenAI API Key", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "The OpenAI API Key to use for the OpenAI model.", "title_case": false, "password": true, "type": "str", "_input_type": "SecretStrInput"}, "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "import operator\nfrom functools import reduce\n\nfrom langflow.field_typing.range_spec import RangeSpec\nfrom langchain_openai import ChatOpenAI\nfrom pydantic.v1 import SecretStr\n\nfrom langflow.base.models.model import LCModelComponent\nfrom langflow.base.models.openai_constants import OPENAI_MODEL_NAMES\nfrom langflow.field_typing import LanguageModel\nfrom langflow.inputs import (\n BoolInput,\n DictInput,\n DropdownInput,\n FloatInput,\n IntInput,\n SecretStrInput,\n StrInput,\n)\n\n\nclass OpenAIModelComponent(LCModelComponent):\n display_name = \"OpenAI\"\n description = \"Generates text using OpenAI LLMs.\"\n icon = \"OpenAI\"\n name = \"OpenAIModel\"\n\n inputs = LCModelComponent._base_inputs + [\n IntInput(\n name=\"max_tokens\",\n display_name=\"Max Tokens\",\n advanced=True,\n info=\"The maximum number of tokens to generate. Set to 0 for unlimited tokens.\",\n range_spec=RangeSpec(min=0, max=128000),\n ),\n DictInput(name=\"model_kwargs\", display_name=\"Model Kwargs\", advanced=True),\n BoolInput(\n name=\"json_mode\",\n display_name=\"JSON Mode\",\n advanced=True,\n info=\"If True, it will output JSON regardless of passing a schema.\",\n ),\n DictInput(\n name=\"output_schema\",\n is_list=True,\n display_name=\"Schema\",\n advanced=True,\n info=\"The schema for the Output of the model. You must pass the word JSON in the prompt. If left blank, JSON mode will be disabled.\",\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n advanced=False,\n options=OPENAI_MODEL_NAMES,\n value=OPENAI_MODEL_NAMES[0],\n ),\n StrInput(\n name=\"openai_api_base\",\n display_name=\"OpenAI API Base\",\n advanced=True,\n info=\"The base URL of the OpenAI API. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.\",\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"The OpenAI API Key to use for the OpenAI model.\",\n advanced=False,\n value=\"OPENAI_API_KEY\",\n ),\n FloatInput(name=\"temperature\", display_name=\"Temperature\", value=0.1),\n IntInput(\n name=\"seed\",\n display_name=\"Seed\",\n info=\"The seed controls the reproducibility of the job.\",\n advanced=True,\n value=1,\n ),\n ]\n\n def build_model(self) -> LanguageModel: # type: ignore[type-var]\n # self.output_schema is a list of dictionaries\n # let's convert it to a dictionary\n output_schema_dict: dict[str, str] = reduce(operator.ior, self.output_schema or {}, {})\n openai_api_key = self.api_key\n temperature = self.temperature\n model_name: str = self.model_name\n max_tokens = self.max_tokens\n model_kwargs = self.model_kwargs or {}\n openai_api_base = self.openai_api_base or \"https://api.openai.com/v1\"\n json_mode = bool(output_schema_dict) or self.json_mode\n seed = self.seed\n\n if openai_api_key:\n api_key = SecretStr(openai_api_key)\n else:\n api_key = None\n output = ChatOpenAI(\n max_tokens=max_tokens or None,\n model_kwargs=model_kwargs,\n model=model_name,\n base_url=openai_api_base,\n api_key=api_key,\n temperature=temperature if temperature is not None else 0.1,\n seed=seed,\n )\n if json_mode:\n if output_schema_dict:\n output = output.with_structured_output(schema=output_schema_dict, method=\"json_mode\") # type: ignore\n else:\n output = output.bind(response_format={\"type\": \"json_object\"}) # type: ignore\n\n return output # type: ignore\n\n def _get_exception_message(self, e: Exception):\n \"\"\"\n Get a message from an OpenAI exception.\n\n Args:\n exception (Exception): The exception to get the message from.\n\n Returns:\n str: The message from the exception.\n \"\"\"\n\n try:\n from openai import BadRequestError\n except ImportError:\n return\n if isinstance(e, BadRequestError):\n message = e.body.get(\"message\") # type: ignore\n if message:\n return message\n return\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_value": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "", "display_name": "Input", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "", "title_case": false, "type": "str", "_input_type": "MessageInput"}, "json_mode": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "json_mode", "value": false, "display_name": "JSON Mode", "advanced": true, "dynamic": false, "info": "If True, it will output JSON regardless of passing a schema.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}, "max_tokens": {"trace_as_metadata": true, "range_spec": {"step_type": "float", "min": 0, "max": 128000, "step": 0.1}, "list": false, "required": false, "placeholder": "", "show": true, "name": "max_tokens", "value": "", "display_name": "Max Tokens", "advanced": true, "dynamic": false, "info": "The maximum number of tokens to generate. Set to 0 for unlimited tokens.", "title_case": false, "type": "int", "_input_type": "IntInput"}, "model_kwargs": {"trace_as_input": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "model_kwargs", "value": {}, "display_name": "Model Kwargs", "advanced": true, "dynamic": false, "info": "", "title_case": false, "type": "dict", "_input_type": "DictInput"}, "model_name": {"trace_as_metadata": true, "options": ["gpt-4o-mini", "gpt-4o", "gpt-4-turbo", "gpt-4-turbo-preview", "gpt-4", "gpt-3.5-turbo", "gpt-3.5-turbo-0125"], "combobox": false, "required": false, "placeholder": "", "show": true, "name": "model_name", "value": "gpt-4o-mini", "display_name": "Model Name", "advanced": false, "dynamic": false, "info": "", "title_case": false, "type": "str", "_input_type": "DropdownInput"}, "openai_api_base": {"trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "openai_api_base", "value": "", "display_name": "OpenAI API Base", "advanced": true, "dynamic": false, "info": "The base URL of the OpenAI API. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.", "title_case": false, "type": "str", "_input_type": "StrInput"}, "output_schema": {"trace_as_input": true, "list": true, "required": false, "placeholder": "", "show": true, "name": "output_schema", "value": {}, "display_name": "Schema", "advanced": true, "dynamic": false, "info": "The schema for the Output of the model. You must pass the word JSON in the prompt. If left blank, JSON mode will be disabled.", "title_case": false, "type": "dict", "_input_type": "DictInput"}, "seed": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "seed", "value": 1, "display_name": "Seed", "advanced": true, "dynamic": false, "info": "The seed controls the reproducibility of the job.", "title_case": false, "type": "int", "_input_type": "IntInput"}, "stream": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "stream", "value": false, "display_name": "Stream", "advanced": true, "dynamic": false, "info": "Stream the response from the model. Streaming works only in Chat.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}, "system_message": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "system_message", "value": "", "display_name": "System Message", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "System message to pass to the model.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "temperature": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "temperature", "value": 0.1, "display_name": "Temperature", "advanced": false, "dynamic": false, "info": "", "title_case": false, "type": "float", "_input_type": "FloatInput"}}, "description": "Generates text using OpenAI LLMs.", "icon": "OpenAI", "base_classes": ["LanguageModel", "Message"], "display_name": "OpenAI", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "text_output", "display_name": "Text", "method": "text_response", "value": "__UNDEFINED__", "cache": true}, {"types": ["LanguageModel"], "selected": "LanguageModel", "name": "model_output", "display_name": "Language Model", "method": "build_model", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value", "system_message", "stream", "max_tokens", "model_kwargs", "json_mode", "output_schema", "model_name", "openai_api_base", "api_key", "temperature", "seed"], "beta": false, "edited": false, "lf_version": "1.0.16"}, "id": "OpenAIModel-jIsDD"}, "selected": false, "width": 384, "height": 601, "dragging": false, "positionAbsolute": {"x": 780.9626668825438, "y": 412.6529653260348}}, {"id": "Prompt-GeYWA", "type": "genericNode", "position": {"x": 184.97594568848456, "y": 697.3593402589844}, "data": {"type": "Prompt", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.base.prompts.api_utils import process_prompt_template\nfrom langflow.custom import Component\nfrom langflow.inputs.inputs import DefaultPromptField\nfrom langflow.io import Output, PromptInput\nfrom langflow.schema.message import Message\nfrom langflow.template.utils import update_template_values\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n trace_type = \"prompt\"\n name = \"Prompt\"\n\n inputs = [\n PromptInput(name=\"template\", display_name=\"Template\"),\n ]\n\n outputs = [\n Output(display_name=\"Prompt Message\", name=\"prompt\", method=\"build_prompt\"),\n ]\n\n async def build_prompt(\n self,\n ) -> Message:\n prompt = await Message.from_template_and_variables(**self._attributes)\n self.status = prompt.text\n return prompt\n\n def _update_template(self, frontend_node: dict):\n prompt_template = frontend_node[\"template\"][\"template\"][\"value\"]\n custom_fields = frontend_node[\"custom_fields\"]\n frontend_node_template = frontend_node[\"template\"]\n _ = process_prompt_template(\n template=prompt_template,\n name=\"template\",\n custom_fields=custom_fields,\n frontend_node_template=frontend_node_template,\n )\n return frontend_node\n\n def post_code_processing(self, new_frontend_node: dict, current_frontend_node: dict):\n \"\"\"\n This function is called after the code validation is done.\n \"\"\"\n frontend_node = super().post_code_processing(new_frontend_node, current_frontend_node)\n template = frontend_node[\"template\"][\"template\"][\"value\"]\n # Kept it duplicated for backwards compatibility\n _ = process_prompt_template(\n template=template,\n name=\"template\",\n custom_fields=frontend_node[\"custom_fields\"],\n frontend_node_template=frontend_node[\"template\"],\n )\n # Now that template is updated, we need to grab any values that were set in the current_frontend_node\n # and update the frontend_node with those values\n update_template_values(new_template=frontend_node, previous_template=current_frontend_node[\"template\"])\n return frontend_node\n\n def _get_fallback_input(self, **kwargs):\n return DefaultPromptField(**kwargs)\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "template": {"trace_as_input": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "template", "value": "Voc\u00ea \u00e9 um especialista em {menu} e precisa ajudar o usu\u00e1rio:\n\nusu\u00e1rio: {input}", "display_name": "Template", "advanced": false, "dynamic": false, "info": "", "title_case": false, "type": "prompt", "_input_type": "PromptInput"}, "menu": {"field_type": "str", "required": false, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "", "fileTypes": [], "file_path": "", "password": false, "name": "menu", "display_name": "menu", "advanced": false, "input_types": ["Message", "Text"], "dynamic": false, "info": "", "load_from_db": false, "title_case": false, "type": "str"}, "input": {"field_type": "str", "required": false, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "", "fileTypes": [], "file_path": "", "password": false, "name": "input", "display_name": "input", "advanced": false, "input_types": ["Message", "Text"], "dynamic": false, "info": "", "load_from_db": false, "title_case": false, "type": "str"}}, "description": "Create a prompt template with dynamic variables.", "icon": "prompts", "is_input": null, "is_output": null, "is_composition": null, "base_classes": ["Message"], "name": "", "display_name": "Prompt", "documentation": "", "custom_fields": {"template": ["menu", "input"]}, "output_types": [], "full_path": null, "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "prompt", "hidden": null, "display_name": "Prompt Message", "method": "build_prompt", "value": "__UNDEFINED__", "cache": true}], "field_order": ["template"], "beta": false, "error": null, "edited": false, "lf_version": "1.0.16"}, "id": "Prompt-GeYWA"}, "selected": true, "width": 384, "height": 500, "positionAbsolute": {"x": 184.97594568848456, "y": 697.3593402589844}, "dragging": false}, {"id": "ChatOutput-NZnif", "type": "genericNode", "position": {"x": 1253.4405770271298, "y": 606.330928929854}, "data": {"type": "ChatOutput", "node": {"template": {"_type": "Component", "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.inputs import BoolInput\nfrom langflow.io import DropdownInput, MessageTextInput, Output\nfrom langflow.memory import store_message\nfrom langflow.schema.message import Message\nfrom langflow.utils.constants import MESSAGE_SENDER_NAME_AI, MESSAGE_SENDER_USER, MESSAGE_SENDER_AI\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n name = \"ChatOutput\"\n\n inputs = [\n MessageTextInput(\n name=\"input_value\",\n display_name=\"Text\",\n info=\"Message to be passed as output.\",\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_AI,\n advanced=True,\n info=\"Type of sender.\",\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_AI,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"data_template\",\n display_name=\"Data Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def message_response(self) -> Message:\n message = Message(\n text=self.input_value,\n sender=self.sender,\n sender_name=self.sender_name,\n session_id=self.session_id,\n )\n if (\n self.session_id\n and isinstance(message, Message)\n and isinstance(message.text, str)\n and self.should_store_message\n ):\n store_message(\n message,\n flow_id=self.graph.flow_id,\n )\n self.message.value = message\n\n self.status = message\n return message\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "data_template": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "data_template", "value": "{text}", "display_name": "Data Template", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "input_value": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_value", "value": "", "display_name": "Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "Message to be passed as output.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "sender": {"trace_as_metadata": true, "options": ["Machine", "User"], "combobox": false, "required": false, "placeholder": "", "show": true, "name": "sender", "value": "Machine", "display_name": "Sender Type", "advanced": true, "dynamic": false, "info": "Type of sender.", "title_case": false, "type": "str", "_input_type": "DropdownInput"}, "sender_name": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "sender_name", "value": "AI", "display_name": "Sender Name", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "Name of the sender.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "session_id": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "session_id", "value": "", "display_name": "Session ID", "advanced": true, "input_types": ["Message"], "dynamic": false, "info": "The session ID of the chat. If empty, the current session ID parameter will be used.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}, "should_store_message": {"trace_as_metadata": true, "list": false, "required": false, "placeholder": "", "show": true, "name": "should_store_message", "value": true, "display_name": "Store Messages", "advanced": true, "dynamic": false, "info": "Store the message in the history.", "title_case": false, "type": "bool", "_input_type": "BoolInput"}}, "description": "Display a chat message in the Playground.", "icon": "ChatOutput", "base_classes": ["Message"], "display_name": "Chat Output", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "message", "display_name": "Message", "method": "message_response", "value": "__UNDEFINED__", "cache": true}], "field_order": ["input_value", "should_store_message", "sender", "sender_name", "session_id", "data_template"], "beta": false, "edited": false, "lf_version": "1.0.16"}, "id": "ChatOutput-NZnif"}, "selected": false, "width": 384, "height": 298}], "edges": [{"source": "ChatInput-dHY1B", "sourceHandle": "{\u0153dataType\u0153:\u0153ChatInput\u0153,\u0153id\u0153:\u0153ChatInput-dHY1B\u0153,\u0153name\u0153:\u0153message\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}", "target": "RouterComponent-aFHNL", "targetHandle": "{\u0153fieldName\u0153:\u0153input_text\u0153,\u0153id\u0153:\u0153RouterComponent-aFHNL\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "data": {"targetHandle": {"fieldName": "input_text", "id": "RouterComponent-aFHNL", "inputTypes": ["Message"], "type": "str"}, "sourceHandle": {"dataType": "ChatInput", "id": "ChatInput-dHY1B", "name": "message", "output_types": ["Message"]}}, "id": "reactflow__edge-ChatInput-dHY1B{\u0153dataType\u0153:\u0153ChatInput\u0153,\u0153id\u0153:\u0153ChatInput-dHY1B\u0153,\u0153name\u0153:\u0153message\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}-RouterComponent-aFHNL{\u0153fieldName\u0153:\u0153input_text\u0153,\u0153id\u0153:\u0153RouterComponent-aFHNL\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "className": ""}, {"source": "RouterComponent-aFHNL", "sourceHandle": "{\u0153dataType\u0153:\u0153RouterComponent\u0153,\u0153id\u0153:\u0153RouterComponent-aFHNL\u0153,\u0153name\u0153:\u0153route_output\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}", "target": "TextOutput-xnbOG", "targetHandle": "{\u0153fieldName\u0153:\u0153input_value\u0153,\u0153id\u0153:\u0153TextOutput-xnbOG\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "data": {"targetHandle": {"fieldName": "input_value", "id": "TextOutput-xnbOG", "inputTypes": ["Message"], "type": "str"}, "sourceHandle": {"dataType": "RouterComponent", "id": "RouterComponent-aFHNL", "name": "route_output", "output_types": ["Message"]}}, "id": "reactflow__edge-RouterComponent-aFHNL{\u0153dataType\u0153:\u0153RouterComponent\u0153,\u0153id\u0153:\u0153RouterComponent-aFHNL\u0153,\u0153name\u0153:\u0153route_output\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}-TextOutput-xnbOG{\u0153fieldName\u0153:\u0153input_value\u0153,\u0153id\u0153:\u0153TextOutput-xnbOG\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "className": ""}, {"source": "TextOutput-xnbOG", "sourceHandle": "{\u0153dataType\u0153:\u0153TextOutput\u0153,\u0153id\u0153:\u0153TextOutput-xnbOG\u0153,\u0153name\u0153:\u0153text\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}", "target": "Prompt-GeYWA", "targetHandle": "{\u0153fieldName\u0153:\u0153menu\u0153,\u0153id\u0153:\u0153Prompt-GeYWA\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153,\u0153Text\u0153],\u0153type\u0153:\u0153str\u0153}", "data": {"targetHandle": {"fieldName": "menu", "id": "Prompt-GeYWA", "inputTypes": ["Message", "Text"], "type": "str"}, "sourceHandle": {"dataType": "TextOutput", "id": "TextOutput-xnbOG", "name": "text", "output_types": ["Message"]}}, "id": "reactflow__edge-TextOutput-xnbOG{\u0153dataType\u0153:\u0153TextOutput\u0153,\u0153id\u0153:\u0153TextOutput-xnbOG\u0153,\u0153name\u0153:\u0153text\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}-Prompt-GeYWA{\u0153fieldName\u0153:\u0153menu\u0153,\u0153id\u0153:\u0153Prompt-GeYWA\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153,\u0153Text\u0153],\u0153type\u0153:\u0153str\u0153}", "className": ""}, {"source": "ChatInput-dHY1B", "sourceHandle": "{\u0153dataType\u0153:\u0153ChatInput\u0153,\u0153id\u0153:\u0153ChatInput-dHY1B\u0153,\u0153name\u0153:\u0153message\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}", "target": "Prompt-GeYWA", "targetHandle": "{\u0153fieldName\u0153:\u0153input\u0153,\u0153id\u0153:\u0153Prompt-GeYWA\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153,\u0153Text\u0153],\u0153type\u0153:\u0153str\u0153}", "data": {"targetHandle": {"fieldName": "input", "id": "Prompt-GeYWA", "inputTypes": ["Message", "Text"], "type": "str"}, "sourceHandle": {"dataType": "ChatInput", "id": "ChatInput-dHY1B", "name": "message", "output_types": ["Message"]}}, "id": "reactflow__edge-ChatInput-dHY1B{\u0153dataType\u0153:\u0153ChatInput\u0153,\u0153id\u0153:\u0153ChatInput-dHY1B\u0153,\u0153name\u0153:\u0153message\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}-Prompt-GeYWA{\u0153fieldName\u0153:\u0153input\u0153,\u0153id\u0153:\u0153Prompt-GeYWA\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153,\u0153Text\u0153],\u0153type\u0153:\u0153str\u0153}", "className": ""}, {"source": "Prompt-GeYWA", "sourceHandle": "{\u0153dataType\u0153:\u0153Prompt\u0153,\u0153id\u0153:\u0153Prompt-GeYWA\u0153,\u0153name\u0153:\u0153prompt\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}", "target": "OpenAIModel-jIsDD", "targetHandle": "{\u0153fieldName\u0153:\u0153input_value\u0153,\u0153id\u0153:\u0153OpenAIModel-jIsDD\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "data": {"targetHandle": {"fieldName": "input_value", "id": "OpenAIModel-jIsDD", "inputTypes": ["Message"], "type": "str"}, "sourceHandle": {"dataType": "Prompt", "id": "Prompt-GeYWA", "name": "prompt", "output_types": ["Message"]}}, "id": "reactflow__edge-Prompt-GeYWA{\u0153dataType\u0153:\u0153Prompt\u0153,\u0153id\u0153:\u0153Prompt-GeYWA\u0153,\u0153name\u0153:\u0153prompt\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}-OpenAIModel-jIsDD{\u0153fieldName\u0153:\u0153input_value\u0153,\u0153id\u0153:\u0153OpenAIModel-jIsDD\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "className": ""}, {"source": "OpenAIModel-jIsDD", "sourceHandle": "{\u0153dataType\u0153:\u0153OpenAIModel\u0153,\u0153id\u0153:\u0153OpenAIModel-jIsDD\u0153,\u0153name\u0153:\u0153text_output\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}", "target": "ChatOutput-NZnif", "targetHandle": "{\u0153fieldName\u0153:\u0153input_value\u0153,\u0153id\u0153:\u0153ChatOutput-NZnif\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "data": {"targetHandle": {"fieldName": "input_value", "id": "ChatOutput-NZnif", "inputTypes": ["Message"], "type": "str"}, "sourceHandle": {"dataType": "OpenAIModel", "id": "OpenAIModel-jIsDD", "name": "text_output", "output_types": ["Message"]}}, "id": "reactflow__edge-OpenAIModel-jIsDD{\u0153dataType\u0153:\u0153OpenAIModel\u0153,\u0153id\u0153:\u0153OpenAIModel-jIsDD\u0153,\u0153name\u0153:\u0153text_output\u0153,\u0153output_types\u0153:[\u0153Message\u0153]}-ChatOutput-NZnif{\u0153fieldName\u0153:\u0153input_value\u0153,\u0153id\u0153:\u0153ChatOutput-NZnif\u0153,\u0153inputTypes\u0153:[\u0153Message\u0153],\u0153type\u0153:\u0153str\u0153}", "className": ""}], "viewport": {"x": 703.0104899036094, "y": -115.80651222435722, "zoom": 0.6701204504101801}}, "user_id": "5d4de74a-c7c6-45e3-a567-78ef1c3df3f3", "folder_id": "8facaf57-d395-4405-9e8a-5aa0778e5d0b"}
|
Flows e Componentes/Router.json
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"
|
|
|
|
| 1 |
+
{"description": "", "icon": null, "icon_bg_color": null, "updated_at": "2024-08-28T23:08:12+00:00", "webhook": false, "id": "99553565-ec85-4756-a86d-1cb6ca272e48", "name": "Router", "is_component": true, "endpoint_name": null, "data": {"edges": [], "nodes": [{"data": {"type": "RouterComponent", "node": {"template": {"_type": "Component", "api_key": {"load_from_db": false, "required": false, "placeholder": "", "show": true, "name": "api_key", "value": null, "display_name": "API Key", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "", "title_case": false, "password": true, "type": "str", "_input_type": "SecretStrInput"}, "code": {"type": "code", "required": true, "placeholder": "", "list": false, "show": true, "multiline": true, "value": "from langflow.custom import Component\r\nfrom langflow.io import SecretStrInput, Output, MessageTextInput\r\nfrom langflow.schema import Data\r\nfrom langflow.schema.message import Message\r\nfrom semantic_router import Route\r\nfrom semantic_router.encoders import OpenAIEncoder\r\nfrom semantic_router.layer import RouteLayer\r\n\r\nclass RouterComponent(Component):\r\n display_name = \"Router Component\"\r\n description = \"\"\r\n documentation: str = \"\"\r\n icon = \"router_component\"\r\n name = \"RouterComponent\"\r\n\r\n inputs = [\r\n SecretStrInput(name=\"api_key\", display_name=\"API Key\"),\r\n MessageTextInput(\r\n name=\"input_text\",\r\n display_name=\"Input Text\",\r\n info=\"The primary text input for the operation.\",\r\n )\r\n \r\n ]\r\n\r\n outputs = [\r\n Output(display_name=\"Route\", name=\"route_output\", method=\"build_route\"),\r\n ]\r\n \r\n # Definindo as rotas\r\n suporte_tecnico = Route(\r\n name=\"Suporte T\u00e9cnico\",\r\n utterances=[\r\n \"problemas com internet\",\r\n \"reiniciar roteador\",\r\n \"problemas com Wi-Fi\",\r\n \"conex\u00e3o lenta\",\r\n \"sem conex\u00e3o\",\r\n \"roteador piscando\",\r\n \"cabo desconectado\",\r\n \"internet cai\",\r\n \"n\u00e3o consegue conectar\",\r\n \"senha do Wi-Fi\",\r\n \"rede n\u00e3o aparece\",\r\n \"sinal fraco\",\r\n \"problemas com IPv6\",\r\n \"problemas com VPN\",\r\n \"DNS n\u00e3o responde\"\r\n ]\r\n )\r\n \r\n financeiro = Route(\r\n name=\"Financeiro\",\r\n utterances=[\r\n \"consultar fatura\",\r\n \"segunda via\",\r\n \"verificar pagamento\",\r\n \"fatura atrasada\",\r\n \"negociar d\u00edvida\",\r\n \"parcelamento\",\r\n \"data de vencimento\",\r\n \"n\u00e3o recebi a fatura\",\r\n \"valor da fatura\",\r\n \"pagamento duplicado\",\r\n \"extrato detalhado\",\r\n \"fatura digital\",\r\n \"alterar forma de pagamento\",\r\n \"cancelar d\u00e9bito autom\u00e1tico\",\r\n \"mudar dia de vencimento\"\r\n ]\r\n )\r\n \r\n planos_servicos = Route(\r\n name=\"Planos e Servi\u00e7os\",\r\n utterances=[\r\n \"informa\u00e7\u00f5es sobre planos\",\r\n \"mudan\u00e7a de plano\",\r\n \"novos servi\u00e7os\",\r\n \"upgrade de plano\",\r\n \"downgrade de plano\",\r\n \"comparar planos\",\r\n \"inclus\u00e3o de servi\u00e7o\",\r\n \"exclus\u00e3o de servi\u00e7o\",\r\n \"promo\u00e7\u00f5es\",\r\n \"alterar velocidade\",\r\n \"detalhes do plano\",\r\n \"validade da promo\u00e7\u00e3o\",\r\n \"alterar franquia de dados\",\r\n \"adicionar canais\",\r\n \"cancelar plano\"\r\n ]\r\n )\r\n\r\n cadastro = Route(\r\n name=\"Cadastro\",\r\n utterances=[\r\n \"atualiza\u00e7\u00e3o de dados cadastrais\",\r\n \"verifica\u00e7\u00e3o de informa\u00e7\u00f5es\",\r\n \"alterar endere\u00e7o\",\r\n \"alterar telefone\",\r\n \"alterar email\",\r\n \"incluir dependente\",\r\n \"excluir dependente\",\r\n \"atualizar documento\",\r\n \"cadastrar biometria\",\r\n \"ativar reconhecimento facial\",\r\n \"alterar senha\",\r\n \"recuperar senha\",\r\n \"desbloquear conta\",\r\n \"ativar conta\",\r\n \"excluir conta\"\r\n ]\r\n )\r\n \r\n atendimento_geral = Route(\r\n name=\"Atendimento Geral\",\r\n utterances=[\r\n \"outras solicita\u00e7\u00f5es\",\r\n \"atendimento presencial\",\r\n \"agendar visita t\u00e9cnica\",\r\n \"reclama\u00e7\u00f5es\",\r\n \"elogios\",\r\n \"sugest\u00f5es\",\r\n \"falar com atendente\",\r\n \"hor\u00e1rio de atendimento\",\r\n \"endere\u00e7o da loja\",\r\n \"perguntas frequentes\",\r\n \"suporte em redes sociais\",\r\n \"solicitar contato\",\r\n \"enviar email\",\r\n \"chat online\",\r\n \"acessar \u00e1rea do cliente\"\r\n ]\r\n )\r\n \r\n routes = [suporte_tecnico, financeiro, planos_servicos, cadastro, atendimento_geral]\r\n encoder = OpenAIEncoder(\r\n openai_api_key=\"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\"\r\n )\r\n \r\n def build_route(self) -> Message:\r\n route_layer = RouteLayer(encoder=self.encoder, routes=self.routes)\r\n message = Message(text=route_layer(self.input_text).name)\r\n self.status = message\r\n return message\r\n", "fileTypes": [], "file_path": "", "password": false, "name": "code", "advanced": true, "dynamic": true, "info": "", "load_from_db": false, "title_case": false}, "input_text": {"trace_as_input": true, "trace_as_metadata": true, "load_from_db": false, "list": false, "required": false, "placeholder": "", "show": true, "name": "input_text", "value": "", "display_name": "Input Text", "advanced": false, "input_types": ["Message"], "dynamic": false, "info": "The primary text input for the operation.", "title_case": false, "type": "str", "_input_type": "MessageTextInput"}}, "description": "", "icon": "router_component", "base_classes": ["Message"], "display_name": "Router", "documentation": "", "custom_fields": {}, "output_types": [], "pinned": false, "conditional_paths": [], "frozen": false, "outputs": [{"types": ["Message"], "selected": "Message", "name": "route_output", "display_name": "Route", "method": "build_route", "value": "__UNDEFINED__", "cache": true}], "field_order": ["api_key", "input_text"], "beta": false, "edited": true, "lf_version": "1.0.16", "official": false}, "id": "RouterComponent-3VYer"}, "id": "RouterComponent-3VYer", "position": {"x": 0, "y": 0}, "type": "genericNode"}], "viewport": {"x": 1, "y": 1, "zoom": 1}}, "user_id": "5d4de74a-c7c6-45e3-a567-78ef1c3df3f3", "folder_id": "8facaf57-d395-4405-9e8a-5aa0778e5d0b"}
|