FASE 12 transforma AI-LAB de un runtime que recuerda y ejecuta bajo control a un sistema que aprende patrones operativos y propone mejoras reales.

Regla sagrada: NO autoejecuta cambios críticos. Aprende → propone → policy valida → Albert aprueba.

Pattern Learner ──→ Recommendation Engine ──→ Policy Gate ──→ Pending Queue
↑ ↑ ↑ │
Qdrant + JSONL Context Efficiency optimizer_policy │
Approve/Reject
Sandbox Runner
Audit Trail

runtime/autonomous/action_types.py

Constantes compartidas para evitar errores de nombres hardcodeados:

BOOST_MODEL_WEIGHT = "boost_model_weight"
PENALIZE_MODEL_WEIGHT = "penalize_model_weight"
INCREASE_SPEED_BIAS = "increase_speed_bias"
DECREASE_CONTEXT_BUDGET = "decrease_context_budget"
TUNE_RECALL_CHARS = "tune_recall_chars"
TUNE_RECALL_SCORE = "tune_recall_score"
TUNE_RECALL_MEMORIES = "tune_recall_memories"
TUNE_PROFILE_MAX_TOKENS = "tune_profile_max_tokens"

optimizer_policy.py y runtime_optimizer.py ahora importan desde aquí, eliminando el bug donde boost_speed_weightboost_model_weight.

runtime/memory/pattern_learner.py

PatrónFuenteDispara cuando…
repeated_node_failureQdrant incidents≥2 fallos críticos en mismo nodo
high_critical_ratioQdrant incidents>30% de incidents son critical
peak_failure_hourQdrant incidentsUna hora UTC concentra >20%
latency_trendsrouting_historyDeriva >10% en latencia reciente
PatrónFuenteDispara cuando…
high_budget_recurringcognitive_history.jsonlbudget_used > 80% en ≥3 de últimas 10 entradas
recall_bloatcognitive_history.jsonlrecall_chars medio > 2000
degrading_modelrouting_history.jsonlsuccess_rate reciente cae >10% vs global
high_latency_modelrouting_history.jsonllatencia reciente > 20s y sube >15%
recurring_low_recall_qualitycognitive_history + incidentsquality_score < 0.5 recurrente
noisy_incidentsQdrant incidents>50% de incidents son severidad info

Entry point: run_all(days=7) → lista de patrones.

Endpoints en Live API (:8084):

EndpointDescripción
GET /api/learning/patternsPatrones detectados (run_all)
GET /api/learning/recommendationsRecomendaciones generadas
GET /api/learning/model-performanceRendimiento por modelo
GET /api/learning/context-efficiencyEficiencia de contexto
GET /api/learning/recall-threshold?collection=&q=&limit=Threshold óptimo de recall

runtime/learning/recommendation_engine.py

Convierte patrones + eficiencia en acciones propuestas:

generate_recommendations(patterns, efficiency_results, model_performance)

Cada recomendación incluye:

  • evidence — fuentes concretas (routing_history: 7 requests > 60s)
  • confidence — 0-1 basado en datos observados
  • risk — low / medium / high
  • expected_impact — estimación cualitativa
  • rollback — cómo deshacer el cambio

Mapeo patrón → acción:

PatrónAcción propuesta
high_budget_recurringtune_recall_chars — reducir max_chars
recall_bloattune_recall_chars — reducir chars
degrading_modelpenalize_model_weight — bajar peso
high_latency_modelpenalize_model_weight — bajar peso
repeated_node_failureincrease_speed_bias — evitar nodo
high_critical_ratiodecrease_context_budget — reducir carga
fast_bloat (eficiencia)tune_profile_max_tokens — compactar fast
reasoning_starved (eficiencia)tune_recall_memories — ampliar reasoning

runtime_optimizer.py actualizado con pipeline completo:

  1. _read_sources() → routing + cognitive + model perf
  2. pattern_learner.run_all() → patrones
  3. context_efficiency.batch_evaluate() → scores
  4. recommendation_engine.generate_recommendations() → propuestas
  5. _queue_recommendations() → policy gate + pending queue
  6. _evaluate_outcomes() → revisar ajustes aplicados hace >1h

Ajustes permitidos (inicialmente):

  • max_tokens por perfil (fast/coding/reasoning/general)
  • recall max_chars — chars de recall inyectados
  • recall min_score — umbral de similitud
  • recall max_memories — número máximo de memorias

No permitido todavía: temperatura, modelo principal, systemd, Docker, red, Cloudflare.

runtime/learning/context_efficiency.py

Mide si el contexto inyectado aporta valor:

efficiency = utility / cost
EtiquetaSignificado
goodefficiency ≥ 0.5
fairefficiency ≥ 0.2
poorefficiency < 0.2
failedrequest fallida

Casos detectables:

DetecciónQué significaRecomendación
overcontextMucho contexto + mala calidadReducir recall chars o subir min_score
undercontextPoco contexto + falloAmpliar recall limit
fast_bloatFast con contexto excesivoCompactar perfil fast
reasoning_starvedReasoning con baja calidadSubir budget de recall
wasted_contextBudget alto + calidad bajaReducir contexto total

Funciones en quality_assessment.py:

optimize_recall_threshold(results, current_threshold, precision_target=0.7)

Analiza la distribución de scores para encontrar el threshold óptimo que maximiza precisión mientras minimiza ruido.

  • Evalúa thresholds candidatos incluyendo puntos de corte naturales (score gaps > 0.05)
  • Retorna suggested_threshold, expected_precision, expected_noise
  • Se puede consultar vía GET /api/learning/recall-threshold

Además, qdrant_store.recall() ahora acepta parámetro threshold (default 0.0) que se propaga a search_collection().

/ops/learning — mismo estilo visual que /ops/memory y /ops/commands:

  • Patrones Detectados — tarjetas por severidad con evidencia y recomendación
  • Recomendaciones — tabla con acción, target, riesgo, confianza, impacto esperado y rollback
  • Eficiencia de Contexto — promedio de efficiency, cost, utility, detecciones
  • Recall Threshold — threshold actual vs sugerido, precisión esperada, contaminación

Cada recomendación incluye:

{
"evidence": [
"routing_history: 7 fast requests > 60s",
"cognitive_history: avg prompt_tokens 1275",
"incidents: 3 high_latency"
],
"expected_impact": "reduce latency 10-20%",
"rollback": "restore previous profile config"
}

Todas las recomendaciones pasan por:

  1. optimizer_policy.validate_action() — policy gate
  2. pending_adjustments.create_pending() — cola de aprobación
  3. governance_audit.jsonl — compliance trail
  4. Qdrant incidents — trazabilidad semántica
ArchivoPropósito
runtime/autonomous/action_types.pyConstantes de acciones (evita bugs)
runtime/learning/context_efficiency.pyContext efficiency scoring
runtime/learning/recommendation_engine.pyPatrones → recomendaciones
apps/ialab-docs/src/pages/ops/learning.astroLearning dashboard
ArchivoCambio
runtime/autonomous/optimizer_policy.pyUsar action_types en vez de strings
runtime/autonomous/runtime_optimizer.pyPipeline completo + evaluate_outcomes
runtime/memory/pattern_learner.py+6 nuevos detectores + run_all()
runtime/memory/quality_assessment.py+optimize_recall_threshold()
runtime/memory/qdrant_store.py+threshold param en recall()
runtime/state/live_api.py+5 endpoints learning API