invoke-ai/InvokeAI · error · ValueError
call_saved_workflow exceeds remaining queue capacity for chi
Error message
call_saved_workflow exceeds remaining queue capacity for child workflow executions
What it means
begin_workflow_call_boundary checks the session queue status before expanding a called workflow: remaining capacity = max_queue_size - pending. If nothing is left (<= 0), it raises ValueError immediately instead of building children that could not be enqueued.
Source
Thrown at invokeai/app/services/session_processor/workflow_call_runtime.py:78
"field_values": field_values,
}
if hasattr(queue_item, "model_copy"):
return queue_item.model_copy(update=child_updates)
child_queue_item = type(queue_item).__new__(type(queue_item))
child_queue_item.__dict__ = {**queue_item.__dict__, **child_updates}
return child_queue_item
def begin_workflow_call_boundary(
self,
invocation: CallSavedWorkflowInvocation,
queue_item: SessionQueueItem,
workflow_record,
) -> SessionQueueItem:
queue_status = self._session_runner._services.session_queue.get_queue_status(queue_item.queue_id)
remaining_queue_capacity = self._session_runner._services.configuration.max_queue_size - queue_status.pending
if remaining_queue_capacity <= 0:
raise ValueError("call_saved_workflow exceeds remaining queue capacity for child workflow executions")
call_frame = queue_item.session.build_workflow_call_frame(invocation.id, invocation.workflow_id)
workflow_inputs = self._collect_call_saved_workflow_inputs(invocation, queue_item)
child_session_results = build_child_workflow_session_results(
parent_session=queue_item.session,
workflow=workflow_record.workflow.model_dump(),
workflow_inputs=workflow_inputs,
call_frame=call_frame,
maximum_children=remaining_queue_capacity,
services=self._session_runner._services,
user_id=getattr(queue_item, "user_id", None),
)
child_sessions = [child_result.session for child_result in child_session_results]
if len(child_sessions) > remaining_queue_capacity:
raise ValueError("call_saved_workflow exceeds remaining queue capacity for child workflow executions")
queue_item.session.begin_waiting_on_workflow_call(call_frame)
queue_item.session.attach_waiting_workflow_call_child_sessions(child_sessions)
child_queue_item = NoneView on GitHub (pinned to 0b6a024f2f)
Solutions
- Wait for or cancel pending queue items until capacity frees, then retry the call.
- Increase configuration.max_queue_size to accommodate the expected child count plus current pending load.
- Catch this ValueError and surface a 'queue full' user message with a retry/backoff, e.g. poll get_queue_status before submitting.
- Pre-check capacity yourself: services.session_queue.get_queue_status(qid).pending < services.configuration.max_queue_size - expected_children.
Example fix
// before
child = coordinator.run(...) # raises when queue full
// after
status = services.session_queue.get_queue_status(qid)
if services.configuration.max_queue_size - status.pending <= 0:
raise QueueFull(...) # or wait and retry Defensive patterns
Strategy: validation
Validate before calling
status = services.session_queue.get_queue_status(queue_item.queue_id)
remaining = services.configuration.max_queue_size - status.pending
if remaining <= 0:
raise QueueFullError("wait for queue capacity before workflow call") Type guard
def has_queue_capacity(services, needed=1) -> bool:
status = services.session_queue.get_queue_status(status.queue_id)
return services.configuration.max_queue_size - status.pending >= needed Try / catch
try:
child = begin_workflow_call_boundary(...)
except ValueError as e:
if "exceeds remaining queue capacity" in str(e):
await wait_for_capacity(...); retry() Prevention
- Poll get_queue_status before submitting workflow calls
- Set max_queue_size with headroom for child fan-out
- Implement client-side backoff/retry on capacity errors
- Watch pending counts in multi-user deployments
When it happens
Trigger: Calling a saved workflow via call_saved_workflow while the queue is at or over configuration.max_queue_size pending items — get_queue_status().pending >= max_queue_size.
Common situations: Busy shared queue at max_queue_size; max_queue_size lowered in config while jobs are pending; burst submissions exhausting capacity; test fixtures enqueuing items up to the cap.
Related errors
- Workflow call did not produce any child executions.
- call_saved_workflow exceeds remaining queue capacity for chi
- call_saved_workflow image-generator-backed batch child workf
- call_saved_workflow generator-backed batch child workflow no
- call_saved_workflow batch child workflow node '{node_id}' mu
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/97c3b53f21149dbc.
Report an issue: GitHub.