Spaces:
Running
Running
from langchain_core.documents import Document | |
from langflow.schema import Data | |
from langflow.schema.message import Message | |
def docs_to_data(documents: list[Document]) -> list[Data]: | |
"""Converts a list of Documents to a list of Data. | |
Args: | |
documents (list[Document]): The list of Documents to convert. | |
Returns: | |
list[Data]: The converted list of Data. | |
""" | |
return [Data.from_document(document) for document in documents] | |
def data_to_text_list(template: str, data: Data | list[Data]) -> tuple[list[str], list[Data]]: | |
r"""Formats `text` within Data objects based on a given template. | |
Converts a Data object or a list of Data objects into a tuple containing a list of formatted strings | |
and a list of Data objects based on a given template. | |
Args: | |
template (str): The format string template to be used for formatting the data. | |
data (Data | list[Data]): A single Data object or a list of Data objects to be formatted. | |
Returns: | |
tuple[list[str], list[Data]]: A tuple containing a list of formatted strings based on the | |
provided template and data, and a list of Data objects. | |
""" | |
if data is None: | |
return [], [] | |
if template is None: | |
msg = "Template must be a string, but got None." | |
raise ValueError(msg) | |
if not isinstance(template, str): | |
msg = f"Template must be a string, but got {type(template)}" | |
raise TypeError(msg) | |
if isinstance(data, (Data)): | |
data = [data] | |
# Check if there are any format strings in the template | |
data_ = [ | |
# If it is not a record, create one with the key "text" | |
Data(text=value) if not isinstance(value, Data) else value | |
for value in data | |
] | |
formatted_text = [template.format(data=value.data, **value.data) for value in data_] | |
return formatted_text, data_ | |
def data_to_text(template: str, data: Data | list[Data], sep: str = "\n") -> str: | |
r"""Converts data into a formatted text string based on a given template. | |
Args: | |
template (str): The template string used to format each data item. | |
data (Data | list[Data]): A single data item or a list of data items to be formatted. | |
sep (str, optional): The separator to use between formatted data items. Defaults to "\n". | |
Returns: | |
str: A string containing the formatted data items separated by the specified separator. | |
""" | |
formatted_text, _ = data_to_text_list(template, data) | |
sep = "\n" if sep is None else sep | |
return sep.join(formatted_text) | |
def messages_to_text(template: str, messages: Message | list[Message]) -> str: | |
"""Converts a list of Messages to a list of texts. | |
Args: | |
template (str): The template to use for the conversion. | |
messages (list[Message]): The list of Messages to convert. | |
Returns: | |
list[str]: The converted list of texts. | |
""" | |
if isinstance(messages, (Message)): | |
messages = [messages] | |
# Check if there are any format strings in the template | |
messages_ = [] | |
for message in messages: | |
# If it is not a message, create one with the key "text" | |
if not isinstance(message, Message): | |
msg = "All elements in the list must be of type Message." | |
raise TypeError(msg) | |
messages_.append(message) | |
formated_messages = [template.format(data=message.model_dump(), **message.model_dump()) for message in messages_] | |
return "\n".join(formated_messages) | |