OpenBMB/ChatDev · warning · WorkflowCancelledError
Workflow execution cancelled
Error message
Workflow execution cancelled
What it means
Cooperative-cancellation guard: before/inside each major executor step, if context.cancel_event is set, a WorkflowCancelledError is raised so the run stops promptly and cleanly.
Source
Thrown at runtime/node/executor/base.py:146
role: MessageRole,
content: MessageContent,
*,
source: str | None = None,
metadata: Dict[str, Any] | None = None,
preserve_role: bool = False,
) -> Message:
meta = dict(metadata or {})
if source:
meta.setdefault("source", source)
return Message(role=role, content=content, metadata=meta, preserve_role=preserve_role)
def _clone_messages(self, messages: List[Message]) -> List[Message]:
return [message.clone() for message in messages]
def _ensure_not_cancelled(self) -> None:
event = getattr(self.context, "cancel_event", None)
if event is not None and event.is_set():
raise WorkflowCancelledError("Workflow execution cancelled")
View on GitHub (pinned to 4fb2db0ea9)
Solutions
- Treat WorkflowCancelledError as a normal exit: do not retry, propagate or mark the run cancelled
- If cancellation is premature, review what sets cancel_event (timeout, user action)
- Clean up partial artifacts (files, threads) in a finally block on the calling side
Defensive patterns
Strategy: try-catch
Validate before calling
if context.cancel_event and context.cancel_event.is_set():
return # skip before starting work Try / catch
try:
outputs = executor.execute(node, inputs)
except WorkflowCancelledError:
mark_run_cancelled(); return Prevention
- Check cancel_event in your own loops around executor calls
- Never retry on WorkflowCancelledError
When it happens
Trigger: User or supervisor sets the cancel_event while a node is executing (between provider calls, tool batches, thinking/memory phases).
Common situations: UI stop button; workflow timeout policy cancelling long agent loops; parent workflow cancelling subgraph runs.
AI-assisted analysis of OpenBMB/ChatDev@4fb2db0ea9 (2026-08-27).
Data as JSON: /api/errors/505984deb7a895a1.
Report an issue: GitHub.