From cde1e6a3d2bf7a660acab6e1eb46250fcfaf427e Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Tue, 18 Jun 2024 10:59:30 -0300 Subject: [PATCH] refactor: Update default prompt input types in PromptField --- .../components/experimental/TextOperator.py | 92 ------------------- .../components/experimental/__init__.py | 2 + .../langflow/components/helpers/FilterData.py | 5 +- .../langflow/components/helpers/Memory.py | 12 +-- .../langflow/components/helpers/ParseData.py | 13 +-- .../base/langflow/template/field/prompt.py | 2 +- 6 files changed, 18 insertions(+), 108 deletions(-) delete mode 100644 src/backend/base/langflow/components/experimental/TextOperator.py diff --git a/src/backend/base/langflow/components/experimental/TextOperator.py b/src/backend/base/langflow/components/experimental/TextOperator.py deleted file mode 100644 index 7950849d0..000000000 --- a/src/backend/base/langflow/components/experimental/TextOperator.py +++ /dev/null @@ -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 "" diff --git a/src/backend/base/langflow/components/experimental/__init__.py b/src/backend/base/langflow/components/experimental/__init__.py index 8a0f77555..550d4d6dd 100644 --- a/src/backend/base/langflow/components/experimental/__init__.py +++ b/src/backend/base/langflow/components/experimental/__init__.py @@ -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", diff --git a/src/backend/base/langflow/components/helpers/FilterData.py b/src/backend/base/langflow/components/helpers/FilterData.py index 7e457a24f..87646db98 100644 --- a/src/backend/base/langflow/components/helpers/FilterData.py +++ b/src/backend/base/langflow/components/helpers/FilterData.py @@ -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", diff --git a/src/backend/base/langflow/components/helpers/Memory.py b/src/backend/base/langflow/components/helpers/Memory.py index 164415fcc..884129723 100644 --- a/src/backend/base/langflow/components/helpers/Memory.py +++ b/src/backend/base/langflow/components/helpers/Memory.py @@ -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) diff --git a/src/backend/base/langflow/components/helpers/ParseData.py b/src/backend/base/langflow/components/helpers/ParseData.py index 72ac24ab4..5af8aa459 100644 --- a/src/backend/base/langflow/components/helpers/ParseData.py +++ b/src/backend/base/langflow/components/helpers/ParseData.py @@ -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) diff --git a/src/backend/base/langflow/template/field/prompt.py b/src/backend/base/langflow/template/field/prompt.py index 0df5a77a1..6ae396cf5 100644 --- a/src/backend/base/langflow/template/field/prompt.py +++ b/src/backend/base/langflow/template/field/prompt.py @@ -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):