feat(episode): EXPLORA_el-error-de-marco-para-clasificar-no-se_S20260601.R64_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: TESSERA | Type: troubleshooting
Summary: EPISODIO 64 — BLINDADAS: El error de marco: para clasificar NO se necesita un LL
This commit is contained in:
Ember 2026-06-06 10:02:21 +00:00
parent e5dca72591
commit e6353f4202

View file

@ -0,0 +1,50 @@
---
episode_id: "b743ac33-1537-4740-af1a-eb2a6b66d2d1"
puente_flat: "EXPLORA_el-error-de-marco-para-clasificar-no-se_S20260601.R64_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260601.LUMEN_CAPACIDAD_LLM_LIGERO"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "TESSERA"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 64 — BLINDADAS: El error de marco: para clasificar NO se necesita un LLM gen"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-06-06T10:01:36.422015+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
**Empírico primero:** en LUMEN ahora mismo **no hay nada más pequeño que 7B**. El inventario completo:
Para probar uno pequeño habría que descargarlo. Pero antes, **el giro que importa** (y responde tu pregunta de fondo):
## El error de marco: para clasificar NO se necesita un LLM generativo
El cuello que medimos (prefill + generación token-por-token) es **inherente a los LLM generativos**. Pero una *clasificación* (salida = una etiqueta) no necesita generar texto. La herramienta correcta es un **encoder** (familia BERT): una sola pasada hacia adelante produce la etiqueta en **~10-50 ms en CPU**, sin generación autorregresiva. Eso **elimina** el timeout, no lo reduce.
| Enfoque | Velocidad CPU (episodio) | Para qué |
|---|---|---|
| LLM generativo 14B (lo que probamos) | 112s 🔴 | nada viable |
| LLM generativo pequeño (0.5-1.5B) | ~10-20s 🟠 | generación corta (HyDE) |
| **Encoder clasificador** (ModernBERT/DeBERTa-v3-small, ~150M) | **~10-50 ms** 🟢 | **clasificación** |
| **Embeddings + cabeza clasificadora** (ya tienes embeddings) | **~ms** 🟢 | clasificación EMBER-native |
*(La fila 14B es hard_fact medido; el resto es inferencia técnica basada en la arquitectura encoder-vs-decoder.)*
## Existe, y es esto (responde tu "¿existe alguno?")
**Sí — pero el especializado correcto NO es un LLM más chico, es un clasificador encoder:**
1. **ModernBERT** (Answer.AI, 2024) — ~150M, contexto 8k, hecho para clasificación rápida en CPU.
2. **DeBERTa-v3-small** — ~140M, clasificación fuerte.
3. **Embeddings + regresión logística / MLP pequeña** — ya corres un modelo de embeddings; embeber el episodio + una cabeza entrenada = clasificación en milisegundos. **El encaje más natural para EMBER** (los embeddings ya están en el pipeline).
Para lo que **sí** necesita generar (HyDE, resúmenes), un generativo de **0.5-1.5B** (Qwen2.5-0.5B/1.5B, SmolLM2, Gemma-2-2B, Llama-3.2-1B) — y la palanca extra: **clasificar desde un resumen/campos del episodio, no los 1700 tokens crudos** (corta el cuello ~8×).
## Te lo pruebo empíricamente — ¿cuál?
1. **Descargo `qwen2.5:1.5b` (~1GB) en LUMEN y mido el episodio** → número real de un generativo pequeño en CPU. *(15 min, modifica LUMEN.)*
2. **Prototipo embeddings + clasificador** (la solución real) → mido latencia de clasificar un episodio en ms. *(El fix arquitectónico.)*
3. **Ambas** — comparar generativo-pequeño vs encoder con datos.
Mi inclinación: **opción 2** (es la que de verdad resuelve el timeout), pero si quieres ver primero si un LLM pequeño basta, **opción 1** es rápida. ¿Cuál corro?