From bb7d26f0cfdca4e55a79a052fc8b32d2437dd400 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Fri, 29 Mar 2024 16:16:11 -0300 Subject: [PATCH 1/6] Update Docker tags in pre-release workflow --- .github/workflows/pre-release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 0c0001a08..6ca9aa67d 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -62,4 +62,6 @@ jobs: context: . push: true file: ./build_and_push.Dockerfile - tags: logspace/langflow:${{ steps.check-version.outputs.version }} + tags: | + logspace/langflow:${{ steps.check-version.outputs.version }} + logspace/langflow:latest-dev From d71ebc7ea16b81e9f19700a67632a5f95bdbdae6 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Fri, 29 Mar 2024 16:16:32 -0300 Subject: [PATCH 2/6] Add record_template parameter to ChatComponent --- src/backend/base/langflow/base/io/chat.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/backend/base/langflow/base/io/chat.py b/src/backend/base/langflow/base/io/chat.py index 2f56a0b7a..f8ac48fb1 100644 --- a/src/backend/base/langflow/base/io/chat.py +++ b/src/backend/base/langflow/base/io/chat.py @@ -2,6 +2,7 @@ import warnings from typing import Optional, Union from langflow.field_typing import Text +from langflow.helpers.record import records_to_text from langflow.interface.custom.custom_component import CustomComponent from langflow.memory import add_messages from langflow.schema import Record @@ -34,6 +35,12 @@ class ChatComponent(CustomComponent): "info": "Return the message as a record containing the sender, sender_name, and session_id.", "advanced": True, }, + "record_template": { + "display_name": "Record Template", + "multiline": True, + "info": "In case of Message being a Record, this template will be used to convert it to text.", + "advanced": True, + }, } def store_message( @@ -76,9 +83,10 @@ class ChatComponent(CustomComponent): self, sender: Optional[str] = "User", sender_name: Optional[str] = "User", - input_value: Optional[str] = None, + input_value: Optional[Union[str, Record]] = None, session_id: Optional[str] = None, return_record: Optional[bool] = False, + record_template: Optional[str] = "Text: {text}\nData: {data}", ) -> Union[Text, Record]: input_value_record: Optional[Record] = None if return_record: @@ -96,6 +104,8 @@ class ChatComponent(CustomComponent): "session_id": session_id, }, ) + elif isinstance(input_value, Record): + input_value = records_to_text(template=record_template, records=input_value) if not input_value: input_value = "" if return_record and input_value_record: From 4ad0385768d373925e1124876f6fa14878307d4e Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Fri, 29 Mar 2024 16:16:42 -0300 Subject: [PATCH 3/6] Refactor TextComponent build method to accept Record input and generate text output --- src/backend/base/langflow/base/io/text.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/backend/base/langflow/base/io/text.py b/src/backend/base/langflow/base/io/text.py index 919acf5d5..d18a1c24b 100644 --- a/src/backend/base/langflow/base/io/text.py +++ b/src/backend/base/langflow/base/io/text.py @@ -1,18 +1,28 @@ -from typing import Optional +from typing import Optional, Union from langflow.field_typing import Text +from langflow.helpers.record import records_to_text from langflow.interface.custom.custom_component import CustomComponent +from langflow.schema.schema import Record class TextComponent(CustomComponent): display_name = "Text Component" description = "Used to pass text to the next component." - field_config = { - "input_value": {"display_name": "Value", "multiline": True}, - } + def build_config(self): + return { + "input_value": {"display_name": "Value", "input_types": ["Record"]}, + "record_template": {"display_name": "Record Template", "multiline": True}, + } - def build(self, input_value: Optional[str] = "") -> Text: + def build( + self, + input_value: Optional[Union[Text, Record]] = "", + record_template: Optional[str] = "Text: {text}\nData: {data}", + ) -> Text: + if isinstance(input_value, Record): + input_value = records_to_text(template=record_template, records=input_value) self.status = input_value if not input_value: input_value = "" From 0cf2229ff1f72b4dbe55b977f342c4ad83f1003a Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Fri, 29 Mar 2024 16:19:41 -0300 Subject: [PATCH 4/6] Update TextInput and ChatOutput build methods --- .../base/langflow/components/inputs/TextInput.py | 10 +++++++--- .../base/langflow/components/outputs/ChatOutput.py | 2 ++ .../base/langflow/components/outputs/TextOutput.py | 8 ++------ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/backend/base/langflow/components/inputs/TextInput.py b/src/backend/base/langflow/components/inputs/TextInput.py index d804d1cf2..05e923a54 100644 --- a/src/backend/base/langflow/components/inputs/TextInput.py +++ b/src/backend/base/langflow/components/inputs/TextInput.py @@ -6,7 +6,11 @@ from langflow.field_typing import Text class TextInput(TextComponent): display_name = "Text Input" - description = "Capture and send text inputs." + description = "Capture Text or Record and send text inputs." - def build(self, input_value: Optional[str] = "") -> Text: - return super().build(input_value=input_value) + def build( + self, + input_value: Optional[str] = "", + record_template: Optional[str] = "{text}", + ) -> Text: + return super().build(input_value=input_value, record_template=record_template) diff --git a/src/backend/base/langflow/components/outputs/ChatOutput.py b/src/backend/base/langflow/components/outputs/ChatOutput.py index 24c850f80..8c1f3de77 100644 --- a/src/backend/base/langflow/components/outputs/ChatOutput.py +++ b/src/backend/base/langflow/components/outputs/ChatOutput.py @@ -17,6 +17,7 @@ class ChatOutput(ChatComponent): input_value: Optional[str] = None, session_id: Optional[str] = None, return_record: Optional[bool] = False, + record_template: Optional[str] = "{text}", ) -> Union[Text, Record]: return super().build( sender=sender, @@ -24,4 +25,5 @@ class ChatOutput(ChatComponent): input_value=input_value, session_id=session_id, return_record=return_record, + record_template=record_template, ) diff --git a/src/backend/base/langflow/components/outputs/TextOutput.py b/src/backend/base/langflow/components/outputs/TextOutput.py index 099c89b64..214d2f9ea 100644 --- a/src/backend/base/langflow/components/outputs/TextOutput.py +++ b/src/backend/base/langflow/components/outputs/TextOutput.py @@ -8,9 +8,5 @@ class TextOutput(TextComponent): display_name = "Text Output" description = "Used to send a text output." - field_config = { - "input_value": {"display_name": "Value"}, - } - - def build(self, input_value: Optional[Text] = "") -> Text: - return super().build(input_value=input_value) + def build(self, input_value: Optional[Text] = "", record_template: str = "{text}") -> Text: + return super().build(input_value=input_value, record_template=record_template) From 7ebbc9abaca83cf47c4ac10184c5019b83b1f4db Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Fri, 29 Mar 2024 16:27:33 -0300 Subject: [PATCH 5/6] Update build_config method in TextComponent subclasses --- src/backend/base/langflow/base/io/text.py | 2 +- .../base/langflow/components/inputs/TextInput.py | 10 ++++++++++ .../base/langflow/components/outputs/TextOutput.py | 10 ++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/backend/base/langflow/base/io/text.py b/src/backend/base/langflow/base/io/text.py index d18a1c24b..5b1a6678b 100644 --- a/src/backend/base/langflow/base/io/text.py +++ b/src/backend/base/langflow/base/io/text.py @@ -12,7 +12,7 @@ class TextComponent(CustomComponent): def build_config(self): return { - "input_value": {"display_name": "Value", "input_types": ["Record"]}, + "input_value": {"display_name": "Value", "input_types": ["Record"], "info": "Text or Record to be passed."}, "record_template": {"display_name": "Record Template", "multiline": True}, } diff --git a/src/backend/base/langflow/components/inputs/TextInput.py b/src/backend/base/langflow/components/inputs/TextInput.py index 05e923a54..6535ba447 100644 --- a/src/backend/base/langflow/components/inputs/TextInput.py +++ b/src/backend/base/langflow/components/inputs/TextInput.py @@ -8,6 +8,16 @@ class TextInput(TextComponent): display_name = "Text Input" description = "Capture Text or Record and send text inputs." + def build_config(self): + return { + "input_value": { + "display_name": "Value", + "input_types": ["Record"], + "info": "Text or Record to be passed as input.", + }, + "record_template": {"display_name": "Record Template", "multiline": True}, + } + def build( self, input_value: Optional[str] = "", diff --git a/src/backend/base/langflow/components/outputs/TextOutput.py b/src/backend/base/langflow/components/outputs/TextOutput.py index 214d2f9ea..7dfd04fa2 100644 --- a/src/backend/base/langflow/components/outputs/TextOutput.py +++ b/src/backend/base/langflow/components/outputs/TextOutput.py @@ -8,5 +8,15 @@ class TextOutput(TextComponent): display_name = "Text Output" description = "Used to send a text output." + def build_config(self): + return { + "input_value": { + "display_name": "Value", + "input_types": ["Record"], + "info": "Text or Record to be passed as output.", + }, + "record_template": {"display_name": "Record Template", "multiline": True}, + } + def build(self, input_value: Optional[Text] = "", record_template: str = "{text}") -> Text: return super().build(input_value=input_value, record_template=record_template) From 6fb332a2a2801c49434870939898f955fda80fcc Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Fri, 29 Mar 2024 16:46:15 -0300 Subject: [PATCH 6/6] Rearrange sidebar components --- .../extraSidebarComponent/index.tsx | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx index 5a64e0b3f..9e8e7a03b 100644 --- a/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx +++ b/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx @@ -5,7 +5,6 @@ import ShadTooltip from "../../../../components/ShadTooltipComponent"; import IconComponent from "../../../../components/genericIconComponent"; import { Input } from "../../../../components/ui/input"; import { Separator } from "../../../../components/ui/separator"; -import { PRIORITY_SIDEBAR_ORDER } from "../../../../constants/constants"; import ExportModal from "../../../../modals/exportModal"; import ShareModal from "../../../../modals/shareModal"; import useAlertStore from "../../../../stores/alertStore"; @@ -282,32 +281,7 @@ export default function ExtraSidebar(): JSX.Element { )} - {index === PRIORITY_SIDEBAR_ORDER.length - 2 && ( - <> - -
- {/* BUG ON THIS ICON */} - - - Discover More - -
-
-
- -
-
-
- - )} + {index === Object.keys(dataFilter).length - 1 && ( + <> + +
+ {/* BUG ON THIS ICON */} + + + + Discover More + +
+
+
+ +
+
+
+ + )} ) : (