From b5ead60ac9d3592351533bc48f04b42fcdfbb588 Mon Sep 17 00:00:00 2001 From: ogabrielluiz Date: Mon, 10 Jun 2024 19:00:44 -0300 Subject: [PATCH] update projects --- .../Basic Prompting (Hello, world!).json | 115 +++++----- .../Langflow Blog Writter.json | 155 ++++--------- .../Langflow Document QA.json | 145 +++++------- .../Langflow Memory Conversation.json | 145 +++++------- .../Langflow Prompt Chaining.json | 212 ++++++++---------- .../VectorStore-RAG-Flows.json | 179 +++++++-------- 6 files changed, 402 insertions(+), 549 deletions(-) diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Basic Prompting (Hello, world!).json b/src/backend/base/langflow/initial_setup/starter_projects/Basic Prompting (Hello, world!).json index c874ee14a..4544beab4 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/Basic Prompting (Hello, world!).json +++ b/src/backend/base/langflow/initial_setup/starter_projects/Basic Prompting (Hello, world!).json @@ -36,7 +36,7 @@ "sourceHandle": { "dataType": "Prompt", "id": "Prompt-uxBqP", - "name": "Text", + "name": "prompt", "output_types": [ "Prompt" ] @@ -54,7 +54,7 @@ }, "id": "reactflow__edge-Prompt-uxBqP{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-uxBqPœ}-OpenAIModel-k39HS{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-k39HSœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", "source": "Prompt-uxBqP", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-uxBqPœ, œoutput_typesœ: [œPromptœ], œnameœ: œTextœ}", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-uxBqPœ, œoutput_typesœ: [œPromptœ], œnameœ: œpromptœ}", "style": { "stroke": "#555" }, @@ -68,7 +68,9 @@ "dataType": "ChatInput", "id": "ChatInput-P3fgL", "name": "message", - "output_types": [] + "output_types": [ + "Text" + ] }, "targetHandle": { "fieldName": "user_input", @@ -84,7 +86,7 @@ }, "id": "reactflow__edge-ChatInput-P3fgL{œbaseClassesœ:[œobjectœ,œRecordœ,œstrœ,œTextœ],œdataTypeœ:œChatInputœ,œidœ:œChatInput-P3fgLœ}-Prompt-uxBqP{œfieldNameœ:œuser_inputœ,œidœ:œPrompt-uxBqPœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}", "source": "ChatInput-P3fgL", - "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-P3fgLœ, œoutput_typesœ: [], œnameœ: œmessageœ}", + "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-P3fgLœ, œoutput_typesœ: [œTextœ], œnameœ: œmessageœ}", "style": { "stroke": "#555" }, @@ -123,22 +125,33 @@ "is_input": null, "is_output": null, "name": "", - "output_types": [ - "Prompt" - ], + "output_types": [], "outputs": [ { - "display_name": null, - "method": null, - "name": "Prompt", - "selected": null, + "cache": true, + "display_name": "Prompt", + "method": "build_prompt", + "name": "prompt", + "selected": "Prompt", "types": [ "Prompt" - ] + ], + "value": "__UNDEFINED__" + }, + { + "cache": true, + "display_name": "Text", + "method": "format_prompt", + "name": "text", + "selected": "Text", + "types": [ + "Text" + ], + "value": "__UNDEFINED__" } ], "template": { - "_type": "CustomComponent", + "_type": "Component", "code": { "advanced": true, "dynamic": true, @@ -155,7 +168,7 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.custom import CustomComponent\nfrom langflow.field_typing import Input\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(CustomComponent):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n \"code\": Input(advanced=True),\n }\n\n async def build(\n self,\n template: Prompt,\n **kwargs,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(template, kwargs)\n self.status = prompt.format_text()\n return prompt\n" + "value": "from langflow.custom import Component\nfrom langflow.field_typing import Input, Output\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n }\n\n inputs = [\n Input(name=\"template\", type=Prompt, display_name=\"Template\"),\n ]\n\n outputs = [\n Output(display_name=\"Prompt\", name=\"prompt\", method=\"build_prompt\"),\n Output(display_name=\"Text\", name=\"text\", method=\"format_prompt\"),\n ]\n\n async def format_prompt(self) -> str:\n prompt = await self.build_prompt()\n formatted_text = prompt.format_text()\n self.status = formatted_text\n return formatted_text\n\n async def build_prompt(\n self,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(self.template, self.kwargs)\n self.status = prompt.format_text()\n return prompt\n" }, "template": { "advanced": false, @@ -176,32 +189,6 @@ "required": false, "show": true, "title_case": false, - "type": "prompt", - "value": "Answer the user as if you were a pirate.\n\nUser: {user_input}\n\nAnswer: " - }, - "user_input": { - "advanced": false, - "display_name": "user_input", - "dynamic": false, - "field_type": "str", - "fileTypes": [], - "file_path": "", - "info": "", - "input_types": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], - "list": false, - "load_from_db": false, - "multiline": true, - "name": "user_input", - "password": false, - "placeholder": "", - "required": false, - "show": true, - "title_case": false, "type": "str", "value": "" } @@ -269,13 +256,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Text", "selected": null, "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" } ], "template": { @@ -544,22 +533,26 @@ "output_types": [], "outputs": [ { - "display_name": "Message", + "cache": true, + "display_name": "Text", "method": "text_response", - "name": "message", + "name": "text", "selected": "Text", "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" }, { - "display_name": "Record", - "method": "record_response", - "name": "record", - "selected": "Record", + "cache": true, + "display_name": "Message", + "method": "message_response", + "name": "message", + "selected": "Message", "types": [ - "Record" - ] + "Message" + ], + "value": "__UNDEFINED__" } ], "template": { @@ -580,11 +573,11 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n" + "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema.message import Message\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Text\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Text\", name=\"text\", method=\"text_response\"),\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Message, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\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 self.session_id and isinstance(message, (Message, str)):\n self.store_message(message)\n self.status = message\n return message\n" }, "input_value": { "advanced": false, - "display_name": "Message", + "display_name": "Text", "dynamic": false, "fileTypes": [], "file_path": "", @@ -743,22 +736,26 @@ "output_types": [], "outputs": [ { + "cache": true, "display_name": "Message", "method": "text_response", "name": "message", "selected": "Text", "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" }, { + "cache": true, "display_name": "Record", - "method": "record_response", + "method": "message_response", "name": "record", - "selected": "Record", + "selected": "Message", "types": [ - "Record" - ] + "Message" + ], + "value": "__UNDEFINED__" } ], "template": { @@ -779,11 +776,11 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Message\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"text\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n },\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n" + "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema.message import Message\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Text\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"message_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Message, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\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 self.session_id and isinstance(message, (Message, str)):\n self.store_message(message)\n self.status = message\n return message\n" }, "input_value": { "advanced": false, - "display_name": "Message", + "display_name": "Text", "dynamic": false, "fileTypes": [], "file_path": "", diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Blog Writter.json b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Blog Writter.json index 7308c2a43..fa4454aa0 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Blog Writter.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Blog Writter.json @@ -133,7 +133,7 @@ "sourceHandle": { "dataType": "Prompt", "id": "Prompt-Rse03", - "name": "Text", + "name": "prompt", "output_types": [ "Prompt" ] @@ -152,7 +152,7 @@ "id": "reactflow__edge-Prompt-Rse03{œbaseClassesœ:[œobjectœ,œTextœ,œstrœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-Rse03œ}-OpenAIModel-gi29P{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-gi29Pœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", "selected": false, "source": "Prompt-Rse03", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-Rse03œ, œoutput_typesœ: [œPromptœ], œnameœ: œTextœ}", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-Rse03œ, œoutput_typesœ: [œPromptœ], œnameœ: œpromptœ}", "style": { "stroke": "#555" }, @@ -193,22 +193,33 @@ "is_input": null, "is_output": null, "name": "", - "output_types": [ - "Prompt" - ], + "output_types": [], "outputs": [ { - "display_name": null, - "method": null, - "name": "Prompt", - "selected": null, + "cache": true, + "display_name": "Prompt", + "method": "build_prompt", + "name": "prompt", + "selected": "Prompt", "types": [ "Prompt" - ] + ], + "value": "__UNDEFINED__" + }, + { + "cache": true, + "display_name": "Text", + "method": "format_prompt", + "name": "text", + "selected": "Text", + "types": [ + "Text" + ], + "value": "__UNDEFINED__" } ], "template": { - "_type": "CustomComponent", + "_type": "Component", "code": { "advanced": true, "dynamic": true, @@ -225,85 +236,7 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.custom import CustomComponent\nfrom langflow.field_typing import Input\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(CustomComponent):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n \"code\": Input(advanced=True),\n }\n\n async def build(\n self,\n template: Prompt,\n **kwargs,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(template, kwargs)\n self.status = prompt.format_text()\n return prompt\n" - }, - "instructions": { - "advanced": false, - "display_name": "instructions", - "dynamic": false, - "field_type": "str", - "fileTypes": [], - "file_path": "", - "info": "", - "input_types": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], - "list": false, - "load_from_db": false, - "multiline": true, - "name": "instructions", - "password": false, - "placeholder": "", - "required": false, - "show": true, - "title_case": false, - "type": "str", - "value": "" - }, - "reference_1": { - "advanced": false, - "display_name": "reference_1", - "dynamic": false, - "field_type": "str", - "fileTypes": [], - "file_path": "", - "info": "", - "input_types": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], - "list": false, - "load_from_db": false, - "multiline": true, - "name": "reference_1", - "password": false, - "placeholder": "", - "required": false, - "show": true, - "title_case": false, - "type": "str", - "value": "" - }, - "reference_2": { - "advanced": false, - "display_name": "reference_2", - "dynamic": false, - "field_type": "str", - "fileTypes": [], - "file_path": "", - "info": "", - "input_types": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], - "list": false, - "load_from_db": false, - "multiline": true, - "name": "reference_2", - "password": false, - "placeholder": "", - "required": false, - "show": true, - "title_case": false, - "type": "str", - "value": "" + "value": "from langflow.custom import Component\nfrom langflow.field_typing import Input, Output\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n }\n\n inputs = [\n Input(name=\"template\", type=Prompt, display_name=\"Template\"),\n ]\n\n outputs = [\n Output(display_name=\"Prompt\", name=\"prompt\", method=\"build_prompt\"),\n Output(display_name=\"Text\", name=\"text\", method=\"format_prompt\"),\n ]\n\n async def format_prompt(self) -> str:\n prompt = await self.build_prompt()\n formatted_text = prompt.format_text()\n self.status = formatted_text\n return formatted_text\n\n async def build_prompt(\n self,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(self.template, self.kwargs)\n self.status = prompt.format_text()\n return prompt\n" }, "template": { "advanced": false, @@ -324,8 +257,8 @@ "required": false, "show": true, "title_case": false, - "type": "prompt", - "value": "Reference 1:\n\n{reference_1}\n\n---\n\nReference 2:\n\n{reference_2}\n\n---\n\n{instructions}\n\nBlog: \n\n\n" + "type": "str", + "value": "" } } }, @@ -369,13 +302,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Record", "selected": null, "types": [ "Record" - ] + ], + "value": "__UNDEFINED__" } ], "template": { @@ -470,22 +405,26 @@ "output_types": [], "outputs": [ { - "display_name": "Message", + "cache": true, + "display_name": "Text", "method": "text_response", - "name": "message", + "name": "text", "selected": "Text", "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" }, { - "display_name": "Record", - "method": "record_response", - "name": "record", - "selected": "Record", + "cache": true, + "display_name": "Message", + "method": "message_response", + "name": "message", + "selected": "Message", "types": [ - "Record" - ] + "Message" + ], + "value": "__UNDEFINED__" } ], "template": { @@ -506,11 +445,11 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n" + "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema.message import Message\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Text\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Text\", name=\"text\", method=\"text_response\"),\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Message, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\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 self.session_id and isinstance(message, (Message, str)):\n self.store_message(message)\n self.status = message\n return message\n" }, "input_value": { "advanced": false, - "display_name": "Message", + "display_name": "Text", "dynamic": false, "fileTypes": [], "file_path": "", @@ -679,13 +618,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Text", "selected": null, "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" } ], "template": { @@ -948,13 +889,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Record", "selected": null, "types": [ "Record" - ] + ], + "value": "__UNDEFINED__" } ], "template": { diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Document QA.json b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Document QA.json index d56409f3e..33fbe993b 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Document QA.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Document QA.json @@ -8,7 +8,9 @@ "dataType": "ChatInput", "id": "ChatInput-MsSJ9", "name": "message", - "output_types": [] + "output_types": [ + "Text" + ] }, "targetHandle": { "fieldName": "Question", @@ -24,7 +26,7 @@ }, "id": "reactflow__edge-ChatInput-MsSJ9{œbaseClassesœ:[œstrœ,œRecordœ,œTextœ,œobjectœ],œdataTypeœ:œChatInputœ,œidœ:œChatInput-MsSJ9œ}-Prompt-tHwPf{œfieldNameœ:œQuestionœ,œidœ:œPrompt-tHwPfœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}", "source": "ChatInput-MsSJ9", - "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-MsSJ9œ, œoutput_typesœ: [], œnameœ: œmessageœ}", + "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-MsSJ9œ, œoutput_typesœ: [œTextœ], œnameœ: œmessageœ}", "style": { "stroke": "#555" }, @@ -69,7 +71,7 @@ "sourceHandle": { "dataType": "Prompt", "id": "Prompt-tHwPf", - "name": "Text", + "name": "prompt", "output_types": [ "Prompt" ] @@ -87,7 +89,7 @@ }, "id": "reactflow__edge-Prompt-tHwPf{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-tHwPfœ}-OpenAIModel-Bt067{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-Bt067œ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", "source": "Prompt-tHwPf", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-tHwPfœ, œoutput_typesœ: [œPromptœ], œnameœ: œTextœ}", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-tHwPfœ, œoutput_typesœ: [œPromptœ], œnameœ: œpromptœ}", "style": { "stroke": "#555" }, @@ -156,74 +158,33 @@ "is_input": null, "is_output": null, "name": "", - "output_types": [ - "Prompt" - ], + "output_types": [], "outputs": [ { - "display_name": null, - "method": null, - "name": "Prompt", - "selected": null, + "cache": true, + "display_name": "Prompt", + "method": "build_prompt", + "name": "prompt", + "selected": "Prompt", "types": [ "Prompt" - ] + ], + "value": "__UNDEFINED__" + }, + { + "cache": true, + "display_name": "Text", + "method": "format_prompt", + "name": "text", + "selected": "Text", + "types": [ + "Text" + ], + "value": "__UNDEFINED__" } ], "template": { - "Document": { - "advanced": false, - "display_name": "Document", - "dynamic": false, - "field_type": "str", - "fileTypes": [], - "file_path": "", - "info": "", - "input_types": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], - "list": false, - "load_from_db": false, - "multiline": true, - "name": "Document", - "password": false, - "placeholder": "", - "required": false, - "show": true, - "title_case": false, - "type": "str", - "value": "" - }, - "Question": { - "advanced": false, - "display_name": "Question", - "dynamic": false, - "field_type": "str", - "fileTypes": [], - "file_path": "", - "info": "", - "input_types": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], - "list": false, - "load_from_db": false, - "multiline": true, - "name": "Question", - "password": false, - "placeholder": "", - "required": false, - "show": true, - "title_case": false, - "type": "str", - "value": "" - }, - "_type": "CustomComponent", + "_type": "Component", "code": { "advanced": true, "dynamic": true, @@ -240,7 +201,7 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.custom import CustomComponent\nfrom langflow.field_typing import Input\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(CustomComponent):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n \"code\": Input(advanced=True),\n }\n\n async def build(\n self,\n template: Prompt,\n **kwargs,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(template, kwargs)\n self.status = prompt.format_text()\n return prompt\n" + "value": "from langflow.custom import Component\nfrom langflow.field_typing import Input, Output\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n }\n\n inputs = [\n Input(name=\"template\", type=Prompt, display_name=\"Template\"),\n ]\n\n outputs = [\n Output(display_name=\"Prompt\", name=\"prompt\", method=\"build_prompt\"),\n Output(display_name=\"Text\", name=\"text\", method=\"format_prompt\"),\n ]\n\n async def format_prompt(self) -> str:\n prompt = await self.build_prompt()\n formatted_text = prompt.format_text()\n self.status = formatted_text\n return formatted_text\n\n async def build_prompt(\n self,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(self.template, self.kwargs)\n self.status = prompt.format_text()\n return prompt\n" }, "template": { "advanced": false, @@ -261,8 +222,8 @@ "required": false, "show": true, "title_case": false, - "type": "prompt", - "value": "Answer user's questions based on the document below:\n\n---\n\n{Document}\n\n---\n\nQuestion:\n{Question}\n\nAnswer:\n" + "type": "str", + "value": "" } } }, @@ -430,22 +391,26 @@ "output_types": [], "outputs": [ { + "cache": true, "display_name": "Message", "method": "text_response", "name": "message", "selected": "Text", "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" }, { + "cache": true, "display_name": "Record", - "method": "record_response", + "method": "message_response", "name": "record", - "selected": "Record", + "selected": "Message", "types": [ - "Record" - ] + "Message" + ], + "value": "__UNDEFINED__" } ], "template": { @@ -466,11 +431,11 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Message\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"text\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n },\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n" + "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema.message import Message\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Text\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"message_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Message, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\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 self.session_id and isinstance(message, (Message, str)):\n self.store_message(message)\n self.status = message\n return message\n" }, "input_value": { "advanced": false, - "display_name": "Message", + "display_name": "Text", "dynamic": false, "fileTypes": [], "file_path": "", @@ -605,22 +570,26 @@ "output_types": [], "outputs": [ { - "display_name": "Message", + "cache": true, + "display_name": "Text", "method": "text_response", - "name": "message", + "name": "text", "selected": "Text", "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" }, { - "display_name": "Record", - "method": "record_response", - "name": "record", - "selected": "Record", + "cache": true, + "display_name": "Message", + "method": "message_response", + "name": "message", + "selected": "Message", "types": [ - "Record" - ] + "Message" + ], + "value": "__UNDEFINED__" } ], "template": { @@ -641,11 +610,11 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n" + "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema.message import Message\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Text\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Text\", name=\"text\", method=\"text_response\"),\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Message, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\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 self.session_id and isinstance(message, (Message, str)):\n self.store_message(message)\n self.status = message\n return message\n" }, "input_value": { "advanced": false, - "display_name": "Message", + "display_name": "Text", "dynamic": false, "fileTypes": [], "file_path": "", @@ -819,13 +788,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Text", "selected": null, "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" } ], "template": { diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Memory Conversation.json b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Memory Conversation.json index 645852fe9..0f3f2d66c 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Memory Conversation.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Memory Conversation.json @@ -41,7 +41,9 @@ "dataType": "ChatInput", "id": "ChatInput-t7F8v", "name": "message", - "output_types": [] + "output_types": [ + "Text" + ] }, "targetHandle": { "fieldName": "user_message", @@ -58,7 +60,7 @@ "id": "reactflow__edge-ChatInput-t7F8v{œbaseClassesœ:[œTextœ,œobjectœ,œRecordœ,œstrœ],œdataTypeœ:œChatInputœ,œidœ:œChatInput-t7F8vœ}-Prompt-ODkUx{œfieldNameœ:œuser_messageœ,œidœ:œPrompt-ODkUxœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}", "selected": false, "source": "ChatInput-t7F8v", - "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-t7F8vœ, œoutput_typesœ: [], œnameœ: œmessageœ}", + "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-t7F8vœ, œoutput_typesœ: [œTextœ], œnameœ: œmessageœ}", "style": { "stroke": "#555" }, @@ -71,7 +73,7 @@ "sourceHandle": { "dataType": "Prompt", "id": "Prompt-ODkUx", - "name": "Text", + "name": "prompt", "output_types": [ "Prompt" ] @@ -89,7 +91,7 @@ }, "id": "reactflow__edge-Prompt-ODkUx{œbaseClassesœ:[œTextœ,œstrœ,œobjectœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-ODkUxœ}-OpenAIModel-9RykF{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-9RykFœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", "source": "Prompt-ODkUx", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-ODkUxœ, œoutput_typesœ: [œPromptœ], œnameœ: œTextœ}", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-ODkUxœ, œoutput_typesœ: [œPromptœ], œnameœ: œpromptœ}", "style": { "stroke": "#555" }, @@ -185,22 +187,26 @@ "output_types": [], "outputs": [ { + "cache": true, "display_name": "Message", "method": "text_response", "name": "message", "selected": "Text", "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" }, { + "cache": true, "display_name": "Record", - "method": "record_response", + "method": "message_response", "name": "record", - "selected": "Record", + "selected": "Message", "types": [ - "Record" - ] + "Message" + ], + "value": "__UNDEFINED__" } ], "template": { @@ -221,11 +227,11 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Message\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"text\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n },\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n" + "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema.message import Message\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Text\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"message_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Message, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\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 self.session_id and isinstance(message, (Message, str)):\n self.store_message(message)\n self.status = message\n return message\n" }, "input_value": { "advanced": false, - "display_name": "Message", + "display_name": "Text", "dynamic": false, "fileTypes": [], "file_path": "", @@ -360,22 +366,26 @@ "output_types": [], "outputs": [ { - "display_name": "Message", + "cache": true, + "display_name": "Text", "method": "text_response", - "name": "message", + "name": "text", "selected": "Text", "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" }, { - "display_name": "Record", - "method": "record_response", - "name": "record", - "selected": "Record", + "cache": true, + "display_name": "Message", + "method": "message_response", + "name": "message", + "selected": "Message", "types": [ - "Record" - ] + "Message" + ], + "value": "__UNDEFINED__" } ], "template": { @@ -396,11 +406,11 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n" + "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema.message import Message\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Text\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Text\", name=\"text\", method=\"text_response\"),\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Message, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\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 self.session_id and isinstance(message, (Message, str)):\n self.store_message(message)\n self.status = message\n return message\n" }, "input_value": { "advanced": false, - "display_name": "Message", + "display_name": "Text", "dynamic": false, "fileTypes": [], "file_path": "", @@ -563,13 +573,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Text", "selected": null, "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" } ], "template": { @@ -779,22 +791,33 @@ "is_input": null, "is_output": null, "name": "", - "output_types": [ - "Prompt" - ], + "output_types": [], "outputs": [ { - "display_name": null, - "method": null, - "name": "Prompt", - "selected": null, + "cache": true, + "display_name": "Prompt", + "method": "build_prompt", + "name": "prompt", + "selected": "Prompt", "types": [ "Prompt" - ] + ], + "value": "__UNDEFINED__" + }, + { + "cache": true, + "display_name": "Text", + "method": "format_prompt", + "name": "text", + "selected": "Text", + "types": [ + "Text" + ], + "value": "__UNDEFINED__" } ], "template": { - "_type": "CustomComponent", + "_type": "Component", "code": { "advanced": true, "dynamic": true, @@ -811,33 +834,7 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.custom import CustomComponent\nfrom langflow.field_typing import Input\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(CustomComponent):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n \"code\": Input(advanced=True),\n }\n\n async def build(\n self,\n template: Prompt,\n **kwargs,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(template, kwargs)\n self.status = prompt.format_text()\n return prompt\n" - }, - "context": { - "advanced": false, - "display_name": "context", - "dynamic": false, - "field_type": "str", - "fileTypes": [], - "file_path": "", - "info": "", - "input_types": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], - "list": false, - "load_from_db": false, - "multiline": true, - "name": "context", - "password": false, - "placeholder": "", - "required": false, - "show": true, - "title_case": false, - "type": "str", - "value": "" + "value": "from langflow.custom import Component\nfrom langflow.field_typing import Input, Output\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n }\n\n inputs = [\n Input(name=\"template\", type=Prompt, display_name=\"Template\"),\n ]\n\n outputs = [\n Output(display_name=\"Prompt\", name=\"prompt\", method=\"build_prompt\"),\n Output(display_name=\"Text\", name=\"text\", method=\"format_prompt\"),\n ]\n\n async def format_prompt(self) -> str:\n prompt = await self.build_prompt()\n formatted_text = prompt.format_text()\n self.status = formatted_text\n return formatted_text\n\n async def build_prompt(\n self,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(self.template, self.kwargs)\n self.status = prompt.format_text()\n return prompt\n" }, "template": { "advanced": false, @@ -858,32 +855,6 @@ "required": false, "show": true, "title_case": false, - "type": "prompt", - "value": "{context}\n\nUser: {user_message}\nAI: " - }, - "user_message": { - "advanced": false, - "display_name": "user_message", - "dynamic": false, - "field_type": "str", - "fileTypes": [], - "file_path": "", - "info": "", - "input_types": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], - "list": false, - "load_from_db": false, - "multiline": true, - "name": "user_message", - "password": false, - "placeholder": "", - "required": false, - "show": true, - "title_case": false, "type": "str", "value": "" } @@ -949,13 +920,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Text", "selected": null, "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" } ], "template": { diff --git a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Prompt Chaining.json b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Prompt Chaining.json index 21e3504d4..e52a6e17b 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/Langflow Prompt Chaining.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/Langflow Prompt Chaining.json @@ -8,7 +8,9 @@ "dataType": "TextInput", "id": "TextInput-sptaH", "name": "text", - "output_types": [] + "output_types": [ + "Text" + ] }, "targetHandle": { "fieldName": "document", @@ -24,7 +26,7 @@ }, "id": "reactflow__edge-TextInput-sptaH{œbaseClassesœ:[œstrœ,œTextœ,œobjectœ],œdataTypeœ:œTextInputœ,œidœ:œTextInput-sptaHœ}-Prompt-amqBu{œfieldNameœ:œdocumentœ,œidœ:œPrompt-amqBuœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}", "source": "TextInput-sptaH", - "sourceHandle": "{œdataTypeœ: œTextInputœ, œidœ: œTextInput-sptaHœ, œoutput_typesœ: [], œnameœ: œtextœ}", + "sourceHandle": "{œdataTypeœ: œTextInputœ, œidœ: œTextInput-sptaHœ, œoutput_typesœ: [œTextœ], œnameœ: œtextœ}", "style": { "stroke": "#555" }, @@ -38,9 +40,7 @@ "dataType": "Prompt", "id": "Prompt-amqBu", "name": "Text", - "output_types": [ - "Prompt" - ] + "output_types": [] }, "targetHandle": { "fieldName": "input_value", @@ -54,7 +54,7 @@ }, "id": "reactflow__edge-Prompt-amqBu{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-amqBuœ}-TextOutput-2MS4a{œfieldNameœ:œinput_valueœ,œidœ:œTextOutput-2MS4aœ,œinputTypesœ:[œRecordœ,œTextœ],œtypeœ:œstrœ}", "source": "Prompt-amqBu", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-amqBuœ, œoutput_typesœ: [œPromptœ], œnameœ: œTextœ}", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-amqBuœ, œoutput_typesœ: [], œnameœ: œTextœ}", "style": { "stroke": "#555" }, @@ -67,7 +67,7 @@ "sourceHandle": { "dataType": "Prompt", "id": "Prompt-amqBu", - "name": "Text", + "name": "prompt", "output_types": [ "Prompt" ] @@ -85,7 +85,7 @@ }, "id": "reactflow__edge-Prompt-amqBu{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-amqBuœ}-OpenAIModel-uYXZJ{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-uYXZJœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", "source": "Prompt-amqBu", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-amqBuœ, œoutput_typesœ: [œPromptœ], œnameœ: œTextœ}", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-amqBuœ, œoutput_typesœ: [œPromptœ], œnameœ: œpromptœ}", "style": { "stroke": "#555" }, @@ -160,9 +160,7 @@ "dataType": "Prompt", "id": "Prompt-gTNiz", "name": "Text", - "output_types": [ - "Prompt" - ] + "output_types": [] }, "targetHandle": { "fieldName": "input_value", @@ -176,7 +174,7 @@ }, "id": "reactflow__edge-Prompt-gTNiz{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-gTNizœ}-TextOutput-MUDOR{œfieldNameœ:œinput_valueœ,œidœ:œTextOutput-MUDORœ,œinputTypesœ:[œRecordœ,œTextœ],œtypeœ:œstrœ}", "source": "Prompt-gTNiz", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-gTNizœ, œoutput_typesœ: [œPromptœ], œnameœ: œTextœ}", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-gTNizœ, œoutput_typesœ: [], œnameœ: œTextœ}", "style": { "stroke": "#555" }, @@ -189,7 +187,7 @@ "sourceHandle": { "dataType": "Prompt", "id": "Prompt-gTNiz", - "name": "Text", + "name": "prompt", "output_types": [ "Prompt" ] @@ -207,7 +205,7 @@ }, "id": "reactflow__edge-Prompt-gTNiz{œbaseClassesœ:[œobjectœ,œstrœ,œTextœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-gTNizœ}-OpenAIModel-XawYB{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-XawYBœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", "source": "Prompt-gTNiz", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-gTNizœ, œoutput_typesœ: [œPromptœ], œnameœ: œTextœ}", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-gTNizœ, œoutput_typesœ: [œPromptœ], œnameœ: œpromptœ}", "style": { "stroke": "#555" }, @@ -275,22 +273,33 @@ "is_input": null, "is_output": null, "name": "", - "output_types": [ - "Prompt" - ], + "output_types": [], "outputs": [ { - "display_name": null, - "method": null, - "name": "Prompt", - "selected": null, + "cache": true, + "display_name": "Prompt", + "method": "build_prompt", + "name": "prompt", + "selected": "Prompt", "types": [ "Prompt" - ] + ], + "value": "__UNDEFINED__" + }, + { + "cache": true, + "display_name": "Text", + "method": "format_prompt", + "name": "text", + "selected": "Text", + "types": [ + "Text" + ], + "value": "__UNDEFINED__" } ], "template": { - "_type": "CustomComponent", + "_type": "Component", "code": { "advanced": true, "dynamic": true, @@ -307,33 +316,7 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.custom import CustomComponent\nfrom langflow.field_typing import Input\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(CustomComponent):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n \"code\": Input(advanced=True),\n }\n\n async def build(\n self,\n template: Prompt,\n **kwargs,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(template, kwargs)\n self.status = prompt.format_text()\n return prompt\n" - }, - "document": { - "advanced": false, - "display_name": "document", - "dynamic": false, - "field_type": "str", - "fileTypes": [], - "file_path": "", - "info": "", - "input_types": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], - "list": false, - "load_from_db": false, - "multiline": true, - "name": "document", - "password": false, - "placeholder": "", - "required": false, - "show": true, - "title_case": false, - "type": "str", - "value": "" + "value": "from langflow.custom import Component\nfrom langflow.field_typing import Input, Output\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n }\n\n inputs = [\n Input(name=\"template\", type=Prompt, display_name=\"Template\"),\n ]\n\n outputs = [\n Output(display_name=\"Prompt\", name=\"prompt\", method=\"build_prompt\"),\n Output(display_name=\"Text\", name=\"text\", method=\"format_prompt\"),\n ]\n\n async def format_prompt(self) -> str:\n prompt = await self.build_prompt()\n formatted_text = prompt.format_text()\n self.status = formatted_text\n return formatted_text\n\n async def build_prompt(\n self,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(self.template, self.kwargs)\n self.status = prompt.format_text()\n return prompt\n" }, "template": { "advanced": false, @@ -354,8 +337,8 @@ "required": false, "show": true, "title_case": false, - "type": "prompt", - "value": "You are a helpful assistant. Given a long document, your task is to create a concise summary that captures the main points and key details. The summary should be clear, accurate, and succinct. Please provide the summary in the format below:\n####\n{document}\n####\n" + "type": "str", + "value": "" } } }, @@ -406,22 +389,33 @@ "is_input": null, "is_output": null, "name": "", - "output_types": [ - "Prompt" - ], + "output_types": [], "outputs": [ { - "display_name": null, - "method": null, - "name": "Prompt", - "selected": null, + "cache": true, + "display_name": "Prompt", + "method": "build_prompt", + "name": "prompt", + "selected": "Prompt", "types": [ "Prompt" - ] + ], + "value": "__UNDEFINED__" + }, + { + "cache": true, + "display_name": "Text", + "method": "format_prompt", + "name": "text", + "selected": "Text", + "types": [ + "Text" + ], + "value": "__UNDEFINED__" } ], "template": { - "_type": "CustomComponent", + "_type": "Component", "code": { "advanced": true, "dynamic": true, @@ -438,33 +432,7 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.custom import CustomComponent\nfrom langflow.field_typing import Input\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(CustomComponent):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n \"code\": Input(advanced=True),\n }\n\n async def build(\n self,\n template: Prompt,\n **kwargs,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(template, kwargs)\n self.status = prompt.format_text()\n return prompt\n" - }, - "summary": { - "advanced": false, - "display_name": "summary", - "dynamic": false, - "field_type": "str", - "fileTypes": [], - "file_path": "", - "info": "", - "input_types": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], - "list": false, - "load_from_db": false, - "multiline": true, - "name": "summary", - "password": false, - "placeholder": "", - "required": false, - "show": true, - "title_case": false, - "type": "str", - "value": "" + "value": "from langflow.custom import Component\nfrom langflow.field_typing import Input, Output\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n }\n\n inputs = [\n Input(name=\"template\", type=Prompt, display_name=\"Template\"),\n ]\n\n outputs = [\n Output(display_name=\"Prompt\", name=\"prompt\", method=\"build_prompt\"),\n Output(display_name=\"Text\", name=\"text\", method=\"format_prompt\"),\n ]\n\n async def format_prompt(self) -> str:\n prompt = await self.build_prompt()\n formatted_text = prompt.format_text()\n self.status = formatted_text\n return formatted_text\n\n async def build_prompt(\n self,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(self.template, self.kwargs)\n self.status = prompt.format_text()\n return prompt\n" }, "template": { "advanced": false, @@ -485,8 +453,8 @@ "required": false, "show": true, "title_case": false, - "type": "prompt", - "value": "Given a summary of an article, please create two multiple-choice questions that cover the key points and details mentioned. Ensure the questions are clear and provide three options (A, B, C), with one correct answer.\n####\n{summary}\n####" + "type": "str", + "value": "" } } }, @@ -532,22 +500,26 @@ "output_types": [], "outputs": [ { - "display_name": "Message", + "cache": true, + "display_name": "Text", "method": "text_response", - "name": "message", + "name": "text", "selected": "Text", "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" }, { - "display_name": "Record", - "method": "record_response", - "name": "record", - "selected": "Record", + "cache": true, + "display_name": "Message", + "method": "message_response", + "name": "message", + "selected": "Message", "types": [ - "Record" - ] + "Message" + ], + "value": "__UNDEFINED__" } ], "template": { @@ -568,11 +540,11 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n" + "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema.message import Message\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Text\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Text\", name=\"text\", method=\"text_response\"),\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Message, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\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 self.session_id and isinstance(message, (Message, str)):\n self.store_message(message)\n self.status = message\n return message\n" }, "input_value": { "advanced": false, - "display_name": "Message", + "display_name": "Text", "dynamic": false, "fileTypes": [], "file_path": "", @@ -728,22 +700,26 @@ "output_types": [], "outputs": [ { - "display_name": "Message", + "cache": true, + "display_name": "Text", "method": "text_response", - "name": "message", + "name": "text", "selected": "Text", "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" }, { - "display_name": "Record", - "method": "record_response", - "name": "record", - "selected": "Record", + "cache": true, + "display_name": "Message", + "method": "message_response", + "name": "message", + "selected": "Message", "types": [ - "Record" - ] + "Message" + ], + "value": "__UNDEFINED__" } ], "template": { @@ -764,11 +740,11 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n" + "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema.message import Message\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Text\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Text\", name=\"text\", method=\"text_response\"),\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Message, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\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 self.session_id and isinstance(message, (Message, str)):\n self.store_message(message)\n self.status = message\n return message\n" }, "input_value": { "advanced": false, - "display_name": "Message", + "display_name": "Text", "dynamic": false, "fileTypes": [], "file_path": "", @@ -918,13 +894,15 @@ "output_types": [], "outputs": [ { + "cache": true, "display_name": "Text", "method": "text_response", "name": "text", "selected": "Text", "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" } ], "template": { @@ -1162,13 +1140,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Text", "selected": null, "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" } ], "template": { @@ -1559,13 +1539,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Text", "selected": null, "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" } ], "template": { diff --git a/src/backend/base/langflow/initial_setup/starter_projects/VectorStore-RAG-Flows.json b/src/backend/base/langflow/initial_setup/starter_projects/VectorStore-RAG-Flows.json index 67af1468b..655a76e33 100644 --- a/src/backend/base/langflow/initial_setup/starter_projects/VectorStore-RAG-Flows.json +++ b/src/backend/base/langflow/initial_setup/starter_projects/VectorStore-RAG-Flows.json @@ -41,7 +41,9 @@ "dataType": "ChatInput", "id": "ChatInput-yxMKE", "name": "message", - "output_types": [] + "output_types": [ + "Text" + ] }, "targetHandle": { "fieldName": "question", @@ -58,7 +60,7 @@ "id": "reactflow__edge-ChatInput-yxMKE{œbaseClassesœ:[œTextœ,œstrœ,œobjectœ,œRecordœ],œdataTypeœ:œChatInputœ,œidœ:œChatInput-yxMKEœ}-Prompt-xeI6K{œfieldNameœ:œquestionœ,œidœ:œPrompt-xeI6Kœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}", "selected": false, "source": "ChatInput-yxMKE", - "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-yxMKEœ, œoutput_typesœ: [], œnameœ: œmessageœ}", + "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-yxMKEœ, œoutput_typesœ: [œTextœ], œnameœ: œmessageœ}", "style": { "stroke": "#555" }, @@ -71,7 +73,7 @@ "sourceHandle": { "dataType": "Prompt", "id": "Prompt-xeI6K", - "name": "Text", + "name": "prompt", "output_types": [ "Prompt" ] @@ -90,7 +92,7 @@ "id": "reactflow__edge-Prompt-xeI6K{œbaseClassesœ:[œobjectœ,œTextœ,œstrœ],œdataTypeœ:œPromptœ,œidœ:œPrompt-xeI6Kœ}-OpenAIModel-EjXlN{œfieldNameœ:œinput_valueœ,œidœ:œOpenAIModel-EjXlNœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", "selected": false, "source": "Prompt-xeI6K", - "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-xeI6Kœ, œoutput_typesœ: [œPromptœ], œnameœ: œTextœ}", + "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-xeI6Kœ, œoutput_typesœ: [œPromptœ], œnameœ: œpromptœ}", "style": { "stroke": "#555" }, @@ -192,7 +194,9 @@ "dataType": "ChatInput", "id": "ChatInput-yxMKE", "name": "message", - "output_types": [] + "output_types": [ + "Text" + ] }, "targetHandle": { "fieldName": "input_value", @@ -205,7 +209,7 @@ }, "id": "reactflow__edge-ChatInput-yxMKE{œbaseClassesœ:[œTextœ,œstrœ,œobjectœ,œRecordœ],œdataTypeœ:œChatInputœ,œidœ:œChatInput-yxMKEœ}-AstraDBSearch-41nRz{œfieldNameœ:œinput_valueœ,œidœ:œAstraDBSearch-41nRzœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", "source": "ChatInput-yxMKE", - "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-yxMKEœ, œoutput_typesœ: [], œnameœ: œmessageœ}", + "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-yxMKEœ, œoutput_typesœ: [œTextœ], œnameœ: œmessageœ}", "style": { "stroke": "#555" }, @@ -328,22 +332,26 @@ "output_types": [], "outputs": [ { + "cache": true, "display_name": "Message", "method": "text_response", "name": "message", "selected": "Text", "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" }, { + "cache": true, "display_name": "Record", - "method": "record_response", + "method": "message_response", "name": "record", - "selected": "Record", + "selected": "Message", "types": [ - "Record" - ] + "Message" + ], + "value": "__UNDEFINED__" } ], "template": { @@ -364,11 +372,11 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Message\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"text\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n },\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n" + "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema.message import Message\nfrom langflow.template import Input, Output\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n icon = \"ChatInput\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Text\",\n multiline=True,\n input_types=[],\n info=\"Message to be passed as input.\",\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"User\",\n info=\"Type of sender.\",\n advanced=True,\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"User\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"message_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Message, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\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 self.session_id and isinstance(message, (Message, str)):\n self.store_message(message)\n self.status = message\n return message\n" }, "input_value": { "advanced": false, - "display_name": "Message", + "display_name": "Text", "dynamic": false, "fileTypes": [], "file_path": "", @@ -630,13 +638,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Embeddings", "selected": null, "types": [ "Embeddings" - ] + ], + "value": "__UNDEFINED__" } ], "template": { @@ -1154,13 +1164,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Text", "selected": null, "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" } ], "template": { @@ -1431,22 +1443,33 @@ "is_input": null, "is_output": null, "name": "", - "output_types": [ - "Prompt" - ], + "output_types": [], "outputs": [ { - "display_name": null, - "method": null, - "name": "Prompt", - "selected": null, + "cache": true, + "display_name": "Prompt", + "method": "build_prompt", + "name": "prompt", + "selected": "Prompt", "types": [ "Prompt" - ] + ], + "value": "__UNDEFINED__" + }, + { + "cache": true, + "display_name": "Text", + "method": "format_prompt", + "name": "text", + "selected": "Text", + "types": [ + "Text" + ], + "value": "__UNDEFINED__" } ], "template": { - "_type": "CustomComponent", + "_type": "Component", "code": { "advanced": true, "dynamic": true, @@ -1463,59 +1486,7 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.custom import CustomComponent\nfrom langflow.field_typing import Input\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(CustomComponent):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n \"code\": Input(advanced=True),\n }\n\n async def build(\n self,\n template: Prompt,\n **kwargs,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(template, kwargs)\n self.status = prompt.format_text()\n return prompt\n" - }, - "context": { - "advanced": false, - "display_name": "context", - "dynamic": false, - "field_type": "str", - "fileTypes": [], - "file_path": "", - "info": "", - "input_types": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], - "list": false, - "load_from_db": false, - "multiline": true, - "name": "context", - "password": false, - "placeholder": "", - "required": false, - "show": true, - "title_case": false, - "type": "str", - "value": "" - }, - "question": { - "advanced": false, - "display_name": "question", - "dynamic": false, - "field_type": "str", - "fileTypes": [], - "file_path": "", - "info": "", - "input_types": [ - "Document", - "BaseOutputParser", - "Record", - "Text" - ], - "list": false, - "load_from_db": false, - "multiline": true, - "name": "question", - "password": false, - "placeholder": "", - "required": false, - "show": true, - "title_case": false, - "type": "str", - "value": "" + "value": "from langflow.custom import Component\nfrom langflow.field_typing import Input, Output\nfrom langflow.field_typing.prompt import Prompt\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"prompts\"\n\n def build_config(self):\n return {\n \"template\": Input(display_name=\"Template\"),\n }\n\n inputs = [\n Input(name=\"template\", type=Prompt, display_name=\"Template\"),\n ]\n\n outputs = [\n Output(display_name=\"Prompt\", name=\"prompt\", method=\"build_prompt\"),\n Output(display_name=\"Text\", name=\"text\", method=\"format_prompt\"),\n ]\n\n async def format_prompt(self) -> str:\n prompt = await self.build_prompt()\n formatted_text = prompt.format_text()\n self.status = formatted_text\n return formatted_text\n\n async def build_prompt(\n self,\n ) -> Prompt:\n prompt = await Prompt.from_template_and_variables(self.template, self.kwargs)\n self.status = prompt.format_text()\n return prompt\n" }, "template": { "advanced": false, @@ -1536,8 +1507,8 @@ "required": false, "show": true, "title_case": false, - "type": "prompt", - "value": "{context}\n\n---\n\nGiven the context above, answer the question as best as possible.\n\nQuestion: {question}\n\nAnswer: " + "type": "str", + "value": "" } } }, @@ -1587,22 +1558,26 @@ "output_types": [], "outputs": [ { - "display_name": "Message", + "cache": true, + "display_name": "Text", "method": "text_response", - "name": "message", + "name": "text", "selected": "Text", "types": [ "Text" - ] + ], + "value": "__UNDEFINED__" }, { - "display_name": "Record", - "method": "record_response", - "name": "record", - "selected": "Record", + "cache": true, + "display_name": "Message", + "method": "message_response", + "name": "message", + "selected": "Message", "types": [ - "Record" - ] + "Message" + ], + "value": "__UNDEFINED__" } ], "template": { @@ -1623,11 +1598,11 @@ "show": true, "title_case": false, "type": "code", - "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema import Record\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Message\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Message\", name=\"message\", method=\"text_response\"),\n Output(display_name=\"Record\", name=\"record\", method=\"record_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Record, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\n\n def record_response(self) -> Record:\n record = Record(\n data={\n \"message\": self.input_value,\n \"sender\": self.sender,\n \"sender_name\": self.sender_name,\n \"session_id\": self.session_id,\n \"template\": self.record_template or \"\",\n }\n )\n if self.session_id and isinstance(record, (Record, str)):\n self.store_message(record, self.session_id, self.sender, self.sender_name)\n return record\n" + "value": "from langflow.base.io.chat import ChatComponent\nfrom langflow.field_typing import Text\nfrom langflow.schema.message import Message\nfrom langflow.template import Input, Output\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n icon = \"ChatOutput\"\n\n inputs = [\n Input(\n name=\"input_value\", type=str, display_name=\"Text\", multiline=True, info=\"Message to be passed as output.\"\n ),\n Input(\n name=\"sender\",\n type=str,\n display_name=\"Sender Type\",\n options=[\"Machine\", \"User\"],\n value=\"Machine\",\n advanced=True,\n info=\"Type of sender.\",\n ),\n Input(name=\"sender_name\", type=str, display_name=\"Sender Name\", info=\"Name of the sender.\", value=\"AI\"),\n Input(\n name=\"session_id\", type=str, display_name=\"Session ID\", info=\"Session ID for the message.\", advanced=True\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n ),\n ]\n outputs = [\n Output(display_name=\"Text\", name=\"text\", method=\"text_response\"),\n Output(display_name=\"Message\", name=\"message\", method=\"message_response\"),\n ]\n\n def text_response(self) -> Text:\n result = self.input_value\n if self.session_id and isinstance(result, (Message, str)):\n self.store_message(result, self.session_id, self.sender, self.sender_name)\n return result\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 self.session_id and isinstance(message, (Message, str)):\n self.store_message(message)\n self.status = message\n return message\n" }, "input_value": { "advanced": false, - "display_name": "Message", + "display_name": "Text", "dynamic": false, "fileTypes": [], "file_path": "", @@ -1782,13 +1757,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Record", "selected": null, "types": [ "Record" - ] + ], + "value": "__UNDEFINED__" } ], "template": { @@ -1912,13 +1889,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Record", "selected": null, "types": [ "Record" - ] + ], + "value": "__UNDEFINED__" } ], "template": { @@ -2090,13 +2069,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Record", "selected": null, "types": [ "Record" - ] + ], + "value": "__UNDEFINED__" } ], "template": { @@ -2553,22 +2534,26 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "VectorStore", "selected": null, "types": [ "VectorStore" - ] + ], + "value": "__UNDEFINED__" }, { + "cache": true, "display_name": null, "method": null, "name": "BaseRetriever", "selected": null, "types": [ "BaseRetriever" - ] + ], + "value": "__UNDEFINED__" } ], "template": { @@ -2975,13 +2960,15 @@ ], "outputs": [ { + "cache": true, "display_name": null, "method": null, "name": "Embeddings", "selected": null, "types": [ "Embeddings" - ] + ], + "value": "__UNDEFINED__" } ], "template": {