Files
fn_registry/python/functions/ml/comfyui_interrupt_queue.md
T
egutierrez f8793f96ac fix(comfyui): firmas sin keyword-only para que fn run las despache
El generador de runner de fn run (cmd/fn/pyrunner.go::generatePyRunner)
parsea la signature de la funcion desde el frontmatter del .md y emite
`<param> = _args[i]` por cada parametro posicional. Cuando la firma es
keyword-only (`def f(*, ...)`), el `*` se trata como un nombre de parametro
y genera la linea invalida `* = _args[0]`, que rompe el runner con
`SyntaxError: invalid syntax` antes de ejecutar la funcion.

Se quita el separador keyword-only (`*,`) de la firma — tanto en la `def`
del .py como en el campo `signature:` del .md (la fuente que lee el
indexer y el runner) — convirtiendo los parametros keyword-only en
parametros normales con su mismo default. No cambia nombres, defaults ni
comportamiento: las llamadas con keyword siguen siendo validas.

Afecta a 5 funciones detectadas en el report 0208 §3.3, todas con
SyntaxError reproducido via `fn run <id>`:
- comfyui_fetch_civitai_image_meta
- comfyui_load_skill
- comfyui_save_skill
- comfyui_import_workflow_png
- comfyui_list_skills

Se completa ademas el fix de comfyui_interrupt_queue: el commit 643ebfb8
quito el `*,` del .py pero dejo el `*,` en el campo `signature:` del .md,
que es justo lo que lee el runner — por eso `fn run comfyui_interrupt_queue`
seguia fallando. Aqui se corrige el .md.

Verificado: tras el cambio las 6 despachan sin SyntaxError (las 4 con
primer arg requerido devuelven el `missing required arg` esperado del
runner; list_skills e interrupt_queue ejecutan `ok:true`). Tests
existentes verdes (comfyui_fetch_civitai_image_meta_test.py +
tests/test_comfyui_interrupt_queue.py: 8 passed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 07:23:59 +02:00

4.4 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
comfyui_interrupt_queue function py ml 1.1.0 impure def comfyui_interrupt_queue(clear_pending: bool = False, server: str = "127.0.0.1:8188", timeout: float = 10.0) -> dict 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).
comfyui
ml
queue
interrupt
control
http
false error_go_core
name desc
clear_pending keyword-only. Si True, ademas de cortar el prompt en ejecucion vacia la cola de pendientes con POST /queue {"clear":true}. Default False.
name desc
server keyword-only. host:port del servidor ComfyUI sin esquema (default '127.0.0.1:8188').
name desc
timeout keyword-only. Timeout de cada peticion HTTP en segundos (default 10.0).
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). true
test_interrumpe_sin_vaciar
test_clear_pending_vacia_cola
test_clear_pending_cola_vacia_no_rompe
test_servidor_caido_no_lanza
python/functions/ml/tests/test_comfyui_interrupt_queue.py python/functions/ml/comfyui_interrupt_queue.py

Ejemplo

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).