diff --git a/src/backend/base/langflow/serialization/serialization.py b/src/backend/base/langflow/serialization/serialization.py index d94a166ae217..b1dc2fa56775 100644 --- a/src/backend/base/langflow/serialization/serialization.py +++ b/src/backend/base/langflow/serialization/serialization.py @@ -239,38 +239,36 @@ def serialize( """ if obj is None: return None + + if isinstance(obj, (str, int, float, bool, type(None))): + return obj # Directly return primitive types + try: - # First try type-specific serialization result = _serialize_dispatcher(obj, max_length, max_items) - if result is not UNSERIALIZABLE_SENTINEL: # Special check for None since it's a valid result + if result is not UNSERIALIZABLE_SENTINEL: return result - # Handle class-based Pydantic types and other types if isinstance(obj, type): - if issubclass(obj, BaseModel | BaseModelV1): + if issubclass(obj, (BaseModel, BaseModelV1)): return repr(obj) - return str(obj) # Handle other class types + return str(obj) - # Handle type aliases and generic types - if hasattr(obj, "__origin__") or hasattr(obj, "__parameters__"): # Type alias or generic type check - try: - return repr(obj) - except Exception as e: # noqa: BLE001 - logger.debug(f"Cannot serialize object {obj}: {e!s}") + if hasattr(obj, "__origin__") or hasattr(obj, "__parameters__"): + return repr(obj) - # Fallback to common serialization patterns if hasattr(obj, "model_dump"): return serialize(obj.model_dump(), max_length, max_items) + if hasattr(obj, "dict") and not isinstance(obj, type): return serialize(obj.dict(), max_length, max_items) - # Final fallback to string conversion only if explicitly requested if to_str: return str(obj) - except Exception as e: # noqa: BLE001 + except Exception as e: logger.debug(f"Cannot serialize object {obj}: {e!s}") return "[Unserializable Object]" + return obj