From 0d971e5bc504eb2f62df801367ac39e28d5140a7 Mon Sep 17 00:00:00 2001 From: Greyson LaLonde Date: Wed, 10 Jun 2026 16:12:28 -0700 Subject: [PATCH] feat(events): add reset_runtime_state to release accumulated bus state --- lib/crewai/src/crewai/events/event_bus.py | 6 +++++ lib/crewai/tests/test_event_record.py | 29 ++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/lib/crewai/src/crewai/events/event_bus.py b/lib/crewai/src/crewai/events/event_bus.py index e04446e1b..0eebd88e2 100644 --- a/lib/crewai/src/crewai/events/event_bus.py +++ b/lib/crewai/src/crewai/events/event_bus.py @@ -281,6 +281,12 @@ class CrewAIEventsBus: """The RuntimeState currently attached to the bus, if any.""" return self._runtime_state + def reset_runtime_state(self) -> None: + """Detach the RuntimeState and clear the entity registry.""" + with self._instance_lock: + self._runtime_state = None + self._registered_entity_ids = set() + def register_entity(self, entity: Any) -> None: """Add an entity to the RuntimeState, creating it if needed. diff --git a/lib/crewai/tests/test_event_record.py b/lib/crewai/tests/test_event_record.py index 49ba513dc..5a4b5f4ea 100644 --- a/lib/crewai/tests/test_event_record.py +++ b/lib/crewai/tests/test_event_record.py @@ -409,4 +409,31 @@ class TestRuntimeStateIntegration: old_json, context={"from_checkpoint": True} ) assert len(restored.root) == 1 - assert len(restored.event_record) == 0 \ No newline at end of file + assert len(restored.event_record) == 0 + + def test_reset_runtime_state_clears_state_and_registry(self): + from crewai import Agent, Crew, RuntimeState + from crewai.events.event_bus import crewai_event_bus + + if RuntimeState is None: + pytest.skip("RuntimeState unavailable (model_rebuild failed)") + + agent = Agent(role="test", goal="test", backstory="test", llm="gpt-4o-mini") + crew = Crew(agents=[agent], tasks=[], verbose=False) + + previous_state = crewai_event_bus._runtime_state + previous_ids = crewai_event_bus._registered_entity_ids + crewai_event_bus._runtime_state = None + crewai_event_bus._registered_entity_ids = set() + try: + crewai_event_bus.register_entity(crew) + assert crewai_event_bus.runtime_state is not None + assert crewai_event_bus._registered_entity_ids + + crewai_event_bus.reset_runtime_state() + + assert crewai_event_bus.runtime_state is None + assert crewai_event_bus._registered_entity_ids == set() + finally: + crewai_event_bus._runtime_state = previous_state + crewai_event_bus._registered_entity_ids = previous_ids \ No newline at end of file