From 2b3e826eb51b8645f50005e5f4927fd9e4b60a9e Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 14 Oct 2024 09:41:45 -0300 Subject: [PATCH] fix: enhance recursive_serialize_or_str to handle BaseModelV1 and improve exception logging (#4132) Enhance `recursive_serialize_or_str` to handle `BaseModelV1` and improve exception logging --- src/backend/base/langflow/schema/schema.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/backend/base/langflow/schema/schema.py b/src/backend/base/langflow/schema/schema.py index f73f2b00a..9404863f3 100644 --- a/src/backend/base/langflow/schema/schema.py +++ b/src/backend/base/langflow/schema/schema.py @@ -4,6 +4,7 @@ from typing import Literal from loguru import logger from pydantic import BaseModel +from pydantic.v1 import BaseModel as BaseModelV1 from typing_extensions import TypedDict from langflow.schema import Data @@ -116,11 +117,13 @@ def build_output_logs(vertex, result) -> dict: def recursive_serialize_or_str(obj): try: + if isinstance(obj, str): + return obj if isinstance(obj, dict): return {k: recursive_serialize_or_str(v) for k, v in obj.items()} if isinstance(obj, list): return [recursive_serialize_or_str(v) for v in obj] - if isinstance(obj, BaseModel): + if isinstance(obj, BaseModel | BaseModelV1): if hasattr(obj, "model_dump"): obj_dict = obj.model_dump() elif hasattr(obj, "dict"): @@ -138,10 +141,10 @@ def recursive_serialize_or_str(obj): return {k: recursive_serialize_or_str(v) for k, v in obj.dict().items()} if hasattr(obj, "model_dump"): return {k: recursive_serialize_or_str(v) for k, v in obj.model_dump().items()} - if issubclass(obj, BaseModel): + if isinstance(obj, type) and issubclass(obj, BaseModel): # This a type BaseModel and not an instance of it return repr(obj) return str(obj) except Exception: # noqa: BLE001 - logger.opt(exception=True).debug(f"Cannot serialize object {obj}") + logger.debug(f"Cannot serialize object {obj}") return str(obj)