From 8108d6fc1379c5de21a25d63fe299cf494b08dc1 Mon Sep 17 00:00:00 2001 From: Edwin Jose Date: Wed, 22 Jan 2025 14:56:20 -0500 Subject: [PATCH] fix: fixes date time issue, which was blocking run flow execution of agent flows (#5866) * fixes PydanticSerializationError fixes: PydanticSerializationError: Error calling function `serialize_model`: TypeError: tz_convert() takes exactly 2 positional arguments (1 given) * format * [autofix.ci] apply automated fixes * Update src/backend/base/langflow/api/v1/schemas.py Co-authored-by: Gabriel Luiz Freitas Almeida --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Gabriel Luiz Freitas Almeida --- src/backend/base/langflow/api/v1/schemas.py | 2 +- src/backend/base/langflow/graph/utils.py | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/backend/base/langflow/api/v1/schemas.py b/src/backend/base/langflow/api/v1/schemas.py index 8a767fb3e..49021c436 100644 --- a/src/backend/base/langflow/api/v1/schemas.py +++ b/src/backend/base/langflow/api/v1/schemas.py @@ -287,7 +287,7 @@ class ResultDataResponse(BaseModel): return f"{obj[:max_length]}... [truncated]" return obj if isinstance(obj, datetime): - return obj.astimezone().isoformat() + return obj.replace(tzinfo=timezone.utc).isoformat() if isinstance(obj, Decimal): return float(obj) if isinstance(obj, UUID): diff --git a/src/backend/base/langflow/graph/utils.py b/src/backend/base/langflow/graph/utils.py index fe4840715..5589c0b3d 100644 --- a/src/backend/base/langflow/graph/utils.py +++ b/src/backend/base/langflow/graph/utils.py @@ -86,6 +86,9 @@ def serialize_field(value): if hasattr(value, "to_json"): return value.to_json() return value.dict() + # Handle datetime objects + if hasattr(value, "isoformat"): + return value.isoformat() return str(value) @@ -182,10 +185,10 @@ async def log_vertex_build( id=vertex_id, valid=valid, params=str(params) if params else None, - # ugly hack to get the model dump with weird datatypes - data=json.loads(data.model_dump_json()), - # ugly hack to get the model dump with weird datatypes - artifacts=json.loads(json.dumps(artifacts, default=str)), + # Serialize data using our custom serializer + data=serialize_field(data), + # Serialize artifacts using our custom serializer + artifacts=serialize_field(artifacts) if artifacts else None, ) async with session_getter(get_db_service()) as session: inserted = await crud_log_vertex_build(session, vertex_build)