--- name: comfyui_interrupt_queue kind: function lang: py domain: ml version: "1.1.0" purity: impure signature: "def comfyui_interrupt_queue(*, clear_pending: bool = False, server: str = \"127.0.0.1:8188\", timeout: float = 10.0) -> dict" description: "Corta la generacion en curso de ComfyUI (POST /interrupt) y, si clear_pending=True, vacia ademas la cola de pendientes (POST /queue {\"clear\":true}). Consulta GET /queue al final para reportar queue_remaining. Devuelve {ok, interrupted, cleared, queue_remaining, error}. NO lanza excepcion en fallo de red: degrada a {ok: False, error}. /interrupt corta solo el prompt en ejecucion, no vacia los pendientes salvo clear_pending. Impura: HTTP POST + GET, solo stdlib (urllib, json)." tags: [comfyui, ml, queue, interrupt, control, http] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] params: - name: clear_pending desc: "keyword-only. Si True, ademas de cortar el prompt en ejecucion vacia la cola de pendientes con POST /queue {\"clear\":true}. Default False." - name: server desc: "keyword-only. host:port del servidor ComfyUI sin esquema (default '127.0.0.1:8188')." - name: timeout desc: "keyword-only. Timeout de cada peticion HTTP en segundos (default 10.0)." output: "dict con ok (bool, True si interrupt + clear (si se pidio) + lectura de cola OK), interrupted (bool, True si POST /interrupt respondio), cleared (bool, True si clear_pending y POST /queue {clear:true} respondio; False si no se pidio o fallo), queue_remaining (int, queue_running + queue_pending tras la operacion), error (str, vacio si todo OK)." tested: true tests: ["test_interrumpe_sin_vaciar", "test_clear_pending_vacia_cola", "test_clear_pending_cola_vacia_no_rompe", "test_servidor_caido_no_lanza"] test_file_path: "python/functions/ml/tests/test_comfyui_interrupt_queue.py" file_path: "python/functions/ml/comfyui_interrupt_queue.py" --- ## Ejemplo ```python import sys, os sys.path.insert(0, os.path.join(os.environ["HOME"], "fn_registry", "python", "functions")) from ml.comfyui_interrupt_queue import comfyui_interrupt_queue # Solo cortar el prompt en ejecucion (los pendientes siguen): res = comfyui_interrupt_queue() # {'ok': True, 'interrupted': True, 'cleared': False, 'queue_remaining': 3, 'error': ''} # Cortar el actual Y vaciar los pendientes de golpe: res = comfyui_interrupt_queue(clear_pending=True) # {'ok': True, 'interrupted': True, 'cleared': True, 'queue_remaining': 0, 'error': ''} if res["ok"]: print(f"cortado; quedan {res['queue_remaining']} en cola") ``` O lanzable directo: `./fn run comfyui_interrupt_queue` · `./fn run comfyui_interrupt_queue --clear`. ## Cuando usarla Para abortar una generacion que se esta tomando demasiado, que tira de mas VRAM de la prevista, o tras encolar por error un workflow pesado. Con `clear_pending=True` es el freno de mano completo: corta el actual y borra todo lo encolado en una sola llamada (sin tener que encadenar `comfyui_queue_manage("clear")` despues). Tras la operacion `queue_remaining` dice de un vistazo cuanto queda en cola. ## Gotchas - `/interrupt` corta SOLO el prompt en ejecucion; sin `clear_pending` los pendientes (`queue_pending`) siguen y el siguiente arranca de inmediato. Pasa `clear_pending=True` para vaciar tambien la cola (POST /queue {"clear": true}). - No es idempotente en el sentido de "sin efecto": si hay algo ejecutandose, lo mata. Si la cola esta vacia, tanto el interrupt como el clear son inocuos (`interrupted=True`/`cleared=True` igual, `queue_remaining=0`). - `queue_remaining` se lee al FINAL (GET /queue tras interrupt+clear): es `queue_running + queue_pending`. Justo tras un interrupt sin clear puede ser >0 porque el siguiente pendiente ya arranco. - En fallo de red NO lanza: devuelve `ok=False` con el mensaje en `error`. Comprueba `ok` antes de fiarte de `queue_remaining`. - Tras el interrupt conviene liberar VRAM con `POST /free` si vas a encolar otro trabajo pesado (esta funcion no lo hace; ver el round-trip build -> submit -> wait). - Para operaciones de cola mas finas (borrar UN prompt por id, contar el historial) usa `comfyui_queue_manage`; esta funcion se centra en el interrupt + clear masivo. ## Capability growth log - v1.1.0 (2026-06-28) — anade flag `clear_pending` (vacia la cola en la misma llamada) + param `timeout`; el output pasa a {ok, interrupted, cleared, queue_remaining, error} y se anaden tests (mock HTTP local).