From 416f01fe230b1529d08df4c4e0a7f6d8c9c8e916 Mon Sep 17 00:00:00 2001 From: Greyson LaLonde Date: Tue, 31 Mar 2026 16:25:14 +0800 Subject: [PATCH] fix: add trace field serializer for agent on tool usage events --- .../src/crewai/events/types/tool_usage_events.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/crewai/src/crewai/events/types/tool_usage_events.py b/lib/crewai/src/crewai/events/types/tool_usage_events.py index c4e681546..13fd46026 100644 --- a/lib/crewai/src/crewai/events/types/tool_usage_events.py +++ b/lib/crewai/src/crewai/events/types/tool_usage_events.py @@ -2,9 +2,9 @@ from collections.abc import Callable from datetime import datetime from typing import Any -from pydantic import ConfigDict +from pydantic import ConfigDict, SerializationInfo, field_serializer -from crewai.events.base_events import BaseEvent +from crewai.events.base_events import BaseEvent, _is_trace_context, _trace_agent_ref class ToolUsageEvent(BaseEvent): @@ -26,6 +26,11 @@ class ToolUsageEvent(BaseEvent): model_config = ConfigDict(arbitrary_types_allowed=True) + @field_serializer("agent") + @classmethod + def _serialize_agent(cls, v: Any, info: SerializationInfo) -> Any: + return _trace_agent_ref(v) if _is_trace_context(info) else v + def __init__(self, **data: Any) -> None: if data.get("from_task"): task = data["from_task"] @@ -99,6 +104,11 @@ class ToolExecutionErrorEvent(BaseEvent): tool_class: Callable[..., Any] agent: Any | None = None + @field_serializer("agent") + @classmethod + def _serialize_agent(cls, v: Any, info: SerializationInfo) -> Any: + return _trace_agent_ref(v) if _is_trace_context(info) else v + def __init__(self, **data: Any) -> None: super().__init__(**data) # Set fingerprint data from the agent