From 2633b33afc47a3832183fbaa395dff820fdd7997 Mon Sep 17 00:00:00 2001 From: Lorenze Jay <63378463+lorenzejay@users.noreply.github.com> Date: Fri, 29 Aug 2025 13:48:49 -0700 Subject: [PATCH] fix: enhance LLM event handling with task and agent metadata (#3422) * fix: enhance LLM event handling with task and agent metadata - Added `from_task` and `from_agent` parameters to LLM event emissions for improved traceability. - Updated `_send_events_to_backend` method in TraceBatchManager to return status codes for better error handling. - Modified `CREWAI_BASE_URL` to remove trailing slash for consistency. - Improved logging and graceful failure handling in event sending process. * drop print --- src/crewai/llm.py | 2 ++ src/crewai/utilities/constants.py | 2 +- .../events/listeners/tracing/trace_batch_manager.py | 13 +++++++++---- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/crewai/llm.py b/src/crewai/llm.py index 96fad7c62..73c7b658e 100644 --- a/src/crewai/llm.py +++ b/src/crewai/llm.py @@ -950,6 +950,8 @@ class LLM(BaseLLM): tool_name=function_name, tool_args=function_args, error=f"Tool execution error: {str(e)}", + from_task=from_task, + from_agent=from_agent, ), ) return None diff --git a/src/crewai/utilities/constants.py b/src/crewai/utilities/constants.py index ef66ff87a..184ea6e9b 100644 --- a/src/crewai/utilities/constants.py +++ b/src/crewai/utilities/constants.py @@ -16,4 +16,4 @@ class _NotSpecified: # Unlike `None`, which might be a valid value from the user, `NOT_SPECIFIED` allows # us to distinguish between "not passed at all" and "explicitly passed None" or "[]". NOT_SPECIFIED = _NotSpecified() -CREWAI_BASE_URL = "https://app.crewai.com/" +CREWAI_BASE_URL = "https://app.crewai.com" diff --git a/src/crewai/utilities/events/listeners/tracing/trace_batch_manager.py b/src/crewai/utilities/events/listeners/tracing/trace_batch_manager.py index 3fa38e84e..11d63b175 100644 --- a/src/crewai/utilities/events/listeners/tracing/trace_batch_manager.py +++ b/src/crewai/utilities/events/listeners/tracing/trace_batch_manager.py @@ -150,10 +150,10 @@ class TraceBatchManager: """Add event to buffer""" self.event_buffer.append(trace_event) - def _send_events_to_backend(self): + def _send_events_to_backend(self) -> int: """Send buffered events to backend with graceful failure handling""" if not self.plus_api or not self.trace_batch_id or not self.event_buffer: - return + return 500 try: payload = { @@ -173,19 +173,22 @@ class TraceBatchManager: if response is None: logger.warning("Failed to send trace events. Events will be lost.") - return + return 500 if response.status_code in [200, 201]: self.event_buffer.clear() + return 200 else: logger.warning( f"Failed to send events: {response.status_code}. Events will be lost." ) + return 500 except Exception as e: logger.warning( f"Error sending events to backend: {str(e)}. Events will be lost." ) + return 500 def finalize_batch(self) -> Optional[TraceBatch]: """Finalize batch and return it for sending""" @@ -194,7 +197,9 @@ class TraceBatchManager: self.current_batch.events = self.event_buffer.copy() if self.event_buffer: - self._send_events_to_backend() + events_sent_to_backend_status = self._send_events_to_backend() + if events_sent_to_backend_status == 500: + return None self._finalize_backend_batch() finalized_batch = self.current_batch