From 2b2635d26de865c0918e21345c4354605f0016cb Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 28 Oct 2024 17:25:44 -0300 Subject: [PATCH] Add DynamicOutputComponent with configurable outputs based on input --- .../tests/data/dynamic_output_component.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/backend/tests/data/dynamic_output_component.py diff --git a/src/backend/tests/data/dynamic_output_component.py b/src/backend/tests/data/dynamic_output_component.py new file mode 100644 index 000000000000..b2a23aa37b18 --- /dev/null +++ b/src/backend/tests/data/dynamic_output_component.py @@ -0,0 +1,41 @@ +# from langflow.field_typing import Data +from typing import Any + +from langflow.custom import Component +from langflow.io import BoolInput, MessageTextInput, Output +from langflow.schema import Data + + +class DynamicOutputComponent(Component): + display_name = "Dynamic Output Component" + description = "Use as a template to create your own component." + documentation: str = "http://docs.langflow.org/components/custom" + icon = "custom_components" + name = "DynamicOutputComponent" + + inputs = [ + MessageTextInput(name="input_value", display_name="Input Value", value="Hello, World!"), + BoolInput(name="show_output", display_name="Show Output", value=True, real_time_refresh=True), + ] + + outputs = [ + Output(display_name="Output", name="output", method="build_output"), + ] + + def update_outputs(self, frontend_node: dict, field_name: str, field_value: Any): + if field_name == "show_output": + if field_value: + frontend_node["outputs"].append( + Output(display_name="Tool Output", name="tool_output", method="build_output") + ) + else: + # remove the output + frontend_node["outputs"] = [ + output for output in frontend_node["outputs"] if output["name"] != "tool_output" + ] + return frontend_node + + def build_output(self) -> Data: + data = Data(value=self.input_value) + self.status = data + return data