From 5121fb10e5b66c49cd4d96fb37d728837e7abb63 Mon Sep 17 00:00:00 2001 From: ogabrielluiz Date: Wed, 5 Jun 2024 19:01:12 -0300 Subject: [PATCH 1/4] refactor: Update output names in TextInput, TextOutput, RecordsOutput, ChatInput, and ChatOutput The output names in the TextInput, TextOutput, RecordsOutput, ChatInput, and ChatOutput components have been updated to use more descriptive names. This change improves the clarity and consistency of the output names across the components. Note: The commit message has been generated based on the provided code changes and recent commits. --- .../components/experimental/TextOperator.py | 4 ++-- .../base/langflow/components/inputs/ChatInput.py | 4 ++-- .../base/langflow/components/inputs/TextInput.py | 2 +- .../base/langflow/components/outputs/ChatOutput.py | 4 ++-- .../langflow/components/outputs/RecordsOutput.py | 2 +- .../base/langflow/components/outputs/TextOutput.py | 2 +- .../langflow/custom/custom_component/component.py | 7 ++++--- src/backend/base/langflow/template/field/base.py | 14 +++++++++++++- tests/data/component_multiple_outputs.py | 4 ++-- tests/data/component_nested_call.py | 7 ++++--- 10 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/backend/base/langflow/components/experimental/TextOperator.py b/src/backend/base/langflow/components/experimental/TextOperator.py index ac2d65941..0b9821240 100644 --- a/src/backend/base/langflow/components/experimental/TextOperator.py +++ b/src/backend/base/langflow/components/experimental/TextOperator.py @@ -43,8 +43,8 @@ class TextOperatorComponent(Component): ), ] outputs = [ - Output(name="True Result", method="result_response"), - Output(name="False Result", method="result_response"), + Output(display_name="True Result", name="true_result", method="result_response"), + Output(display_name="False Result", name="false_result", method="result_response"), ] def true_response(self) -> Union[Text, Record]: diff --git a/src/backend/base/langflow/components/inputs/ChatInput.py b/src/backend/base/langflow/components/inputs/ChatInput.py index ae08a7a20..1de364364 100644 --- a/src/backend/base/langflow/components/inputs/ChatInput.py +++ b/src/backend/base/langflow/components/inputs/ChatInput.py @@ -33,8 +33,8 @@ class ChatInput(ChatComponent): ), ] outputs = [ - Output(name="Message", method="text_response"), - Output(name="Record", method="record_response"), + Output(display_name="Message", name="message", method="text_response"), + Output(display_name="Record", name="record", method="record_response"), ] def text_response(self) -> Text: diff --git a/src/backend/base/langflow/components/inputs/TextInput.py b/src/backend/base/langflow/components/inputs/TextInput.py index 596edf0ec..7fdcbb501 100644 --- a/src/backend/base/langflow/components/inputs/TextInput.py +++ b/src/backend/base/langflow/components/inputs/TextInput.py @@ -26,7 +26,7 @@ class TextInput(TextComponent): ), ] outputs = [ - Output(name="Text", method="text_response"), + Output(display_name="Text", name="text", method="text_response"), ] def text_response(self) -> Text: diff --git a/src/backend/base/langflow/components/outputs/ChatOutput.py b/src/backend/base/langflow/components/outputs/ChatOutput.py index 064cd92f1..d1506310b 100644 --- a/src/backend/base/langflow/components/outputs/ChatOutput.py +++ b/src/backend/base/langflow/components/outputs/ChatOutput.py @@ -36,8 +36,8 @@ class ChatOutput(ChatComponent): ), ] outputs = [ - Output(name="Message", method="text_response"), - Output(name="Record", method="record_response"), + Output(display_name="Message", name="message", method="text_response"), + Output(display_name="Record", name="record", method="record_response"), ] def text_response(self) -> Text: diff --git a/src/backend/base/langflow/components/outputs/RecordsOutput.py b/src/backend/base/langflow/components/outputs/RecordsOutput.py index 7af2a0c7e..f03b0ccd6 100644 --- a/src/backend/base/langflow/components/outputs/RecordsOutput.py +++ b/src/backend/base/langflow/components/outputs/RecordsOutput.py @@ -11,7 +11,7 @@ class RecordsOutput(Component): Input(name="input_value", type=Record, display_name="Record Input"), ] outputs = [ - Output(name="Record", method="record_response"), + Output(display_name="Record", name="record", method="record_response"), ] def record_response(self) -> Record: diff --git a/src/backend/base/langflow/components/outputs/TextOutput.py b/src/backend/base/langflow/components/outputs/TextOutput.py index bc71b3a27..d4615b418 100644 --- a/src/backend/base/langflow/components/outputs/TextOutput.py +++ b/src/backend/base/langflow/components/outputs/TextOutput.py @@ -26,7 +26,7 @@ class TextOutput(TextComponent): ), ] outputs = [ - Output(name="Text", method="text_response"), + Output(display_name="Text", name="text", method="text_response"), ] def text_response(self) -> Text: diff --git a/src/backend/base/langflow/custom/custom_component/component.py b/src/backend/base/langflow/custom/custom_component/component.py index 9816fe6b0..6c88e51be 100644 --- a/src/backend/base/langflow/custom/custom_component/component.py +++ b/src/backend/base/langflow/custom/custom_component/component.py @@ -60,6 +60,8 @@ class Component(CustomComponent): def _set_outputs(self, outputs: List[dict]): self.outputs = [Output(**output) for output in outputs] + for output in self.outputs: + setattr(self, output.name, output) async def build_results(self, vertex: "Vertex"): _results = {} @@ -69,14 +71,13 @@ class Component(CustomComponent): for output in self.outputs: # Build the output if it's connected to some other vertex # or if it's not connected to any vertex - self.output = output - if not vertex.outgoing_edges or output.name in vertex.edges_source_names: + if not vertex.outgoing_edges or output.display_name in vertex.edges_source_names: method: Callable | Awaitable = getattr(self, output.method) result = method() # If the method is asynchronous, we need to await it if inspect.iscoroutinefunction(method): result = await result - _results[output.name] = result + _results[output.display_name] = result self._results = _results return _results diff --git a/src/backend/base/langflow/template/field/base.py b/src/backend/base/langflow/template/field/base.py index ff3e669bb..4e9f059fa 100644 --- a/src/backend/base/langflow/template/field/base.py +++ b/src/backend/base/langflow/template/field/base.py @@ -152,7 +152,10 @@ class Output(BaseModel): selected: Optional[str] = Field(default=None, serialization_alias="selected") """The selected output type for the field.""" - name: str = Field(default="", serialization_alias="name") + display_name: Optional[str] = Field(default=None, serialization_alias="name") + """The display name of the field.""" + + name: str = Field(default=None, serialization_alias="name") """The name of the field.""" method: Optional[str] = Field(default=None, serialization_alias="method") @@ -168,3 +171,12 @@ class Output(BaseModel): def set_selected(self): if not self.selected: self.selected = self.types[0] + + @field_validator("display_name", mode="before") + def validate_display_name(cls, v, info): + if not v: + if info.data.get("name"): + return info.data["name"] + else: + raise ValueError("If display_name is not set, name must be set") + return v diff --git a/tests/data/component_multiple_outputs.py b/tests/data/component_multiple_outputs.py index 6970ab305..5cdff8773 100644 --- a/tests/data/component_multiple_outputs.py +++ b/tests/data/component_multiple_outputs.py @@ -8,8 +8,8 @@ class MultipleOutputsComponent(Component): Input(display_name="Number", name="number", field_type=int), ] outputs = [ - Output(name="Certain Output", method="certain_output"), - Output(name="Other Output", method="other_output"), + Output(display_name="Certain Output", name="certain_output", method="certain_output"), + Output(display_name="Other Output", name="other_output", method="other_output"), ] def certain_output(self) -> str: diff --git a/tests/data/component_nested_call.py b/tests/data/component_nested_call.py index 0eef5566f..6cf64944a 100644 --- a/tests/data/component_nested_call.py +++ b/tests/data/component_nested_call.py @@ -1,6 +1,7 @@ +from random import randint + from langflow.custom import Component from langflow.template.field.base import Input, Output -from random import randint class MultipleOutputsComponent(Component): @@ -9,8 +10,8 @@ class MultipleOutputsComponent(Component): Input(display_name="Number", name="number", field_type=int), ] outputs = [ - Output(name="Certain Output", method="certain_output"), - Output(name="Other Output", method="other_output"), + Output(display_name="Certain Output", name="certain_output", method="certain_output"), + Output(display_name="Other Output", name="other_output", method="other_output"), ] def certain_output(self) -> int: From 24b41eb59d8cd5034cc9e0224014978de63164a6 Mon Sep 17 00:00:00 2001 From: ogabrielluiz Date: Wed, 5 Jun 2024 19:01:21 -0300 Subject: [PATCH 2/4] update examples --- .../Basic Prompting (Hello, world!).json | 18 +++++++----- .../Langflow Blog Writter.json | 10 +++++-- .../Langflow Document QA.json | 18 +++++++----- .../Langflow Memory Conversation.json | 19 +++++++----- .../Langflow Prompt Chaining.json | 24 ++++++++------- .../VectorStore-RAG-Flows.json | 29 ++++++++++++------- 6 files changed, 71 insertions(+), 47 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 8b75ec3c9..4a485b9ca 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 @@ -114,6 +114,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -402,6 +403,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -438,7 +440,7 @@ "list": false, "show": true, "multiline": true, - "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(name=\"Message\", method=\"text_response\"),\n Output(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 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", "fileTypes": [], "file_path": "", "password": false, @@ -597,7 +599,7 @@ "Text" ], "selected": "Text", - "name": "Message", + "name": "message", "method": "text_response" }, { @@ -605,7 +607,7 @@ "Record" ], "selected": "Record", - "name": "Record", + "name": "record", "method": "record_response" } ] @@ -639,7 +641,7 @@ "list": false, "show": true, "multiline": true, - "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(name=\"Message\", method=\"text_response\"),\n Output(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 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", "fileTypes": [], "file_path": "", "password": false, @@ -773,7 +775,7 @@ "Text" ], "selected": "Text", - "name": "Message", + "name": "message", "method": "text_response" }, { @@ -781,7 +783,7 @@ "Record" ], "selected": "Record", - "name": "Record", + "name": "record", "method": "record_response" } ] @@ -859,7 +861,7 @@ }, { "source": "ChatInput-P3fgL", - "sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-P3fgL\", \"output_types\": [\"Text\"], \"name\": \"Message\"}", + "sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-P3fgL\", \"output_types\": [\"Text\"], \"name\": \"message\"}", "target": "Prompt-uxBqP", "targetHandle": "{œfieldNameœ:œuser_inputœ,œidœ:œPrompt-uxBqPœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}", "data": { @@ -880,7 +882,7 @@ "output_types": [ "Text" ], - "name": "Message" + "name": "message" } }, "style": { 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 b0969d6a2..466815700 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 @@ -168,6 +168,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -264,6 +265,7 @@ "Record" ], "selected": null, + "display_name": null, "name": "Record", "method": null } @@ -298,7 +300,7 @@ "list": false, "show": true, "multiline": true, - "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(name=\"Message\", method=\"text_response\"),\n Output(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 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", "fileTypes": [], "file_path": "", "password": false, @@ -457,7 +459,7 @@ "Text" ], "selected": "Text", - "name": "Message", + "name": "message", "method": "text_response" }, { @@ -465,7 +467,7 @@ "Record" ], "selected": "Record", - "name": "Record", + "name": "record", "method": "record_response" } ] @@ -746,6 +748,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -840,6 +843,7 @@ "Record" ], "selected": null, + "display_name": null, "name": "Record", "method": null } 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 0ac16f7f3..dfcfc0144 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 @@ -141,6 +141,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -296,7 +297,7 @@ "list": false, "show": true, "multiline": true, - "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(name=\"Message\", method=\"text_response\"),\n Output(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 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", "fileTypes": [], "file_path": "", "password": false, @@ -430,7 +431,7 @@ "Text" ], "selected": "Text", - "name": "Message", + "name": "message", "method": "text_response" }, { @@ -438,7 +439,7 @@ "Record" ], "selected": "Record", - "name": "Record", + "name": "record", "method": "record_response" } ] @@ -472,7 +473,7 @@ "list": false, "show": true, "multiline": true, - "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(name=\"Message\", method=\"text_response\"),\n Output(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 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", "fileTypes": [], "file_path": "", "password": false, @@ -630,7 +631,7 @@ "Text" ], "selected": "Text", - "name": "Message", + "name": "message", "method": "text_response" }, { @@ -638,7 +639,7 @@ "Record" ], "selected": "Record", - "name": "Record", + "name": "record", "method": "record_response" } ] @@ -924,6 +925,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -944,7 +946,7 @@ "edges": [ { "source": "ChatInput-MsSJ9", - "sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-MsSJ9\", \"output_types\": [\"Text\"], \"name\": \"Message\"}", + "sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-MsSJ9\", \"output_types\": [\"Text\"], \"name\": \"message\"}", "target": "Prompt-tHwPf", "targetHandle": "{œfieldNameœ:œQuestionœ,œidœ:œPrompt-tHwPfœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}", "data": { @@ -965,7 +967,7 @@ "output_types": [ "Text" ], - "name": "Message" + "name": "message" } }, "style": { 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 4a0ba9e83..64d7eac81 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 @@ -22,7 +22,7 @@ "list": false, "show": true, "multiline": true, - "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(name=\"Message\", method=\"text_response\"),\n Output(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 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", "fileTypes": [], "file_path": "", "password": false, @@ -156,7 +156,7 @@ "Text" ], "selected": "Text", - "name": "Message", + "name": "message", "method": "text_response" }, { @@ -164,7 +164,7 @@ "Record" ], "selected": "Record", - "name": "Record", + "name": "record", "method": "record_response" } ] @@ -198,7 +198,7 @@ "list": false, "show": true, "multiline": true, - "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(name=\"Message\", method=\"text_response\"),\n Output(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 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", "fileTypes": [], "file_path": "", "password": false, @@ -356,7 +356,7 @@ "Text" ], "selected": "Text", - "name": "Message", + "name": "message", "method": "text_response" }, { @@ -364,7 +364,7 @@ "Record" ], "selected": "Record", - "name": "Record", + "name": "record", "method": "record_response" } ] @@ -578,6 +578,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -735,6 +736,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -1023,6 +1025,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -1184,7 +1187,7 @@ }, { "source": "ChatInput-t7F8v", - "sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-t7F8v\", \"output_types\": [\"Text\"], \"name\": \"Message\"}", + "sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-t7F8v\", \"output_types\": [\"Text\"], \"name\": \"message\"}", "target": "Prompt-ODkUx", "targetHandle": "{œfieldNameœ:œuser_messageœ,œidœ:œPrompt-ODkUxœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}", "data": { @@ -1205,7 +1208,7 @@ "output_types": [ "Text" ], - "name": "Message" + "name": "message" } }, "style": { 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 53d770806..fdb53e2bf 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 @@ -114,6 +114,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -244,6 +245,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -276,7 +278,7 @@ "list": false, "show": true, "multiline": true, - "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(name=\"Message\", method=\"text_response\"),\n Output(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 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", "fileTypes": [], "file_path": "", "password": false, @@ -435,7 +437,7 @@ "Text" ], "selected": "Text", - "name": "Message", + "name": "message", "method": "text_response" }, { @@ -443,7 +445,7 @@ "Record" ], "selected": "Record", - "name": "Record", + "name": "record", "method": "record_response" } ] @@ -473,7 +475,7 @@ "list": false, "show": true, "multiline": true, - "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(name=\"Message\", method=\"text_response\"),\n Output(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 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", "fileTypes": [], "file_path": "", "password": false, @@ -632,7 +634,7 @@ "Text" ], "selected": "Text", - "name": "Message", + "name": "message", "method": "text_response" }, { @@ -640,7 +642,7 @@ "Record" ], "selected": "Record", - "name": "Record", + "name": "record", "method": "record_response" } ] @@ -669,7 +671,7 @@ "list": false, "show": true, "multiline": true, - "value": "from langflow.base.io.text import TextComponent\nfrom langflow.field_typing import Text\nfrom langflow.template import Input, Output\n\n\nclass TextInput(TextComponent):\n display_name = \"Text Input\"\n description = \"Get text inputs from the Playground.\"\n icon = \"type\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Value\",\n info=\"Text or Record to be passed as input.\",\n input_types=[\"Record\", \"Text\"],\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n multiline=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n advanced=True,\n ),\n ]\n outputs = [\n Output(name=\"Text\", method=\"text_response\"),\n ]\n\n def text_response(self) -> Text:\n return self.build(input_value=self.input_value, record_template=self.record_template)\n", + "value": "from langflow.base.io.text import TextComponent\nfrom langflow.field_typing import Text\nfrom langflow.template import Input, Output\n\n\nclass TextInput(TextComponent):\n display_name = \"Text Input\"\n description = \"Get text inputs from the Playground.\"\n icon = \"type\"\n\n inputs = [\n Input(\n name=\"input_value\",\n type=str,\n display_name=\"Value\",\n info=\"Text or Record to be passed as input.\",\n input_types=[\"Record\", \"Text\"],\n ),\n Input(\n name=\"record_template\",\n type=str,\n display_name=\"Record Template\",\n multiline=True,\n info=\"Template to convert Record to Text. If left empty, it will be dynamically set to the Record's text key.\",\n advanced=True,\n ),\n ]\n outputs = [\n Output(display_name=\"Text\", name=\"text\", method=\"text_response\"),\n ]\n\n def text_response(self) -> Text:\n return self.build(input_value=self.input_value, record_template=self.record_template)\n", "fileTypes": [], "file_path": "", "password": false, @@ -753,7 +755,7 @@ "Text" ], "selected": "Text", - "name": "Text", + "name": "text", "method": "text_response" } ] @@ -1147,6 +1149,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -1541,6 +1544,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -1561,7 +1565,7 @@ "edges": [ { "source": "TextInput-sptaH", - "sourceHandle": "{\"dataType\": \"TextInput\", \"id\": \"TextInput-sptaH\", \"output_types\": [\"Text\"], \"name\": \"Text\"}", + "sourceHandle": "{\"dataType\": \"TextInput\", \"id\": \"TextInput-sptaH\", \"output_types\": [\"Text\"], \"name\": \"text\"}", "target": "Prompt-amqBu", "targetHandle": "{œfieldNameœ:œdocumentœ,œidœ:œPrompt-amqBuœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}", "data": { @@ -1582,7 +1586,7 @@ "output_types": [ "Text" ], - "name": "Text" + "name": "text" } }, "style": { 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 dd85f47fd..baec89cae 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 @@ -20,7 +20,7 @@ "list": false, "show": true, "multiline": true, - "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(name=\"Message\", method=\"text_response\"),\n Output(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 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", "fileTypes": [], "file_path": "", "password": false, @@ -154,7 +154,7 @@ "Text" ], "selected": "Text", - "name": "Message", + "name": "message", "method": "text_response" }, { @@ -162,7 +162,7 @@ "Record" ], "selected": "Record", - "name": "Record", + "name": "record", "method": "record_response" } ] @@ -819,6 +819,7 @@ "Embeddings" ], "selected": null, + "display_name": null, "name": "Embeddings", "method": null } @@ -1101,6 +1102,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -1256,6 +1258,7 @@ "Text" ], "selected": null, + "display_name": null, "name": "Text", "method": null } @@ -1292,7 +1295,7 @@ "list": false, "show": true, "multiline": true, - "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(name=\"Message\", method=\"text_response\"),\n Output(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 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", "fileTypes": [], "file_path": "", "password": false, @@ -1451,7 +1454,7 @@ "Text" ], "selected": "Text", - "name": "Message", + "name": "message", "method": "text_response" }, { @@ -1459,7 +1462,7 @@ "Record" ], "selected": "Record", - "name": "Record", + "name": "record", "method": "record_response" } ] @@ -1587,6 +1590,7 @@ "Record" ], "selected": null, + "display_name": null, "name": "Record", "method": null } @@ -1743,6 +1747,7 @@ "Record" ], "selected": null, + "display_name": null, "name": "Record", "method": null } @@ -2206,6 +2211,7 @@ "Record" ], "selected": null, + "display_name": null, "name": "Record", "method": null } @@ -2619,6 +2625,7 @@ "VectorStore" ], "selected": null, + "display_name": null, "name": "VectorStore", "method": null }, @@ -2627,6 +2634,7 @@ "BaseRetriever" ], "selected": null, + "display_name": null, "name": "BaseRetriever", "method": null } @@ -3172,6 +3180,7 @@ "Embeddings" ], "selected": null, + "display_name": null, "name": "Embeddings", "method": null } @@ -3226,7 +3235,7 @@ { "source": "ChatInput-yxMKE", "target": "Prompt-xeI6K", - "sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-yxMKE\", \"output_types\": [\"Text\"], \"name\": \"Message\"}", + "sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-yxMKE\", \"output_types\": [\"Text\"], \"name\": \"message\"}", "targetHandle": "{œfieldNameœ:œquestionœ,œidœ:œPrompt-xeI6Kœ,œinputTypesœ:[œDocumentœ,œBaseOutputParserœ,œRecordœ,œTextœ],œtypeœ:œstrœ}", "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œ}", "data": { @@ -3247,7 +3256,7 @@ "output_types": [ "Text" ], - "name": "Message" + "name": "message" } }, "style": { @@ -3376,7 +3385,7 @@ }, { "source": "ChatInput-yxMKE", - "sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-yxMKE\", \"output_types\": [\"Text\"], \"name\": \"Message\"}", + "sourceHandle": "{\"dataType\": \"ChatInput\", \"id\": \"ChatInput-yxMKE\", \"output_types\": [\"Text\"], \"name\": \"message\"}", "target": "AstraDBSearch-41nRz", "targetHandle": "{œfieldNameœ:œinput_valueœ,œidœ:œAstraDBSearch-41nRzœ,œinputTypesœ:[œTextœ],œtypeœ:œstrœ}", "data": { @@ -3394,7 +3403,7 @@ "output_types": [ "Text" ], - "name": "Message" + "name": "message" } }, "style": { From 45e2691598e51c4797f3d7cf8da786c7f514b1c9 Mon Sep 17 00:00:00 2001 From: ogabrielluiz Date: Thu, 6 Jun 2024 15:34:00 -0300 Subject: [PATCH 3/4] Refactor build_inputs method to add extra fields in ComponentFrontendNode --- .../custom/custom_component/component.py | 1 + src/backend/base/langflow/custom/utils.py | 20 +++++++++++--- .../base/langflow/template/field/base.py | 26 +++++++++++-------- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/backend/base/langflow/custom/custom_component/component.py b/src/backend/base/langflow/custom/custom_component/component.py index 6c88e51be..767f5fc7b 100644 --- a/src/backend/base/langflow/custom/custom_component/component.py +++ b/src/backend/base/langflow/custom/custom_component/component.py @@ -110,6 +110,7 @@ class Component(CustomComponent): """ # This function is similar to build_config, but it will process the inputs # and return them as a dict with keys being the Input.name and values being the Input.model_dump() + self.inputs = self.template_config.get("inputs", []) if not self.inputs: return {} build_config = {_input.name: _input.model_dump(by_alias=True, exclude_none=True) for _input in self.inputs} diff --git a/src/backend/base/langflow/custom/utils.py b/src/backend/base/langflow/custom/utils.py index 4a6ca2bd2..7b0220024 100644 --- a/src/backend/base/langflow/custom/utils.py +++ b/src/backend/base/langflow/custom/utils.py @@ -103,6 +103,8 @@ def extract_type_from_optional(field_type): Returns: str: The extracted type, or an empty string if no type was found. """ + if "optional" not in field_type.lower(): + return field_type match = re.search(r"\[(.*?)\]$", field_type) return match[1] if match else field_type @@ -249,10 +251,16 @@ def get_field_dict(field: Union[Input, dict]): return field -def run_build_inputs(custom_component: Component, user_id: Optional[Union[str, UUID]] = None): +def run_build_inputs( + frontend_node: ComponentFrontendNode, + custom_component: Component, + user_id: Optional[Union[str, UUID]] = None, +): """Run the build inputs of a custom component.""" try: - return custom_component.build_inputs(user_id=user_id) + field_config = custom_component.build_inputs(user_id=user_id) + add_extra_fields(frontend_node, field_config, field_config.values()) + return field_config except Exception as exc: logger.error(f"Error running build inputs: {exc}") raise HTTPException(status_code=500, detail=str(exc)) from exc @@ -326,14 +334,18 @@ def build_custom_component_template_from_inputs( custom_component: Component, user_id: Optional[Union[str, UUID]] = None ): # The List of Inputs fills the role of the build_config and the entrypoint_args - frontend_node = ComponentFrontendNode.from_inputs(**custom_component.template_config) + field_config = custom_component.template_config + frontend_node = ComponentFrontendNode.from_inputs(**field_config) field_config = run_build_inputs( - custom_component, + frontend_node=frontend_node, + custom_component=custom_component, user_id=user_id, ) frontend_node = add_code_field(frontend_node, custom_component.code, field_config.get("code", {})) # But we now need to calculate the return_type of the methods in the outputs for output in frontend_node.outputs: + if output.types: + continue return_types = custom_component.get_method_return_type(output.method) return_types = [format_type(return_type) for return_type in return_types] output.add_types(return_types) diff --git a/src/backend/base/langflow/template/field/base.py b/src/backend/base/langflow/template/field/base.py index 4e9f059fa..a073f8c93 100644 --- a/src/backend/base/langflow/template/field/base.py +++ b/src/backend/base/langflow/template/field/base.py @@ -1,18 +1,16 @@ +from types import GenericAlias from typing import Any, Callable, Optional, Union from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator, model_serializer, model_validator +from langflow.field_typing import Text from langflow.field_typing.range_spec import RangeSpec -from langflow.helpers.custom import format_type class Input(BaseModel): - model_config = ConfigDict() + model_config = ConfigDict(arbitrary_types_allowed=True) - field_type: str = Field( - default="str", - serialization_alias="type", - ) + field_type: str | type | None = Field(default=str, serialization_alias="type") """The type of field this is. Default is a string.""" required: bool = False @@ -86,10 +84,10 @@ class Input(BaseModel): def serialize_model(self, handler): result = handler(self) # If the field is str, we add the Text input type - if self.field_type in ["str", "Text"]: + if self.field_type in [str, Text]: if "input_types" not in result: result["input_types"] = ["Text"] - if self.field_type == "Text": + if self.field_type == Text: result["type"] = "str" else: result["type"] = self.field_type @@ -111,15 +109,15 @@ class Input(BaseModel): # If the user passes CustomComponent as a type insteado of "CustomComponent" we need to convert it to a string # this should be done for all types # How to check if v is a type? - if isinstance(v, type): - return format_type(v) + if isinstance(v, (type, GenericAlias)): + return str(v) elif not isinstance(v, str): raise ValueError(f"type must be a string or a type, not {type(v)}") return v @field_serializer("field_type") def serialize_field_type(self, value, _info): - if value == "float" and self.range_spec is None: + if value == float and self.range_spec is None: self.range_spec = RangeSpec() return value @@ -180,3 +178,9 @@ class Output(BaseModel): else: raise ValueError("If display_name is not set, name must be set") return v + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + result = handler(self) + + return result From 5fa5237f1d538012ebd7fbded4cc5da0b2369319 Mon Sep 17 00:00:00 2001 From: ogabrielluiz Date: Thu, 6 Jun 2024 15:34:11 -0300 Subject: [PATCH 4/4] update projects --- .../Basic Prompting (Hello, world!).json | 4 ++-- .../starter_projects/Langflow Blog Writter.json | 2 +- .../starter_projects/Langflow Document QA.json | 4 ++-- .../Langflow Memory Conversation.json | 4 ++-- .../starter_projects/Langflow Prompt Chaining.json | 4 ++-- .../starter_projects/VectorStore-RAG-Flows.json | 12 ++++++------ 6 files changed, 15 insertions(+), 15 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 4a485b9ca..d190bb340 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 @@ -499,7 +499,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": "Machine", @@ -676,7 +676,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": "User", 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 466815700..058009652 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 @@ -359,7 +359,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": "", 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 dfcfc0144..c3e6eeb46 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 @@ -332,7 +332,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": "", @@ -532,7 +532,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": "", 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 64d7eac81..e861e6a76 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 @@ -57,7 +57,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": "", @@ -257,7 +257,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": "", 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 fdb53e2bf..aed8c91ce 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 @@ -337,7 +337,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": "", @@ -534,7 +534,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": "", 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 baec89cae..898ebb119 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 @@ -55,7 +55,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": "", @@ -305,7 +305,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": [], @@ -441,7 +441,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": [ @@ -1354,7 +1354,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": "", @@ -2666,7 +2666,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": [], @@ -2802,7 +2802,7 @@ "type": "str", "required": false, "placeholder": "", - "list": false, + "list": true, "show": true, "multiline": false, "value": [