From 33c0d84a70fd1fa35aa7f803869caf4c34cd1ef8 Mon Sep 17 00:00:00 2001 From: g97iulio1609 Date: Sat, 28 Feb 2026 11:46:43 +0100 Subject: [PATCH] fix(telemetry): serialize Pydantic BaseModel in _safe_json_serialize _safe_json_serialize replaces Pydantic BaseModel instances with '' because json.dumps cannot handle them natively. Any tool that returns a Pydantic model has its traced output lost. Replace the generic lambda default with a _default function that calls model_dump(mode='json') for BaseModel instances before falling back to '' for truly non-serializable objects. BaseModel is already imported in tracing.py. Fixes #4629 --- src/google/adk/telemetry/tracing.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/google/adk/telemetry/tracing.py b/src/google/adk/telemetry/tracing.py index 707bc31396..2e32221878 100644 --- a/src/google/adk/telemetry/tracing.py +++ b/src/google/adk/telemetry/tracing.py @@ -116,11 +116,14 @@ def _safe_json_serialize(obj) -> str: The JSON-serialized object string or if the object cannot be serialized. """ + def _default(o: Any) -> Any: + if isinstance(o, BaseModel): + return o.model_dump(mode='json') + return '' + try: # Try direct JSON serialization first - return json.dumps( - obj, ensure_ascii=False, default=lambda o: '' - ) + return json.dumps(obj, ensure_ascii=False, default=_default) except (TypeError, OverflowError): return ''