feat(episode): BACKFILL_q-83514471-c8bf-547e-bb4d-37c89fc09890_S20260413_XX.bkf.0.warm_qdr.orphan.in.cc.es.000.BKF_J.9FD5E_E.94B-8

Skill: NONE | Type: chronicle
Summary: ** John, este es un fallo clásico de suposición no verificada. Diseñamos el time
This commit is contained in:
Ember 2026-05-11 04:42:31 +00:00
parent 53b7c1b629
commit 0bdc7dcbd8

View file

@ -0,0 +1,19 @@
---
episode_id: "9fd5e94b-81f2-55ef-b24f-5eed05d3b822"
puente_flat: "BACKFILL_q-83514471-c8bf-547e-bb4d-37c89fc09890_S20260413_XX.bkf.0.warm_qdr.orphan.in.cc.es.000.BKF_J.9FD5E_E.94B-8"
session_code: "S20260413"
acto_dialogico: "informar"
actor_flujo: "ember_internal"
criticidad_aegis: "moderate"
skill_dominante: "NONE"
fase_proyecto: "maintenance"
tipo_semantico: "chronicle"
summary_one_line: "** John, este es un fallo clásico de suposición no verificada. Diseñamos el timeout para el modelo anterior (lumen-v3, ctx 24K, sin think phase) y lo aplicamos al modelo nuevo (lumen-v4, QwQ-32B, ctx"
source_type: "claude_code"
trust_boundary: "default"
created_at: "2026-05-10T00:00:00+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
** John, este es un fallo clásico de suposición no verificada. Diseñamos el timeout para el modelo anterior (lumen-v3, ctx 24K, sin think phase) y lo aplicamos al modelo nuevo (lumen-v4, QwQ-32B, ctx 32K, con think phase extendida) sin recalibrar. Diagnostiquemos y arreglemos. **Expectativa original**: lumen-v4 procesa un documento TESSERA en 3-5 minutos, igual que lumen-v3. **Realidad**: QwQ-32B tiene una fase `<think>` que puede durar 5-8 minutos ANTES de generar el primer token de respuesta. Este proceso significa: - Think phase: ~5-8 min - Generation phase: ~5-7 min (a 2.7 tok/s con 16 vCPUs saturados) - **Total real: 10-15 minutos por documento** **Causa raíz**: MAX_TIMEOUT=600s (10 min) corta la conexión justo cuando el modelo está terminando de pensar y empezando a generar. Es lo peor posible — pagamos el costo computacional del think sin obtener el resultado. **Agravante**: el script no distingue entre "modelo colgado" y "modelo pensando". Ambos se ven igual desde fuera: 0 tokens recibidos durante minutos. **Fix 1 — Timeout**: Subir MAX_TIMEOUT de 600 a 7200 (2 horas). Parece excesivo, pero: - El caso peor real es ~15 min por documento. 7200 da margen 8x. - Si el modelo realmente se cuelga, 2 horas es aceptable para un batch nocturno. - Mejor: usar timeout adaptativo. Si recibimos al menos 1 token, resetear el timer. ```bash # En batch.sh, cambiar: MAX_TIMEOUT=600 # Por: MAX_TIMEOUT=7200 # 2 horas — margen amplio para think + generate ``` **Fix 2 — Strip `<think>` blocks**: QwQ-32B envuelve su razonamiento interno en tags `<think>...</think>`. Estos bloques pueden tener miles de tokens que no son parte de la respuesta útil. El JSON que necesitamos está DESPUÉS del bloque think. Si batch.sh intenta parsear JSON incluyendo el think block, el parser falla. ```bash # Después de recibir respuesta, ANTES de extraer JSON: RESPONSE=$(echo "$RAW_RESPONSE" | sed 's/<think>.*<\/think>//gs') # Luego extraer JSON de $RESPONSE ``` **Fix 3 (bonus) — Progress indicator**: Agregar un heartbeat check. Cada 60 segundos, verificar si Ollama reporta actividad del modelo: ```bash # Mientras espera respuesta: while [ $ELAPSED -lt $MAX_TIMEOUT ]; do # Verificar si el modelo está activo RUNNING=$(curl -s http://localhost:11434/api/ps | jq '.models | length') if [ "$RUNNING" -eq 0 ]; then echo "[WARN] Model not running — possible crash" break fi sleep 60 ELAPSED=$((ELAPSED + 60)) echo "[INFO] Waiting... $45 minutoss elapsed. Model active." done ``` 1. Editar batch.sh: MAX_TIMEOUT=600 → MAX_TIMEOUT=7200 2. Agregar strip de `<think>` blocks antes de...