Spaces:
Running
Running
from enum import Enum | |
from typing import Any | |
from pydantic import BaseModel, Field, field_serializer, model_validator | |
from langflow.graph.utils import serialize_field | |
from langflow.schema.schema import OutputValue, StreamURL | |
from langflow.utils.schemas import ChatOutputResponse, ContainsEnumMeta | |
class ResultData(BaseModel): | |
results: Any | None = Field(default_factory=dict) | |
artifacts: Any | None = Field(default_factory=dict) | |
outputs: dict | None = Field(default_factory=dict) | |
logs: dict | None = Field(default_factory=dict) | |
messages: list[ChatOutputResponse] | None = Field(default_factory=list) | |
timedelta: float | None = None | |
duration: str | None = None | |
component_display_name: str | None = None | |
component_id: str | None = None | |
used_frozen_result: bool | None = False | |
def serialize_results(self, value): | |
if isinstance(value, dict): | |
return {key: serialize_field(val) for key, val in value.items()} | |
return serialize_field(value) | |
def validate_model(cls, values): | |
if not values.get("outputs") and values.get("artifacts"): | |
# Build the log from the artifacts | |
for key in values["artifacts"]: | |
message = values["artifacts"][key] | |
# ! Temporary fix | |
if message is None: | |
continue | |
if "stream_url" in message and "type" in message: | |
stream_url = StreamURL(location=message["stream_url"]) | |
values["outputs"].update({key: OutputValue(message=stream_url, type=message["type"])}) | |
elif "type" in message: | |
values["outputs"].update({key: OutputValue(message=message, type=message["type"])}) | |
return values | |
class InterfaceComponentTypes(str, Enum, metaclass=ContainsEnumMeta): | |
ChatInput = "ChatInput" | |
ChatOutput = "ChatOutput" | |
TextInput = "TextInput" | |
TextOutput = "TextOutput" | |
DataOutput = "DataOutput" | |
WebhookInput = "Webhook" | |
CHAT_COMPONENTS = [InterfaceComponentTypes.ChatInput, InterfaceComponentTypes.ChatOutput] | |
RECORDS_COMPONENTS = [InterfaceComponentTypes.DataOutput] | |
INPUT_COMPONENTS = [ | |
InterfaceComponentTypes.ChatInput, | |
InterfaceComponentTypes.TextInput, | |
InterfaceComponentTypes.WebhookInput, | |
] | |
OUTPUT_COMPONENTS = [ | |
InterfaceComponentTypes.ChatOutput, | |
InterfaceComponentTypes.TextOutput, | |
InterfaceComponentTypes.DataOutput, | |
] | |
class RunOutputs(BaseModel): | |
inputs: dict = Field(default_factory=dict) | |
outputs: list[ResultData | None] = Field(default_factory=list) | |