Nota: este documento es research histórico (plan/hipótesis). Para el estado real implementado hoy, ver:

  • /docs/memory/qdrant-memory-layer
  • /docs/runtime-truth-layers

El bloque HARD FACTS actual es texto plano. El modelo lo parsea línea por línea y tiende a alucinar campos que no existen (routing_confidence, context_budget_used, etc.). Con JSON estructurado el modelo consulta por clave → valor directamente, eliminando la interpolación semántica.

Además, la memoria operacional actual vive en RAM y muere al reiniciar. Qdrant ya está corriendo en el cluster (:6333) y nomic-embed-text-v1.5 está cargado en RX9070. No hace falta instalar nada nuevo.

Opción C — Híbrido JSON + Qdrant en paralelo:

ComponenteEnfoque
HARD FACTSBloque JSON al inicio + texto detallado debajo (híbrido)
Memoria persistenteQdrant con 6 colecciones, hooks no-invasivos try/except
Embeddingnomic-embed-text-v1.5 vía LM Studio API, asíncrono (cola background)
Routing históricoSeed desde routing_history.jsonl (107 eventos) + cognitive_history.jsonl (106)
CapaFunción
JSONParsing rápido y preciso del LLM. Consulta por clave → valor.
TextoRedundancia humana + contexto narrativo. Respaldo si el JSON falla.

Esto reduce drásticamente la hallucination by interpolation: el modelo recibe datos precisos con delimitadores explícitos, no texto abierto a interpretación.

[HARD_FACTS_BEGIN]
=== AI-LAB RUNTIME (HARD FACTS) ===
{
"schema_version": "1.0",
"runtime": {
"mode": "plan",
"version": "1.1.0",
"timestamp": "2026-05-16T18:00:00Z",
"uptime_hours": 2.2
},
"gpu_nodes": [
{
"name": "rx9070-node",
"host": "192.168.1.50",
"friendly_name": "RX9070",
"online": true,
"vram_gb": 16,
"latency_ms": 2,
"models": [
{
"id": "qwen2.5-coder-14b-instruct",
"ctx": 32768,
"skills": ["coding", "debugging", "refactor", "testing"]
},
{
"id": "llama-3.1-8b-instruct",
"ctx": 128000,
"skills": ["fast", "general", "chat", "summarisation"]
},
{
"id": "text-embedding-nomic-embed-text-v1.5",
"ctx": 8192,
"skills": ["embeddings", "semantic-search", "rag"]
}
]
},
{
"name": "rx7900xt-node",
"host": "192.168.1.60",
"friendly_name": "RX7900XT",
"online": false,
"vram_gb": 20,
"latency_ms": null,
"models": []
}
],
"system": {
"hostname": "ubuntu-ialab",
"ram": {"total_gib": 7.2, "used_gib": 2.5, "available_gib": 4.7},
"disk": {"total_g": 97, "used_g": 70, "pct": 76},
"docker_containers": 16,
"load": [0.28, 0.39, 0.43],
"uptime_hours": 2.2
},
"services": [
{"name": "ailab-router", "active": true, "running": true},
{"name": "ailab-docs", "active": true, "running": true},
{"name": "ailab-gateway", "active": true, "running": true},
{"name": "ailab-heartbeat", "active": true, "running": true},
{"name": "ailab-live-api", "active": true, "running": true},
{"name": "ailab-live-state", "active": true, "running": true},
{"name": "ailab-runner", "active": true, "running": true},
{"name": "ailab-traefik", "active": true, "running": false}
],
"docker": {
"total": 16,
"main": [
"traefik", "open-webui", "qdrant", # LEGACY: ollama removed
"cadvisor", "node-exporter", "promtail", "portainer"
],
"nginx_sites": [
"musquera-web", "agithome", "albertskills",
"agitservices", "albertskills-amd-multi"
]
},
"routing": {
"total_events": 107,
"cognitive_snapshots": 106,
"model_performance": {
"qwen2.5-coder-14b-instruct": {
"requests": 7,
"success_rate": 1.0,
"performance_index": 97,
"failover_rate": 0.0
}
}
},
"health": {
"watchdog": {"ok": 6, "total": 6, "status": "healthy"},
"active_sessions": 1
},
"pending_implementations": [
"routing_confidence",
"latency_per_request",
"puppet_ansible",
"gateway_api_write",
"rx7900xt_diagnosis",
"ci_cd_automation",
"auto_scaling"
],
"sites": [
{"url": "ai-lab.labrazahome.com", "access": "public", "tech": "Cloudflare Pages + Astro"},
{"url": "blog-ai-lab.labrazahome.com", "access": "private", "tech": "Cloudflare Tunnel + Traefik"}
]
}
[HARD_FACTS_END]
=== DETALLE (texto) ===
GPU NODES:
🟢 rx9070-node → 192.168.1.50 (ONLINE, 16GB VRAM, 2ms)
Models:
· qwen2.5-coder-14b-instruct (32768 ctx, coding/debugging)
· llama-3.1-8b-instruct (128000 ctx, fast/general)
· text-embedding-nomic-embed-text-v1.5 (8192 ctx, embeddings)
🔴 rx7900xt-node → 192.168.1.60 (OFFLINE, 20GB VRAM)
No models available (node offline)
SYSTEM RESOURCES:
· RAM: 7,2Gi total / 2,5Gi used / 4,7Gi available
· Disk: 97G total / 70G used (76%)
· Uptime: 2 hours, 12 minutes
· Load: 0.28, 0.39, 0.43
· Docker: 16 containers running
...
  • routing_confidence, avg_latency_ms NO existen en el JSON
  • Solo aparecen en pending_implementations como funcionalidades pendientes
  • latency_ms: null en nodos offline (null ≠ 0, el modelo no debe interpretarlo como dato real)
  • model_performance solo incluye modelos con datos reales en el histórico

Las seis colecciones, cada una con schema_version y event_type explícitos.

CampoTipoFuente
schema_versionstring"1.0"
event_typestringrouting_success, routing_failover, routing_error
idUUIDGenerado
timestampISO datetimerouting_history.jsonl
task_typestringrouting_history.jsonl
modelstringrouting_history.jsonl
nodestringrouting_history.jsonl
hoststringrouting_history.jsonl
latency_msintrouting_history.jsonl
successboolrouting_history.jsonl
streamboolrouting_history.jsonl
failoverboolrouting_history.jsonl
errorstring?routing_history.jsonl
embeddingfloat[768]nomic-embed-text-v1.5
CampoTipoFuente
schema_versionstring"1.0"
event_typestringcontext_shaping, budget_truncation, memory_digest
idUUIDGenerado
timestampISO datetimecognitive_history.jsonl
task_typestringcognitive_history.jsonl
modelstringcognitive_history.jsonl
context_sizeintcognitive_history.jsonl
budget_usedfloatcognitive_history.jsonl
shaping_latency_msintcognitive_history.jsonl
files_usedintcognitive_history.jsonl
files_used_namesstring[]cognitive_history.jsonl
working_memory_usedboolcognitive_history.jsonl
embeddingfloat[768]nomic-embed-text-v1.5
CampoTipoFuente
schema_versionstring"1.0"
event_typestringweight_adjustment, policy_change, snapshot_restore
optimizer_history.jsonl
embeddingfloat[768]nomic-embed-text-v1.5
CampoTipoFuente
schema_versionstring"1.0"
event_typestringwatchdog_failure, 502_upstream_error, node_offline
idUUIDGenerado
timestampISO datetimewatchdog / router errors
severitystringlow, medium, high, critical
messagestringDescripción del incidente
nodestring?Nodo afectado
resolvedboolEstado actual del incidente
embeddingfloat[768]nomic-embed-text-v1.5

Snapshot periódico del JSON HARD FACTS completo. event_type: periodic_snapshot, pre_action_snapshot.

Persistencia entre reinicios del session working memory. event_type: session_start, session_turn, session_end.

ColecciónRetenciónMotivo
routing_history90 díasPatrones de routing estacionales
cognitive_history90 díasContext decay natural
optimizer_history180 díasDecisiones valiosas a largo plazo
incidentsIlimitadoFallos pasados siempre relevantes
runtime_snapshots30 díasSolo recall reciente
working_memory7 díasSolo sesiones activas

Implementado como retention_days en config de cada colección + cron semanal.

NO se embebe inline en el request path del router.

Request → router → LM Studio → response
jsonl append (síncrono, inmediato)
Background embedder (cola asíncrona)
qdrant upsert (batch cada 10s o 20 eventos)
  • Modelo: nomic-embed-text-v1.5 (dim 768, ya cargado en RX9070)
  • Batch: máximo 10 eventos por request a LM Studio
  • Timeout: 5s por batch
  • Daemon: hilo background dentro del proceso router, o script independiente
  • Fallback: si el embedder falla, los JSONL siguen acumulándose — no se pierde nada

Todos siguen el patrón try/except ImportError:

try:
from runtime.memory.qdrant_store import store_embedding
store_embedding(collection="routing_history", payload=data, embedding=emb)
except ImportError:
pass
ArchivoEventoColección
runtime/routing/routing_history.pyNuevo evento de ruteorouting_history
runtime/cognitive/cognitive_history.pyNuevo snapshot cognitivocognitive_history
runtime/autonomous/optimizer_history.pyNueva acción del optimizadoroptimizer_history
runtime/state/system_state.pyActualización de estadoruntime_snapshots
runtime/llm/router_api.pyError 502 upstreamincidents
runtime/watchdog/runtime_watchdog.pyFallo de watchdogincidents
runtime/agent/context_shaper.pyContext shaping completadoworking_memory
{
"query": "¿Qué pasó la última vez que RX7900XT falló?",
"collection": "incidents",
"limit": 5,
"threshold": 0.75
}

Respuesta:

{
"results": [
{
"score": 0.89,
"payload": {
"schema_version": "1.0",
"event_type": "watchdog_failure",
"timestamp": "2026-05-14T12:30:00Z",
"severity": "high",
"message": "RX7900XT timeout en health check",
"node": "rx7900xt-node",
"resolved": false
}
}
]
}

Búsqueda semántica específica en la colección incidents, con filtro por event_type y severity.

Cruza routing_history, cognitive_history, incidents para recall general. El endpoint más potente conceptualmente: ya no busca documentos, recuerda experiencias operacionales similares.

Tres secciones:

  1. Episodios Recientes — feed con últimos eventos de routing + cognitivos
  2. Incidentes Similares — búsqueda semántica de fallos pasados
  3. Decisiones Repetidas — patrones de routing detectados por similitud de embedding
┌─────────────────────────────────────┐
│ 🧠 Memoria Operacional Cognitiva │
├─────────────────────────────────────┤
│ 🔍 [Buscar en memoria... ] │
├─────────────────────────────────────┤
│ ┌─ Episodios Recientes ───────────┐│
│ │ 🟢 12:30 - routing: qwen2.5... ││
│ │ 🟢 12:28 - cognitive snapshot ││
│ │ 🔴 12:00 - watchdog check pass ││
│ └──────────────────────────────────┘│
│ ┌─ Incidentes Similares ──────────┐│
│ │ 📌 Score: 0.89 ││
│ │ "RX7900XT timeout en health..." ││
│ │ 📌 Score: 0.76 ││
│ │ "Failover a llama3.1 tras..." ││
│ └──────────────────────────────────┘│
└─────────────────────────────────────┘
RiesgoProbabilidadMitigación
Embedding lento satura LM StudioBajaBatch max 10, timeout 5s, cola asíncrona
Qdrant sin memoria (container reinicia)MediaJSONL files = source of truth, Qdrant = cache semántico
Modelo ignora JSON y usa textoMediaSystem prompt: “JSON es autoritativo, texto es respaldo”
nomic-embed no disponibleBajatry/except: sin embedding = sin Qdrant, runtime no se rompe
Crecimiento ilimitado de QdrantMediaRetention policy por colección + cron semanal de poda
DíaMañanaTarde
1context_shaper.py → JSON híbridoqdrant_store.py + qdrant_collections.py
2Embedding pipeline (LM Studio API)Routing hook + seed script desde JSONL
3API endpoints (/api/memory/search, etc.)Astro /ops/memory + state snapshot hook

12. Resultado de implementación (16 May 2026)

Section titled “12. Resultado de implementación (16 May 2026)”

Día 1 ✅ — JSON Híbrido + Qdrant Core

Section titled “Día 1 ✅ — JSON Híbrido + Qdrant Core”
ComponenteEstadoCommit
JSON HARD FACTS (context_shaper.py)
Qdrant store + collections
Hooks routing + cognitive
ColecciónPointsVectores 768-dim
routing_history132
cognitive_history135
Tiempo total seed2.5s231 embeddings
EndpointArchivoURL
+GET ?collection=routing_history&q=coding
+GET ?q=error&severity=warning
+GET ?q=latencia&limit=5
AstroPortal visual con búsqueda
PerfilPromptModeloAvgMinMaxTokens
fastHolallama-3.1-8b70.3s66.672.34127
codingSingleton Pythonqwen2.5-coder-14b42.6s35.256.53890
reasoningLM Studio → vLLMllama-3.1-8b64.7s53.170.54073
ColecciónPointsRetentionEstado
13290d
13590d
2180d⚠️ Sin vector
0📝 Vacía
030d📝 Vacía
07d📝 Vacía
Seed previo
Seed previo
  • Backfill embeddings optimizer_history
  • Incidentes automáticos desde watchdog
  • State snapshot hook periódico (cron)
  • Recall automático en prompt del router

12. Resultado de implementacion (16 May 2026)

Section titled “12. Resultado de implementacion (16 May 2026)”
ComponenteEstadoCommit
JSON HARD FACTS (context_shaper.py)OK1bfa064
Qdrant store + collectionsOK570714e
Hooks routing + cognitiveOK570714e
ColeccionPointsVectores 768-dim
routing_history132OK
cognitive_history135OK
Tiempo total seed2.5s231 embeddings
EndpointArchivoURL
/api/memory/searchlive_api.py + router_api.pyGET collection=routing_history q=coding
/api/incidents/searchlive_api.py + router_api.pyGET q=error severity=warning
/api/runtime/recalllive_api.py + router_api.pyGET q=latencia limit=5
Astro /ops/memorypages/ops/memory.astroPortal visual con busqueda
PerfilPromptModeloAvgMinMaxTokens
fastHolallama-3.1-8b70.3s66.672.34127
codingSingleton Pythonqwen2.5-coder-14b42.6s35.256.53890
reasoningLM Studio a vLLMllama-3.1-8b64.7s53.170.54073
ColeccionPointsRetentionEstado
routing_history13290dOK
cognitive_history13590dOK
optimizer_history2180dSin vector
incidents0infinitoVacia
runtime_snapshots030dVacia
working_memory07dVacia
agent_knowledgeSeed previo
ai_lab_memorySeed previo
  • Backfill embeddings optimizer_history
  • Incidentes automaticos desde watchdog
  • State snapshot hook periodico (cron)
  • Recall automatico en prompt del router