346f859b86
Cubre 15 funciones del grupo comfyui (+ las 4 de comfyui-judge) que no tenian test, con tests offline (sin red, sin GPU, sin servidor ComfyUI): - 5 builders puros gamedev-2d: build_asset_variant, build_directional_sprite, build_inpaint_asset, build_outpaint_asset, build_sprite_from_sketch (estructura del workflow en API format + cableado + determinismo + error paths). - 3 impuras offline via PIL/stdlib: build_grid, flatten_alpha_on_color, read_png_metadata (PNGs reales en tmp, error paths). - 4 de comfyui-judge: score_aesthetic y score_clip_alignment por sus guards previos al subproceso torch; judge_image (panel) y critique_image_llm con la dependencia pesada monkeypatcheada. - 3 que componen otras funciones: resolve_workflow_deps, import_workflow_json, extract_recipe_from_png (dependencia de red monkeypatcheada o fallback offline). Cada .md actualizado con tested: true + test_file_path + tests. Cobertura del grupo comfyui (tag plano): 79 -> 90 con test (47 -> 36 sin). comfyui-judge: 0/4 -> 4/4. pytest: 101 passed; carpeta ml/tests: 376 passed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.8 KiB
3.8 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_critique_image_llm | function | py | ml | 1.0.0 | impure | def comfyui_critique_image_llm(image_path: str, prompt: str, *, model: str = 'claude-opus-4-8', max_tokens: int = 1024, token: str = '') -> dict | Critica de un LLM-vision sobre una imagen generada: detecta artefactos, anatomia rota, texto ilegible, watermarks, incoherencias de composicion. Tercer juez del panel comfyui-judge. Compone ask_llm_vision (claude-direct, API directa) con un system prompt que obliga a devolver JSON {verdict good|bad, score 0-10, reasons}. Impura: red (API Anthropic) + lectura de imagen. |
|
|
false | error_go_core |
|
dict {ok, verdict, score_0_10, reasons, error}. En exito ok=True, verdict 'good'|'bad', score_0_10 el score del modelo y reasons la lista de razones. En error (imagen invalida, API caida, 429, JSON no parseable) ok=False con error. Nunca lanza excepcion. | true |
|
python/functions/ml/tests/test_comfyui_critique_image_llm.py | python/functions/ml/comfyui_critique_image_llm.py |
Ejemplo
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from ml.comfyui_critique_image_llm import comfyui_critique_image_llm
img = os.path.expanduser("~/ComfyUI/output/comfy_sdxl_00001_.png")
res = comfyui_critique_image_llm(img, "a majestic lion standing on rocks at sunset, photorealistic")
print(res)
# {'ok': True, 'verdict': 'good', 'score_0_10': 8.0,
# 'reasons': ['anatomia del leon correcta', 'iluminacion coherente con el atardecer'], 'error': ''}
CLI directa:
python/.venv/bin/python3 python/functions/ml/comfyui_critique_image_llm.py ~/ComfyUI/output/comfy_sdxl_00001_.png "a majestic lion at sunset"
Cuando usarla
- Cuando los scores numericos (estetico/CLIP) no bastan: el LLM ve defectos finos que el score global no penaliza (dedos de mas, ojos asimetricos, texto basura, watermarks).
- Como el juez "humano" de
comfyui_judge_image, para desempatar good/bad. - Para obtener razones LEGIBLES de por que una imagen es mala (feedback accionable al skill).
Gotchas
- Cuesta tokens de API. Cada llamada va a api.anthropic.com (claude-direct). Usar con mesura; en validacion, pocas llamadas.
- Rate limit (HTTP 429). Si el rate limit compartido esta saturado, devuelve
ok=Falsecon el error 429 — no crashea. El panelcomfyui_judge_imagesigue votando con los otros dos jueces. Reintentar mas tarde o bajar a un modelo con cuota (haiku). - El modelo puede no devolver JSON limpio. Se extrae el primer objeto
{...}(tolera fences ```json). Si no hay JSON parseable,ok=False. - verdict conservador. Si el modelo responde algo ambiguo (ni 'good' ni 'bad'), se normaliza a 'bad' (ante la duda, no es producto).
- NUNCA
claude -p. Respeta la reglallm_invocation: solo claude-direct via ask_llm_vision (arranque 0, API directa).