diff --git a/src/backend/base/langflow/components/output_parsers/CSVOutputParser.py b/src/backend/base/langflow/components/output_parsers/CSVOutputParser.py deleted file mode 100644 index 3652342a3..000000000 --- a/src/backend/base/langflow/components/output_parsers/CSVOutputParser.py +++ /dev/null @@ -1,31 +0,0 @@ -from langchain_core.output_parsers import CommaSeparatedListOutputParser - -from langflow.custom.custom_component.component import Component -from langflow.field_typing.constants import OutputParser -from langflow.io import Output -from langflow.schema.message import Message - - -class CSVOutputParserComponent(Component): - display_name = "CSV Output Parser" - description = "Use with an LLM to return a comma separated list." - icon = "type" - name = "CSVOutputParser" - - inputs = [] # no inputs necessary - - outputs = [ - Output( - display_name="Format Instructions", - name="format_instructions", - info="Pass to a prompt template to include formatting instructions for LLM responses.", - method="format_instructions", - ), - Output(display_name="Output Parser", name="output_parser", method="build_parser"), - ] - - def build_parser(self) -> OutputParser: - return CommaSeparatedListOutputParser() - - def format_instructions(self) -> Message: - return Message(text=CommaSeparatedListOutputParser().get_format_instructions()) diff --git a/src/backend/base/langflow/components/output_parsers/OutputParser.py b/src/backend/base/langflow/components/output_parsers/OutputParser.py new file mode 100644 index 000000000..ce32700a0 --- /dev/null +++ b/src/backend/base/langflow/components/output_parsers/OutputParser.py @@ -0,0 +1,44 @@ +from langchain_core.output_parsers import CommaSeparatedListOutputParser + +from langflow.custom.custom_component.component import Component +from langflow.field_typing.constants import OutputParser +from langflow.io import DropdownInput, Output +from langflow.schema.message import Message + + +class OutputParserComponent(Component): + display_name = "Output Parser" + description = "Transforms the output of an LLM into a specified format." + icon = "type" + name = "OutputParser" + + inputs = [ + DropdownInput( + name="parser_type", + display_name="Parser", + options=["CSV"], + value="CSV", + ), + ] + + outputs = [ + Output( + display_name="Format Instructions", + name="format_instructions", + info="Pass to a prompt template to include formatting instructions for LLM responses.", + method="format_instructions", + ), + Output(display_name="Output Parser", name="output_parser", method="build_parser"), + ] + + def build_parser(self) -> OutputParser: + if self.parser_type == "CSV": + return CommaSeparatedListOutputParser() + else: + raise ValueError("Unsupported or missing parser") + + def format_instructions(self) -> Message: + if self.parser_type == "CSV": + return Message(text=CommaSeparatedListOutputParser().get_format_instructions()) + else: + raise ValueError("Unsupported or missing parser") diff --git a/src/backend/base/langflow/components/output_parsers/__init__.py b/src/backend/base/langflow/components/output_parsers/__init__.py index a06d332c7..9af69c443 100644 --- a/src/backend/base/langflow/components/output_parsers/__init__.py +++ b/src/backend/base/langflow/components/output_parsers/__init__.py @@ -1,3 +1,3 @@ -from .CSVOutputParser import CSVOutputParserComponent +from .OutputParser import OutputParserComponent -__all__ = ["CSVOutputParserComponent"] +__all__ = ["OutputParserComponent"] diff --git a/src/backend/tests/integration/components/output_parsers/test_csv_output_parser.py b/src/backend/tests/integration/components/output_parsers/test_output_parser.py similarity index 87% rename from src/backend/tests/integration/components/output_parsers/test_csv_output_parser.py rename to src/backend/tests/integration/components/output_parsers/test_output_parser.py index fc03578a8..c4668ef22 100644 --- a/src/backend/tests/integration/components/output_parsers/test_csv_output_parser.py +++ b/src/backend/tests/integration/components/output_parsers/test_output_parser.py @@ -2,7 +2,7 @@ import os import pytest from langflow.components.models.OpenAIModel import OpenAIModelComponent -from langflow.components.output_parsers.CSVOutputParser import CSVOutputParserComponent +from langflow.components.output_parsers.OutputParser import OutputParserComponent from langflow.components.prompts.Prompt import PromptComponent from tests.integration.utils import ComponentInputHandle, run_single_component @@ -11,12 +11,12 @@ from tests.integration.utils import ComponentInputHandle, run_single_component @pytest.mark.api_key_required async def test_csv_output_parser_openai(): format_instructions = ComponentInputHandle( - clazz=CSVOutputParserComponent, + clazz=OutputParserComponent, inputs={}, output_name="format_instructions", ) output_parser_handle = ComponentInputHandle( - clazz=CSVOutputParserComponent, + clazz=OutputParserComponent, inputs={}, output_name="output_parser", )