diff --git a/lib/crewai/src/crewai/events/listeners/tracing/first_time_trace_handler.py b/lib/crewai/src/crewai/events/listeners/tracing/first_time_trace_handler.py index 7eed6f2f7..dda0dc2a2 100644 --- a/lib/crewai/src/crewai/events/listeners/tracing/first_time_trace_handler.py +++ b/lib/crewai/src/crewai/events/listeners/tracing/first_time_trace_handler.py @@ -100,6 +100,7 @@ class FirstTimeTraceHandler: user_context=user_context, execution_metadata=execution_metadata, use_ephemeral=self.batch_manager.is_current_batch_ephemeral, + skip_context_check=True, ) if not self.batch_manager.trace_batch_id: diff --git a/lib/crewai/src/crewai/events/listeners/tracing/trace_batch_manager.py b/lib/crewai/src/crewai/events/listeners/tracing/trace_batch_manager.py index 1968c80ab..30870a53c 100644 --- a/lib/crewai/src/crewai/events/listeners/tracing/trace_batch_manager.py +++ b/lib/crewai/src/crewai/events/listeners/tracing/trace_batch_manager.py @@ -109,10 +109,11 @@ class TraceBatchManager: user_context: dict[str, str], execution_metadata: dict[str, Any], use_ephemeral: bool = False, + skip_context_check: bool = False, ) -> None: """Send batch initialization to backend""" - if not is_tracing_enabled_in_context(): + if not skip_context_check and not is_tracing_enabled_in_context(): return if not self.plus_api or not self.current_batch: diff --git a/lib/crewai/tests/tracing/test_tracing.py b/lib/crewai/tests/tracing/test_tracing.py index 8f848bb1e..ee3de423d 100644 --- a/lib/crewai/tests/tracing/test_tracing.py +++ b/lib/crewai/tests/tracing/test_tracing.py @@ -658,6 +658,16 @@ class TestTraceListenerSetup: trace_listener.first_time_handler.collected_events = True + mock_batch_response = MagicMock() + mock_batch_response.status_code = 201 + mock_batch_response.json.return_value = { + "trace_id": "mock-trace-id", + "ephemeral_trace_id": "mock-ephemeral-trace-id", + "access_code": "TRACE-mock", + } + mock_events_response = MagicMock() + mock_events_response.status_code = 200 + with ( patch.object( trace_listener.first_time_handler, @@ -667,6 +677,40 @@ class TestTraceListenerSetup: patch.object( trace_listener.first_time_handler, "_display_ephemeral_trace_link" ) as mock_display_link, + patch.object( + trace_listener.batch_manager.plus_api, + "initialize_trace_batch", + return_value=mock_batch_response, + ), + patch.object( + trace_listener.batch_manager.plus_api, + "initialize_ephemeral_trace_batch", + return_value=mock_batch_response, + ), + patch.object( + trace_listener.batch_manager.plus_api, + "send_trace_events", + return_value=mock_events_response, + ), + patch.object( + trace_listener.batch_manager.plus_api, + "send_ephemeral_trace_events", + return_value=mock_events_response, + ), + patch.object( + trace_listener.batch_manager.plus_api, + "finalize_trace_batch", + return_value=mock_events_response, + ), + patch.object( + trace_listener.batch_manager.plus_api, + "finalize_ephemeral_trace_batch", + return_value=mock_events_response, + ), + patch.object( + trace_listener.batch_manager, + "_cleanup_batch_data", + ), ): crew.kickoff() wait_for_event_handlers()