{"record":{"id":"150b8e377d83e45e","repo":"invoke-ai/InvokeAI","slug":"call-saved-workflow-exceeds-remaining-queue-capaci","errorCode":null,"errorMessage":"call_saved_workflow exceeds remaining queue capacity for child workflow executions","messagePattern":"call_saved_workflow exceeds remaining queue capacity for child workflow executions","errorType":"exception","errorClass":"TooManySessionsError","httpStatus":null,"severity":"error","filePath":"invokeai/app/services/session_processor/workflow_call_batch.py","lineNumber":420,"sourceCode":") -> list[Any]:\n    generator_node_data = generator_node[\"data\"]\n    node_type = generator_node_data.get(\"type\")\n    inputs = generator_node_data.get(\"inputs\")\n    if not isinstance(node_type, str) or not _is_mapping(inputs):\n        raise UnsupportedWorkflowNodeError(\"call_saved_workflow generator node is malformed\")\n    generator_input = inputs.get(\"generator\")\n    if not _is_mapping(generator_input):\n        raise UnsupportedWorkflowNodeError(\n            f\"call_saved_workflow generator node '{generator_node_data.get('id')}' is missing generator input\"\n        )\n    generator_value = generator_input.get(\"value\")\n    if not _is_mapping(generator_value):\n        raise UnsupportedWorkflowNodeError(\n            f\"call_saved_workflow generator node '{generator_node_data.get('id')}' has invalid generator value\"\n        )\n    declared_item_count = _get_declared_generator_item_count(generator_value)\n    if declared_item_count is not None and declared_item_count > maximum_items:\n        raise TooManySessionsError(\"call_saved_workflow exceeds remaining queue capacity for child workflow executions\")\n    if node_type == \"integer_generator\":\n        return _resolve_integer_generator(generator_value)\n    if node_type == \"float_generator\":\n        return _resolve_float_generator(generator_value)\n    if node_type == \"string_generator\":\n        return _resolve_string_generator(generator_value)\n    if node_type == \"image_generator\":\n        return _resolve_image_generator(generator_value, services, user_id)\n    raise UnsupportedWorkflowNodeError(f\"Unsupported generator node type '{node_type}'\")\n\n\ndef _get_generator_placeholder_items(generator_node: Mapping[str, Any]) -> list[Any]:\n    generator_node_data = generator_node[\"data\"]\n    node_type = generator_node_data.get(\"type\")\n    if node_type == \"integer_generator\":\n        return [0]\n    if node_type == \"float_generator\":\n        return [0.0]","sourceCodeStart":402,"sourceCodeEnd":438,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/services/session_processor/workflow_call_batch.py#L402-L438","documentation":"Before expanding a generator, its declared item count is checked against the remaining queue capacity (maximum_items). If the generator would produce more child sessions than the queue can accept, TooManySessionsError is raised to protect the queue from an oversized batch.","triggerScenarios":"Queueing a call_saved_workflow whose generator (e.g. integer range of 1000 items) exceeds the queue's remaining capacity for that batch, i.e. declared_item_count > maximum_items.","commonSituations":"Large range generators (count/start/stop) combined with a nearly-full queue or a low max-queue-size setting; replaying an old batch after the queue grew.","solutions":["Reduce the generator's declared item count (lower 'count' or narrow start/stop) so it fits remaining capacity","Clear completed/failed sessions or cancel queued items to free queue capacity","Raise the queue capacity limit configuration, then re-enqueue the workflow"],"exampleFix":"// before: count=1000 but only 50 slots remain\n\"inputs\": {\"generator\": {\"value\": {\"count\": 1000, \"start\": 0, \"stop\": 1000, \"step\": 1}}}\n// after\n\"inputs\": {\"generator\": {\"value\": {\"count\": 50, \"start\": 0, \"stop\": 50, \"step\": 1}}}","handlingStrategy":"try-catch","validationCode":"declared = compute_declared_item_count(node[\"data\"][\"inputs\"][\"generator\"][\"value\"])\nremaining = queue_service.get_remaining_capacity(batch_id)\nif declared > remaining:\n    shrink_generator_range(node, remaining)  # or raise before enqueue","typeGuard":"def is_within_capacity(declared_count: int, maximum_items: int) -> bool:\n    return declared_count <= maximum_items","tryCatchPattern":"from invokeai.app.services.session_queue.session_queue_common import TooManySessionsError\ntry:\n    enqueue_batch(batch)\nexcept TooManySessionsError as e:\n    trim_batch_and_reenqueue(batch, e)","preventionTips":["Check queue capacity (calc_session_count) before enqueueing large generators","Keep generator ranges modest (count/start/stop/step)","Set alerts on queue depth near capacity"],"tags":["queue","capacity","batch"],"backgroundTag":"queue-capacity-exceeded","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}