refactor: Update default prompt input types in PromptField

This commit is contained in:
Rodrigo 2024-06-18 10:59:30 -03:00
commit cde1e6a3d2
6 changed files with 18 additions and 108 deletions

View file

@ -1,92 +0,0 @@
from langflow.custom import Component
from langflow.field_typing import Text
from langflow.inputs import BoolInput, DropdownInput, TextInput
from langflow.template import Output
class TextOperatorComponent(Component):
display_name = "Text Operator"
description = "Compares two text inputs based on a specified condition such as equality or inequality, with optional case sensitivity."
icon = "equal"
inputs = [
TextInput(
name="input_text",
display_name="Input Text",
info="The primary text input for the operation.",
),
TextInput(
name="match_text",
display_name="Match Text",
info="The text input to compare against.",
),
DropdownInput(
name="operator",
display_name="Operator",
options=["equals", "not equals", "contains", "starts with", "ends with"],
info="The operator to apply for comparing the texts.",
),
BoolInput(
name="case_sensitive",
display_name="Case Sensitive",
info="If true, the comparison will be case sensitive.",
value=False,
advanced=True,
),
TextInput(
name="true_output",
display_name="True Output",
info="The output to return or display when the comparison is true.",
advanced=True,
),
TextInput(
name="false_output",
display_name="False Output",
info="The output to return or display when the comparison is false.",
advanced=True,
),
]
outputs = [
Output(display_name="True Result", name="true_result", method="true_response"),
Output(display_name="False Result", name="false_result", method="false_response"),
]
def evaluate_condition(self, input_text: str, match_text: str, operator: str, case_sensitive: bool) -> bool:
if not case_sensitive:
input_text = input_text.lower()
match_text = match_text.lower()
if operator == "equals":
return input_text == match_text
elif operator == "not equals":
return input_text != match_text
elif operator == "contains":
return match_text in input_text
elif operator == "starts with":
return input_text.startswith(match_text)
elif operator == "ends with":
return input_text.endswith(match_text)
return False
def true_response(self) -> Text:
result = self.evaluate_condition(self.input_text, self.match_text, self.operator, self.case_sensitive)
if result:
self.stop("false_result")
response = self.true_output if self.true_output else self.input_text
self.status = response
return response
else:
self.stop("true_result")
return ""
def false_response(self) -> Text:
result = self.evaluate_condition(self.input_text, self.match_text, self.operator, self.case_sensitive)
if not result:
self.stop("true_result")
response = self.false_output if self.false_output else self.input_text
self.status = response
return response
else:
self.stop("false_result")
return ""

View file

@ -12,10 +12,12 @@ from .RunnableExecutor import RunnableExecComponent
from .SplitText import SplitTextComponent from .SplitText import SplitTextComponent
from .SQLExecutor import SQLExecutorComponent from .SQLExecutor import SQLExecutorComponent
from .SubFlow import SubFlowComponent from .SubFlow import SubFlowComponent
from .ConditionalRouter import ConditionalRouterComponent
__all__ = [ __all__ = [
"AgentComponent", "AgentComponent",
"ClearMessageHistoryComponent", "ClearMessageHistoryComponent",
"ConditionalRouterComponent",
"ExtractKeyFromDataComponent", "ExtractKeyFromDataComponent",
"FlowToolComponent", "FlowToolComponent",
"ListenComponent", "ListenComponent",

View file

@ -1,7 +1,7 @@
from typing import List from typing import List
from langflow.custom import Component from langflow.custom import Component
from langflow.inputs import HandleInput, TextInput from langflow.inputs import DataInput, TextInput
from langflow.schema import Data from langflow.schema import Data
from langflow.template import Output from langflow.template import Output
@ -12,11 +12,10 @@ class FilterDataComponent(Component):
icon = "filter" icon = "filter"
inputs = [ inputs = [
HandleInput( DataInput(
name="data", name="data",
display_name="Data", display_name="Data",
info="Data object to filter.", info="Data object to filter.",
input_types=["Message", "Data"],
), ),
TextInput( TextInput(
name="filter_criteria", name="filter_criteria",

View file

@ -1,11 +1,11 @@
from typing import List from typing import List
from langflow.custom import Component from langflow.custom import Component
from langflow.field_typing import Text
from langflow.inputs import DropdownInput, IntInput, TextInput from langflow.inputs import DropdownInput, IntInput, TextInput
from langflow.memory import get_messages from langflow.memory import get_messages
from langflow.schema import Data from langflow.schema import Data
from langflow.template import Output from langflow.template import Output
from langflow.schema.message import Message
class MemoryComponent(Component): class MemoryComponent(Component):
@ -52,11 +52,11 @@ class MemoryComponent(Component):
] ]
outputs = [ outputs = [
Output(display_name="Messages", name="messages", method="retrieve_messages"), Output(display_name="Message Data", name="messages", method="retrieve_messages"),
Output(display_name="Text", name="messages_text", method="retrieve_messages_as_text"), Output(display_name="Parsed", name="messages_text", method="retrieve_messages_as_text"),
] ]
def retrieve_messages(self) -> List[Data]: def retrieve_messages(self) -> Data:
sender = self.sender sender = self.sender
sender_name = self.sender_name sender_name = self.sender_name
session_id = self.session_id session_id = self.session_id
@ -76,10 +76,10 @@ class MemoryComponent(Component):
self.status = messages self.status = messages
return messages return messages
def retrieve_messages_as_text(self) -> Text: def retrieve_messages_as_text(self) -> Message:
messages = self.retrieve_messages() messages = self.retrieve_messages()
messages_text = "\n".join( messages_text = "\n".join(
[f"{message.data.get('sender_name')}: {message.data.get('text')}" for message in messages] [f"{message.data.get('sender_name')}: {message.data.get('text')}" for message in messages]
) )
self.status = messages_text self.status = messages_text
return Text(messages_text) return Message(text=messages_text)

View file

@ -1,8 +1,8 @@
from langflow.custom import Component from langflow.custom import Component
from langflow.helpers.data import data_to_text from langflow.helpers.data import data_to_text
from langflow.field_typing import Text from langflow.inputs import MultilineInput, DataInput
from langflow.inputs import MultilineInput, HandleInput
from langflow.template import Output from langflow.template import Output
from langflow.schema.message import Message
class ParseDataComponent(Component): class ParseDataComponent(Component):
@ -11,22 +11,23 @@ class ParseDataComponent(Component):
icon = "braces" icon = "braces"
inputs = [ inputs = [
HandleInput(name="data", display_name="Data", info="The data to convert to text.", input_types=["Data"]), DataInput(name="data", display_name="Data", info="The data to convert to text."),
MultilineInput( MultilineInput(
name="template", name="template",
display_name="Template", display_name="Template",
info="The template to use for formatting the data. It can contain the keys {text}, {data} or any other key in the Data.", info="The template to use for formatting the data. It can contain the keys {text}, {data} or any other key in the Data.",
value="{text}"
), ),
] ]
outputs = [ outputs = [
Output(display_name="Text", name="text", method="parse_data_to_text"), Output(display_name="Text", name="text", method="parse_data"),
] ]
def parse_data_to_text(self) -> Text: def parse_data(self) -> Message:
data = self.data if isinstance(self.data, list) else [self.data] data = self.data if isinstance(self.data, list) else [self.data]
template = self.template template = self.template
result_string = data_to_text(template, data) result_string = data_to_text(template, data)
self.status = result_string self.status = result_string
return result_string return Message(text=result_string)

View file

@ -2,7 +2,7 @@ from typing import Optional
from langflow.template.field.base import Input from langflow.template.field.base import Input
DEFAULT_PROMPT_INTUT_TYPES = ["Document", "Message", "Data", "Text"] DEFAULT_PROMPT_INTUT_TYPES = ["Message", "Text"]
class DefaultPromptField(Input): class DefaultPromptField(Input):