Spaces:
Running
Running
from langflow.custom import Component | |
from langflow.helpers.data import data_to_text, data_to_text_list | |
from langflow.io import DataInput, MultilineInput, Output, StrInput | |
from langflow.schema import Data | |
from langflow.schema.message import Message | |
class ParseDataComponent(Component): | |
display_name = "Parse Data" | |
description = "Convert Data into plain text following a specified template." | |
icon = "braces" | |
name = "ParseData" | |
inputs = [ | |
DataInput(name="data", display_name="Data", info="The data to convert to text.", is_list=True), | |
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}", | |
), | |
StrInput(name="sep", display_name="Separator", advanced=True, value="\n"), | |
] | |
outputs = [ | |
Output( | |
display_name="Text", | |
name="text", | |
info="Data as a single Message, with each input Data separated by Separator", | |
method="parse_data", | |
), | |
Output( | |
display_name="Data List", | |
name="data_list", | |
info="Data as a list of new Data, each having `text` formatted by Template", | |
method="parse_data_as_list", | |
), | |
] | |
def _clean_args(self) -> tuple[list[Data], str, str]: | |
data = self.data if isinstance(self.data, list) else [self.data] | |
template = self.template | |
sep = self.sep | |
return data, template, sep | |
def parse_data(self) -> Message: | |
data, template, sep = self._clean_args() | |
result_string = data_to_text(template, data, sep) | |
self.status = result_string | |
return Message(text=result_string) | |
def parse_data_as_list(self) -> list[Data]: | |
data, template, _ = self._clean_args() | |
text_list, data_list = data_to_text_list(template, data) | |
for item, text in zip(data_list, text_list, strict=True): | |
item.set_text(text) | |
self.status = data_list | |
return data_list | |