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
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:
diff --git a/src/backend/base/langflow/base/io/text.py b/src/backend/base/langflow/base/io/text.py
index 919acf5d5..5b1a6678b 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"], "info": "Text or Record to be passed."},
+ "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 = ""
diff --git a/src/backend/base/langflow/components/inputs/TextInput.py b/src/backend/base/langflow/components/inputs/TextInput.py
index d804d1cf2..6535ba447 100644
--- a/src/backend/base/langflow/components/inputs/TextInput.py
+++ b/src/backend/base/langflow/components/inputs/TextInput.py
@@ -6,7 +6,21 @@ 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_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] = "",
+ 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..7dfd04fa2 100644
--- a/src/backend/base/langflow/components/outputs/TextOutput.py
+++ b/src/backend/base/langflow/components/outputs/TextOutput.py
@@ -8,9 +8,15 @@ class TextOutput(TextComponent):
display_name = "Text Output"
description = "Used to send a text output."
- field_config = {
- "input_value": {"display_name": "Value"},
- }
+ 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] = "") -> 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)
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 && (
- <>
-
-