Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: StructuredOutput returns list of Data objects when multiple=True #5477

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from langflow.helpers.base_model import build_model_from_schema
from langflow.io import BoolInput, HandleInput, MessageTextInput, Output, StrInput, TableInput
from langflow.schema.data import Data
from langflow.schema.dataframe import DataFrame

if TYPE_CHECKING:
from langflow.field_typing.constants import LanguageModel
Expand Down Expand Up @@ -90,9 +91,15 @@ class StructuredOutputComponent(Component):

outputs = [
Output(name="structured_output", display_name="Structured Output", method="build_structured_output"),
Output(
name="structured_output_list", display_name="Structured Output List", method="build_structured_output_list"
),
Output(
name="structured_output_df", display_name="Structured Output DataFrame", method="build_structured_output_df"
),
]

def build_structured_output(self) -> Data:
def _build_structured_output(self) -> dict:
schema_name = self.schema_name or "OutputModel"

if not hasattr(self.llm, "with_structured_output"):
Expand Down Expand Up @@ -127,4 +134,26 @@ def build_structured_output(self) -> Data:
else:
msg = f"Output should be a Pydantic BaseModel, got {type(output)} ({output})"
raise TypeError(msg)

return output_dict

def build_structured_output(self) -> Data:
output_dict = self._build_structured_output()

return Data(data=output_dict)

def build_structured_output_list(self) -> list[Data]:
output_dict = self._build_structured_output()

if self.multiple:
return [Data(data=item) for item in output_dict["objects"]]
else: # noqa: RET505
return [Data(data=output_dict)]

def build_structured_output_df(self) -> DataFrame:
output_dict = self._build_structured_output()

if self.multiple:
return DataFrame(data=output_dict["objects"])
else: # noqa: RET505
return DataFrame(data=[output_dict])
Loading