¿Qué hace assistant-lab?
Banco de trabajo de auto-mejora para /assistant. Este es el laboratorio donde
/assistant diagnostica problemas, entrena nuevos modelos, los evalúa y
promociona los modelos exitosos al registro en vivo.
No debe confundirse con /monitor-skills , que es el demonio de observabilidad
que vigila TODOS los skills para detectar problemas de salud, deriva y sincronización.
/assistant-lab es específicamente la caja de herramientas de auto-mejora.
El Bucle de Auto-Mejora
/monitor-skills detecta un problema ← observabilidad
↓
/assistant-lab diagnostica la causa raíz ← este skill
↓
Modo sombra: el profesor (scillm) etiqueta el flujo y lo guarda en shadow.jsonl
↓
ModelFactory.auto_improve(tarea)
├─ lee la tasa de acuerdo en sombra
├─ >= 90%: promocionar → actualizar model_registry.json
├─ 80-90%: meseta → /prompt-lab rediseñar
├─ 70-80%: reentrenar → /create-gpt o /create-classifier
└─ < 70%: reentrenamiento agresivo + cambio de arquitectura
↓
/gpt-lab evaluar o /classifier-lab evaluar
↓ ¿aprobado? → promocionar al registro en vivo
↓
/assistant usa el modelo mejorado en tiempo de inferencia
Herramientas Disponibles
| Herramienta | Propósito | Cuándo se usa |
|---|---|---|
/create-gpt | Entrenar GPT con QLoRA/SFT/GRPO (Nivel 1.5) | Acuerdo < 80% o no existe modelo |
/create-classifier | Entrenar clasificador DistilBERT/sklearn (Nivel 0.5) | Tareas de clasificación de texto |
/create-regressor | Entrenar regresor sklearn/XGB (Nivel 0.75) | Tareas de predicción continua |
| RunPod Flash | Entrenamiento GPU serverless mediante SDK Python (7B–70B) | El modelo es demasiado grande para la A5000 local — reemplaza /ops-runpod para entrenamiento |
/gpt-lab | Evaluar GPT contra la línea base del profesor | Después del entrenamiento, antes de la promoción |
/classifier-lab | Evaluar precisión/F1 del clasificador | Después del entrenamiento del clasificador |
/prompt-lab | Rediseñar prompts cuando se detecta una meseta | Acuerdo estancado en 80-90% |
/scillm | Profesor de Nivel 2 — crea etiquetas | Siempre (el profesor es la verdad absoluta) |
Uso
CLI
# Diagnosticar qué necesita una tarea
./run.sh diagnose --task stress-test-grader
# Bucle de auto-mejora completo y autónomo
./run.sh auto-improve --task stress-test-grader
# Entrenar un tipo de modelo específico
./run.sh train --task stress-test-grader --type gpt
./run.sh train --task sparta-ambiguity --type classifier
# Evaluar un modelo
./run.sh evaluate --task stress-test-grader --type gpt
# Promocionar un modelo aprobado (desactiva el modo sombra)
./run.sh promote --task stress-test-grader --type gpt
# Cosechar etiquetas del profesor desde shadow.jsonl
./run.sh harvest --task stress-test-grader --since 24h
# Mostrar estadísticas de acuerdo en sombra para todas las tareas
./run.sh status
# Ejecutar autoevaluación completa (ciclo entrenar → evaluar → promocionar en datos de prueba)
./run.sh self-test
API de Python
from assistant_lab import AssistantLab
lab = AssistantLab()
# Diagnosticar: ¿qué necesita esta tarea?
diagnosis = lab.diagnose("stress-test-grader")
# → {"has_gpt": False, "has_classifier": False, "shadow_agreement": 0.0, ...}
# Auto-mejorar: decidir + entrenar + evaluar + promocionar
result = lab.auto_improve("stress-test-grader")
# → {"actions": ["trained gpt", "evaluated (passing=True)", "promoted"]}
# Pasos manuales
lab.train("stress-test-grader", model_type="gpt")
lab.evaluate("stress-test-grader", model_type="gpt")
lab.promote("stress-test-grader", model_type="gpt")
Fábrica de Modelos
El motor principal es ModelFactory (de /common/model_factory.py).
/assistant-lab lo envuelve con CLI + diagnósticos + informes.
Umbrales de Acuerdo en Sombra
| Tasa de Acuerdo | Acción | Justificación |
|---|---|---|
| >= 90% | Promocionar | El estudiante coincide de forma fiable con el profesor |
| 80-90% | /prompt-lab rediseñar | Meseta — los prompts pueden ser el límite |
| 70-80% | Reentrenar con más etiquetas | Más datos probablemente ayuden |
| < 70% | Reentrenamiento agresivo | Cambiar la arquitectura o el modelo base |
| < 50 muestras | Esperar | No hay suficientes datos para decidir |
Datos Mínimos de Entrenamiento (NO NEGOCIABLE)
NO llames a /create-gpt train ni a /create-classifier train con datos insuficientes.
| Tipo de Modelo | Mínimo de Muestras | Regla |
|---|---|---|
| GPT (QLoRA SFT) | 1,000+ en total | < 1,000 → se queda en el profesor de Nivel 2 |
| Clasificador (sklearn/SetFit) | 200 por clase | n_samples / n_classes >= 200 |
| Regresor | 100+ en total | Guía estándar de sklearn |
Evidencia: sparta_stress_grading se entrenó con 246 muestras → 33.7% de acuerdo.
Eso son 4 meses de etiquetas en sombra desperdiciadas porque el modelo se entrenó demasiado pronto.
Recolecta primero, entrena cuando estés listo.
Flujo de Datos de Entrenamiento
Profesor de Nivel 2 (scillm a través de persona)
↓ etiquetas guardadas en shadow.jsonl
↓
/assistant-lab harvest --task X
↓ extrae pares de entrada+salida
↓
/create-gpt train --task X --data labels.jsonl
↓ QLoRA en Qwen2.5-1.5B (por defecto)
↓
/gpt-lab benchmark --task X
↓ comparar estudiante vs profesor
↓
/assistant-lab promote --task X --type gpt
↓ actualiza model_registry.json, shadow_mode=false
Entrenamiento Remoto (RunPod Flash)
Para modelos demasiado grandes para la RTX A5000 local (24GB de VRAM, máx. ~1.7B con LoRA),
assistant-lab usa RunPod Flash — el SDK Python serverless sin Docker,
sin SSH y sin sobrecarga de rsync. Flash reemplaza /ops-runpod para todos los
caminos de entrenamiento. /ops-runpod se conserva solo para servidores de inferencia persistentes.
Cuándo Usar Flash
| Tamaño del Modelo | A5000 Local | ¿Flash Necesario? | GPU |
|---|---|---|---|
| 0.5–1.7B | LoRa cabe | No | ./run.sh train (local) |
| 3–7B | No cabe | Sí | B200 (preferida) o H200 |
| 8–13B | Imposible | Sí | B200 (preferida) o H200 |
Tipos de GPU Flash
| GPU | VRAM | Notas |
|---|---|---|
B200 | 192 GB HBM3e | La más rápida; 3–5× H200 en MoE / contexto largo |
H200 | 192 GB HBM3 | Buena disponibilidad; línea base sólida |
Facturación: pago por segundo, máximo de 7 días de ejecución por trabajo.
Costos estimados de Flash (aproximados)
| Tamaño del Modelo | GPU | Tiempo de Entrenamiento Est. | Costo Est. |
|---|---|---|---|
| 7B QLoRA SFT | B200 | ~1–2 hrs | ~ $5–15 |
| 7B QLoRA SFT | H200 | ~2–3 hrs | ~ $8–20 |
| 13B QLoRA SFT | B200 | ~2–4 hrs | ~ $10–25 |
| 13B QLoRA SFT | H200 | ~3–5 hrs | ~ $12–30 |
Comandos
# Paso 1: Siempre estimar el costo primero
./run.sh estimate --task taxonomy-assessor --target flash --gpu B200 --size 7B
# Paso 2: Entrenar en Flash B200 (requiere --confirm por seguridad)
./run.sh train --task taxonomy-assessor --target flash --gpu B200 --size 7B --confirm
# Entrenar en Flash H200
./run.sh train --task taxonomy-assessor --target flash --gpu H200 --size 13B --confirm
# Con modelo base personalizado
./run.sh train --task taxonomy-assessor --target flash --gpu B200 --size 8B \
--base-model meta-llama/Llama-3.1-8B-Instruct --confirm
# Con cuantización diferente
./run.sh train --task qra-validator --target flash --gpu B200 --size 7B \
--quantize Q5_K_M --confirm
Pipeline de Entrenamiento Flash
estimate --target flash --gpu B200 --size 7B
↓
train --target flash --gpu B200 --confirm
├─ 1. Estimación de costos + límite de presupuesto
├─ 2. Trabajo serverless Flash enviado (SDK Python — sin Docker/SSH)
├─ 3. Dataset transmitido al trabajador Flash
├─ 4. Entrenamiento QLoRA / SFT se ejecuta en B200/H200 (192GB VRAM)
├─ 5. Pesos del modelo descargados a /mnt/storage12tb/models/
├─ 6. create-gpt export --quantize Q4_K_M (GGUF)
└─ 7. Evaluar + auto-promocionar si aprueba
Barreras de Seguridad
- Límite de presupuesto:
--max-cost(por defecto $15.00) bloquea el entrenamiento si la estimación excede el límite - Confirmación: Debe pasar
--confirm— sin él, muestra el costo y sale - Auto-destrucción: El trabajo Flash se cancela al salir (incluso en caso de error, mediante trap)
- Registro de métricas: Cada entrenamiento Flash se registra en
lab_metrics.jsonl
Integración con el Bucle de Auto-Mejora
Los modelos entrenados de forma remota se integran con la misma cascada que los modelos locales:
Nivel 0: Heurístico (gratuito, instantáneo)
Nivel 0.5: Clasificador (local, gratuito)
Nivel 1.5: GPT local ≤1.7B (create-gpt, gratuito después del entrenamiento)
Nivel 1.5: GPT remoto 3-13B (train-remote, gratuito después del entrenamiento) ← NUEVO
Nivel 2: scillm/DeepSeek V3 (Chutes, $0.12/1K llamadas)
Un modelo de 7-13B en el Nivel 1.5 puede reducir significativamente las escalaciones al Nivel 2 (Chutes), potencialmente pagando su costo de entrenamiento con la reducción de excedentes.
Relación con Otros Skills
/monitor-skills ──→ "el skill X no está saludable"
↓
/assistant-lab ──→ diagnosticar → entrenar → evaluar → promocionar
↓
/assistant ──────→ usa el modelo promocionado en tiempo de inferencia
/monitor-skills: Observa TODOS los skills. Detecta problemas. Reporta salud./assistant-lab: Arregla los modelos de /assistant. Entrena, evalúa, promociona./assistant: Ejecuta inferencia. Usa cualquier modelo que el laboratorio haya producido.
Contrato
- Entrada: Nombre de la tarea + tipo de modelo opcional
- Salida: Diagnóstico, resultados de entrenamiento, resultados de evaluación, estado de promoción
- Dependencias: model_factory.py (de /common), skills create-* y *-lab
- Métricas: Agrega a
~/.pi/assistant/lab_metrics.jsonl