From 5121fb10e5b66c49cd4d96fb37d728837e7abb63 Mon Sep 17 00:00:00 2001 From: ogabrielluiz Date: Wed, 5 Jun 2024 19:01:12 -0300 Subject: [PATCH] refactor: Update output names in TextInput, TextOutput, RecordsOutput, ChatInput, and ChatOutput The output names in the TextInput, TextOutput, RecordsOutput, ChatInput, and ChatOutput components have been updated to use more descriptive names. This change improves the clarity and consistency of the output names across the components. Note: The commit message has been generated based on the provided code changes and recent commits. --- .../components/experimental/TextOperator.py | 4 ++-- .../base/langflow/components/inputs/ChatInput.py | 4 ++-- .../base/langflow/components/inputs/TextInput.py | 2 +- .../base/langflow/components/outputs/ChatOutput.py | 4 ++-- .../langflow/components/outputs/RecordsOutput.py | 2 +- .../base/langflow/components/outputs/TextOutput.py | 2 +- .../langflow/custom/custom_component/component.py | 7 ++++--- src/backend/base/langflow/template/field/base.py | 14 +++++++++++++- tests/data/component_multiple_outputs.py | 4 ++-- tests/data/component_nested_call.py | 7 ++++--- 10 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/backend/base/langflow/components/experimental/TextOperator.py b/src/backend/base/langflow/components/experimental/TextOperator.py index ac2d65941..0b9821240 100644 --- a/src/backend/base/langflow/components/experimental/TextOperator.py +++ b/src/backend/base/langflow/components/experimental/TextOperator.py @@ -43,8 +43,8 @@ class TextOperatorComponent(Component): ), ] outputs = [ - Output(name="True Result", method="result_response"), - Output(name="False Result", method="result_response"), + Output(display_name="True Result", name="true_result", method="result_response"), + Output(display_name="False Result", name="false_result", method="result_response"), ] def true_response(self) -> Union[Text, Record]: diff --git a/src/backend/base/langflow/components/inputs/ChatInput.py b/src/backend/base/langflow/components/inputs/ChatInput.py index ae08a7a20..1de364364 100644 --- a/src/backend/base/langflow/components/inputs/ChatInput.py +++ b/src/backend/base/langflow/components/inputs/ChatInput.py @@ -33,8 +33,8 @@ class ChatInput(ChatComponent): ), ] outputs = [ - Output(name="Message", method="text_response"), - Output(name="Record", method="record_response"), + Output(display_name="Message", name="message", method="text_response"), + Output(display_name="Record", name="record", method="record_response"), ] def text_response(self) -> Text: diff --git a/src/backend/base/langflow/components/inputs/TextInput.py b/src/backend/base/langflow/components/inputs/TextInput.py index 596edf0ec..7fdcbb501 100644 --- a/src/backend/base/langflow/components/inputs/TextInput.py +++ b/src/backend/base/langflow/components/inputs/TextInput.py @@ -26,7 +26,7 @@ class TextInput(TextComponent): ), ] outputs = [ - Output(name="Text", method="text_response"), + Output(display_name="Text", name="text", method="text_response"), ] def text_response(self) -> Text: diff --git a/src/backend/base/langflow/components/outputs/ChatOutput.py b/src/backend/base/langflow/components/outputs/ChatOutput.py index 064cd92f1..d1506310b 100644 --- a/src/backend/base/langflow/components/outputs/ChatOutput.py +++ b/src/backend/base/langflow/components/outputs/ChatOutput.py @@ -36,8 +36,8 @@ class ChatOutput(ChatComponent): ), ] outputs = [ - Output(name="Message", method="text_response"), - Output(name="Record", method="record_response"), + Output(display_name="Message", name="message", method="text_response"), + Output(display_name="Record", name="record", method="record_response"), ] def text_response(self) -> Text: diff --git a/src/backend/base/langflow/components/outputs/RecordsOutput.py b/src/backend/base/langflow/components/outputs/RecordsOutput.py index 7af2a0c7e..f03b0ccd6 100644 --- a/src/backend/base/langflow/components/outputs/RecordsOutput.py +++ b/src/backend/base/langflow/components/outputs/RecordsOutput.py @@ -11,7 +11,7 @@ class RecordsOutput(Component): Input(name="input_value", type=Record, display_name="Record Input"), ] outputs = [ - Output(name="Record", method="record_response"), + Output(display_name="Record", name="record", method="record_response"), ] def record_response(self) -> Record: diff --git a/src/backend/base/langflow/components/outputs/TextOutput.py b/src/backend/base/langflow/components/outputs/TextOutput.py index bc71b3a27..d4615b418 100644 --- a/src/backend/base/langflow/components/outputs/TextOutput.py +++ b/src/backend/base/langflow/components/outputs/TextOutput.py @@ -26,7 +26,7 @@ class TextOutput(TextComponent): ), ] outputs = [ - Output(name="Text", method="text_response"), + Output(display_name="Text", name="text", method="text_response"), ] def text_response(self) -> Text: diff --git a/src/backend/base/langflow/custom/custom_component/component.py b/src/backend/base/langflow/custom/custom_component/component.py index 9816fe6b0..6c88e51be 100644 --- a/src/backend/base/langflow/custom/custom_component/component.py +++ b/src/backend/base/langflow/custom/custom_component/component.py @@ -60,6 +60,8 @@ class Component(CustomComponent): def _set_outputs(self, outputs: List[dict]): self.outputs = [Output(**output) for output in outputs] + for output in self.outputs: + setattr(self, output.name, output) async def build_results(self, vertex: "Vertex"): _results = {} @@ -69,14 +71,13 @@ class Component(CustomComponent): for output in self.outputs: # Build the output if it's connected to some other vertex # or if it's not connected to any vertex - self.output = output - if not vertex.outgoing_edges or output.name in vertex.edges_source_names: + if not vertex.outgoing_edges or output.display_name in vertex.edges_source_names: method: Callable | Awaitable = getattr(self, output.method) result = method() # If the method is asynchronous, we need to await it if inspect.iscoroutinefunction(method): result = await result - _results[output.name] = result + _results[output.display_name] = result self._results = _results return _results diff --git a/src/backend/base/langflow/template/field/base.py b/src/backend/base/langflow/template/field/base.py index ff3e669bb..4e9f059fa 100644 --- a/src/backend/base/langflow/template/field/base.py +++ b/src/backend/base/langflow/template/field/base.py @@ -152,7 +152,10 @@ class Output(BaseModel): selected: Optional[str] = Field(default=None, serialization_alias="selected") """The selected output type for the field.""" - name: str = Field(default="", serialization_alias="name") + display_name: Optional[str] = Field(default=None, serialization_alias="name") + """The display name of the field.""" + + name: str = Field(default=None, serialization_alias="name") """The name of the field.""" method: Optional[str] = Field(default=None, serialization_alias="method") @@ -168,3 +171,12 @@ class Output(BaseModel): def set_selected(self): if not self.selected: self.selected = self.types[0] + + @field_validator("display_name", mode="before") + def validate_display_name(cls, v, info): + if not v: + if info.data.get("name"): + return info.data["name"] + else: + raise ValueError("If display_name is not set, name must be set") + return v diff --git a/tests/data/component_multiple_outputs.py b/tests/data/component_multiple_outputs.py index 6970ab305..5cdff8773 100644 --- a/tests/data/component_multiple_outputs.py +++ b/tests/data/component_multiple_outputs.py @@ -8,8 +8,8 @@ class MultipleOutputsComponent(Component): Input(display_name="Number", name="number", field_type=int), ] outputs = [ - Output(name="Certain Output", method="certain_output"), - Output(name="Other Output", method="other_output"), + Output(display_name="Certain Output", name="certain_output", method="certain_output"), + Output(display_name="Other Output", name="other_output", method="other_output"), ] def certain_output(self) -> str: diff --git a/tests/data/component_nested_call.py b/tests/data/component_nested_call.py index 0eef5566f..6cf64944a 100644 --- a/tests/data/component_nested_call.py +++ b/tests/data/component_nested_call.py @@ -1,6 +1,7 @@ +from random import randint + from langflow.custom import Component from langflow.template.field.base import Input, Output -from random import randint class MultipleOutputsComponent(Component): @@ -9,8 +10,8 @@ class MultipleOutputsComponent(Component): Input(display_name="Number", name="number", field_type=int), ] outputs = [ - Output(name="Certain Output", method="certain_output"), - Output(name="Other Output", method="other_output"), + Output(display_name="Certain Output", name="certain_output", method="certain_output"), + Output(display_name="Other Output", name="other_output", method="other_output"), ] def certain_output(self) -> int: