Compare commits

...

1 Commits

Author SHA1 Message Date
Devin AI
dba6aef61c Fix flow not terminating on CTRL+C (#2611)
Co-Authored-By: Joe Moura <joao@crewai.com>
2025-04-15 19:12:52 +00:00
2 changed files with 30 additions and 1 deletions

View File

@@ -719,7 +719,10 @@ class Flow(Generic[T], metaclass=FlowMeta):
async def run_flow():
return await self.kickoff_async(inputs)
return asyncio.run(run_flow())
try:
return asyncio.run(run_flow())
except KeyboardInterrupt:
raise
async def kickoff_async(self, inputs: Optional[Dict[str, Any]] = None) -> Any:
"""

View File

@@ -755,3 +755,29 @@ def test_multiple_routers_from_same_trigger():
assert execution_order.index("anemia_analysis") > execution_order.index(
"anemia_router"
)
def test_flow_keyboard_interrupt_handling():
"""Test that a flow properly terminates when a keyboard interrupt is received."""
execution_order = []
class KeyboardInterruptFlow(Flow):
@start()
def step_1(self):
execution_order.append("step_1")
@listen(step_1)
def step_2(self):
execution_order.append("step_2")
raise KeyboardInterrupt()
@listen(step_2)
def step_3(self):
execution_order.append("step_3")
flow = KeyboardInterruptFlow()
with pytest.raises(KeyboardInterrupt):
flow.kickoff()
assert execution_order == ["step_1", "step_2"]