Merge branch 'zustand/io/migration' of personal:logspace-ai/langflow into zustand/io/migration
This commit is contained in:
commit
6a25d4b761
7 changed files with 85 additions and 41 deletions
4
.github/workflows/pre-release.yml
vendored
4
.github/workflows/pre-release.yml
vendored
|
|
@ -62,4 +62,6 @@ jobs:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
file: ./build_and_push.Dockerfile
|
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
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import warnings
|
||||||
from typing import Optional, Union
|
from typing import Optional, Union
|
||||||
|
|
||||||
from langflow.field_typing import Text
|
from langflow.field_typing import Text
|
||||||
|
from langflow.helpers.record import records_to_text
|
||||||
from langflow.interface.custom.custom_component import CustomComponent
|
from langflow.interface.custom.custom_component import CustomComponent
|
||||||
from langflow.memory import add_messages
|
from langflow.memory import add_messages
|
||||||
from langflow.schema import Record
|
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.",
|
"info": "Return the message as a record containing the sender, sender_name, and session_id.",
|
||||||
"advanced": True,
|
"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(
|
def store_message(
|
||||||
|
|
@ -76,9 +83,10 @@ class ChatComponent(CustomComponent):
|
||||||
self,
|
self,
|
||||||
sender: Optional[str] = "User",
|
sender: Optional[str] = "User",
|
||||||
sender_name: 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,
|
session_id: Optional[str] = None,
|
||||||
return_record: Optional[bool] = False,
|
return_record: Optional[bool] = False,
|
||||||
|
record_template: Optional[str] = "Text: {text}\nData: {data}",
|
||||||
) -> Union[Text, Record]:
|
) -> Union[Text, Record]:
|
||||||
input_value_record: Optional[Record] = None
|
input_value_record: Optional[Record] = None
|
||||||
if return_record:
|
if return_record:
|
||||||
|
|
@ -96,6 +104,8 @@ class ChatComponent(CustomComponent):
|
||||||
"session_id": session_id,
|
"session_id": session_id,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
elif isinstance(input_value, Record):
|
||||||
|
input_value = records_to_text(template=record_template, records=input_value)
|
||||||
if not input_value:
|
if not input_value:
|
||||||
input_value = ""
|
input_value = ""
|
||||||
if return_record and input_value_record:
|
if return_record and input_value_record:
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,28 @@
|
||||||
from typing import Optional
|
from typing import Optional, Union
|
||||||
|
|
||||||
from langflow.field_typing import Text
|
from langflow.field_typing import Text
|
||||||
|
from langflow.helpers.record import records_to_text
|
||||||
from langflow.interface.custom.custom_component import CustomComponent
|
from langflow.interface.custom.custom_component import CustomComponent
|
||||||
|
from langflow.schema.schema import Record
|
||||||
|
|
||||||
|
|
||||||
class TextComponent(CustomComponent):
|
class TextComponent(CustomComponent):
|
||||||
display_name = "Text Component"
|
display_name = "Text Component"
|
||||||
description = "Used to pass text to the next component."
|
description = "Used to pass text to the next component."
|
||||||
|
|
||||||
field_config = {
|
def build_config(self):
|
||||||
"input_value": {"display_name": "Value", "multiline": True},
|
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
|
self.status = input_value
|
||||||
if not input_value:
|
if not input_value:
|
||||||
input_value = ""
|
input_value = ""
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,21 @@ from langflow.field_typing import Text
|
||||||
|
|
||||||
class TextInput(TextComponent):
|
class TextInput(TextComponent):
|
||||||
display_name = "Text Input"
|
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:
|
def build_config(self):
|
||||||
return super().build(input_value=input_value)
|
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)
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ class ChatOutput(ChatComponent):
|
||||||
input_value: Optional[str] = None,
|
input_value: Optional[str] = None,
|
||||||
session_id: Optional[str] = None,
|
session_id: Optional[str] = None,
|
||||||
return_record: Optional[bool] = False,
|
return_record: Optional[bool] = False,
|
||||||
|
record_template: Optional[str] = "{text}",
|
||||||
) -> Union[Text, Record]:
|
) -> Union[Text, Record]:
|
||||||
return super().build(
|
return super().build(
|
||||||
sender=sender,
|
sender=sender,
|
||||||
|
|
@ -24,4 +25,5 @@ class ChatOutput(ChatComponent):
|
||||||
input_value=input_value,
|
input_value=input_value,
|
||||||
session_id=session_id,
|
session_id=session_id,
|
||||||
return_record=return_record,
|
return_record=return_record,
|
||||||
|
record_template=record_template,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,15 @@ class TextOutput(TextComponent):
|
||||||
display_name = "Text Output"
|
display_name = "Text Output"
|
||||||
description = "Used to send a text output."
|
description = "Used to send a text output."
|
||||||
|
|
||||||
field_config = {
|
def build_config(self):
|
||||||
"input_value": {"display_name": "Value"},
|
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:
|
def build(self, input_value: Optional[Text] = "", record_template: str = "{text}") -> Text:
|
||||||
return super().build(input_value=input_value)
|
return super().build(input_value=input_value, record_template=record_template)
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import ShadTooltip from "../../../../components/ShadTooltipComponent";
|
||||||
import IconComponent from "../../../../components/genericIconComponent";
|
import IconComponent from "../../../../components/genericIconComponent";
|
||||||
import { Input } from "../../../../components/ui/input";
|
import { Input } from "../../../../components/ui/input";
|
||||||
import { Separator } from "../../../../components/ui/separator";
|
import { Separator } from "../../../../components/ui/separator";
|
||||||
import { PRIORITY_SIDEBAR_ORDER } from "../../../../constants/constants";
|
|
||||||
import ExportModal from "../../../../modals/exportModal";
|
import ExportModal from "../../../../modals/exportModal";
|
||||||
import ShareModal from "../../../../modals/shareModal";
|
import ShareModal from "../../../../modals/shareModal";
|
||||||
import useAlertStore from "../../../../stores/alertStore";
|
import useAlertStore from "../../../../stores/alertStore";
|
||||||
|
|
@ -282,32 +281,7 @@ export default function ExtraSidebar(): JSX.Element {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{index === PRIORITY_SIDEBAR_ORDER.length - 2 && (
|
|
||||||
<>
|
|
||||||
<a
|
|
||||||
target={"_blank"}
|
|
||||||
href="https://langflow.store"
|
|
||||||
className="components-disclosure-arrangement"
|
|
||||||
>
|
|
||||||
<div className="flex gap-4">
|
|
||||||
{/* BUG ON THIS ICON */}
|
|
||||||
<SparklesIcon
|
|
||||||
strokeWidth={1.5}
|
|
||||||
className="w-[22px] text-primary"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<span className="components-disclosure-title">
|
|
||||||
Discover More
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div className="components-disclosure-div">
|
|
||||||
<div>
|
|
||||||
<LinkIcon className="h-4 w-4 text-foreground" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
<DisclosureComponent
|
<DisclosureComponent
|
||||||
openDisc={
|
openDisc={
|
||||||
getFilterEdge.length !== 0 || search.length !== 0
|
getFilterEdge.length !== 0 || search.length !== 0
|
||||||
|
|
@ -368,6 +342,32 @@ export default function ExtraSidebar(): JSX.Element {
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</DisclosureComponent>
|
</DisclosureComponent>
|
||||||
|
{index === Object.keys(dataFilter).length - 1 && (
|
||||||
|
<>
|
||||||
|
<a
|
||||||
|
target={"_blank"}
|
||||||
|
href="https://langflow.store"
|
||||||
|
className="components-disclosure-arrangement"
|
||||||
|
>
|
||||||
|
<div className="flex gap-4">
|
||||||
|
{/* BUG ON THIS ICON */}
|
||||||
|
<SparklesIcon
|
||||||
|
strokeWidth={1.5}
|
||||||
|
className="w-[22px] text-primary"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<span className="components-disclosure-title">
|
||||||
|
Discover More
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div className="components-disclosure-div">
|
||||||
|
<div>
|
||||||
|
<LinkIcon className="h-4 w-4 text-foreground" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<div key={index}></div>
|
<div key={index}></div>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue