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 .SQLExecutor import SQLExecutorComponent
from .SubFlow import SubFlowComponent
from .ConditionalRouter import ConditionalRouterComponent
__all__ = [
"AgentComponent",
"ClearMessageHistoryComponent",
"ConditionalRouterComponent",
"ExtractKeyFromDataComponent",
"FlowToolComponent",
"ListenComponent",

View file

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

View file

@ -1,11 +1,11 @@
from typing import List
from langflow.custom import Component
from langflow.field_typing import Text
from langflow.inputs import DropdownInput, IntInput, TextInput
from langflow.memory import get_messages
from langflow.schema import Data
from langflow.template import Output
from langflow.schema.message import Message
class MemoryComponent(Component):
@ -52,11 +52,11 @@ class MemoryComponent(Component):
]
outputs = [
Output(display_name="Messages", name="messages", method="retrieve_messages"),
Output(display_name="Text", name="messages_text", method="retrieve_messages_as_text"),
Output(display_name="Message Data", name="messages", method="retrieve_messages"),
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_name = self.sender_name
session_id = self.session_id
@ -76,10 +76,10 @@ class MemoryComponent(Component):
self.status = messages
return messages
def retrieve_messages_as_text(self) -> Text:
def retrieve_messages_as_text(self) -> Message:
messages = self.retrieve_messages()
messages_text = "\n".join(
[f"{message.data.get('sender_name')}: {message.data.get('text')}" for message in messages]
)
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.helpers.data import data_to_text
from langflow.field_typing import Text
from langflow.inputs import MultilineInput, HandleInput
from langflow.inputs import MultilineInput, DataInput
from langflow.template import Output
from langflow.schema.message import Message
class ParseDataComponent(Component):
@ -11,22 +11,23 @@ class ParseDataComponent(Component):
icon = "braces"
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(
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.",
value="{text}"
),
]
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]
template = self.template
result_string = data_to_text(template, data)
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
DEFAULT_PROMPT_INTUT_TYPES = ["Document", "Message", "Data", "Text"]
DEFAULT_PROMPT_INTUT_TYPES = ["Message", "Text"]
class DefaultPromptField(Input):