JuanandClaude Opus 4.7 eac2ed02a4 fix(guardrails): Presidio usa en_core_web_sm cacheado (en_core_web_lg no está en la imagen)
`detect_pii` instanciaba `AnalyzerEngine()` sin configuración, así que Presidio
intentaba cargar su modelo por defecto `en_core_web_lg` (~560 MB), que no está en
la imagen Docker — `core/Dockerfile` instala `en_core_web_sm`. Resultado: el
validador fallaba con `[E050] Can't find model 'en_core_web_lg'` y, al ser la
política fail-closed, *toda* invocación quedaba `blocked_by_guardrail`. Además se
reinstanciaba el engine en cada llamada (caro; probablemente la causa del crash del
proceso al segundo invoke). Ahora:
  - `_presidio_analyzer()`: singleton perezoso con `NlpEngineProvider` → `en_core_web_sm`.
  - si Presidio no está instalado o el modelo no carga, se hace fallback a la
    detección por regex (antes solo se hacía fallback ante ImportError).
Detectado ejecutando el smoke de docker-compose (el venv local no tiene Presidio,
así que los tests usan la rama de regex y no lo veían).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 14:38:52 +02:00

🛡️ AgentForge

Plataforma profesional de gobernanza de agentes IA: catalogación, versionado de prompts y políticas, guardrails runtime, ejecución stateful con Human-in-the-Loop, observabilidad y trazabilidad end-to-end.

¿Por qué?

Poner agentes IA en producción sin una capa de gobierno produce sistemas opacos: prompts que cambian sin historial, validaciones inconsistentes, acciones de alto impacto sin supervisión, sin auditoría de decisiones. AgentForge aporta el plano de control mínimo que un equipo de plataforma necesita antes de operar agentes con impacto real.

Arquitectura

┌───────────────────────── docker-compose ──────────────────────────┐
│                                                                    │
│  ┌─────────────────────┐     HTTP/JSON     ┌────────────────────┐ │
│  │ agentforge-dashboard│ ────────────────► │ agentforge-core    │ │
│  │ Streamlit  :8501    │ ◄──────────────── │ FastAPI    :8000   │ │
│  └─────────────────────┘                   └────────────────────┘ │
│                                                                    │
│   Strategy pattern (Protocol) para LLMProvider, GuardrailEngine,  │
│   AgentRegistry. Persistencia mixta: YAML (definiciones), JSON    │
│   (registry), JSONL (logs append-only), SQLite (checkpoints).     │
└────────────────────────────────────────────────────────────────────┘

Detalles completos en ARCHITECTURE.md.

Quickstart

cp .env.example .env
docker compose up

Abre http://localhost:8501.

Funciona out-of-the-box (LLM_PROVIDER=mock, sin API keys). Si quieres usar Azure OpenAI real, edita .env.

Demo guiada (3 pasos)

  1. Registro → ver incident_analyzer y comparar v1 vs v2.
  2. Ejecutar → seleccionar el escenario 01_sip_registration_drop y pulsar Invocar. Verás el grafo recorrer validate_input → llm_reason → validate_output → propose_actions → approve_gate y pausarse en HITL.
  3. Aprobaciones → revisar las acciones propuestas (con risk_score y rollback_plan), aprobar las seguras y comprobar que la ejecución completa.

Capacidades implementadas

Feature Ubicación
Agent Registry core/src/agentforge_core/registry/repository.py
Versionado tipo Git agents/<name>/versions/ + registry/versioning.py
Guardrails runtime core/src/agentforge_core/guardrails/
LangGraph stateful + checkpointing core/src/agentforge_core/runtime/
Human-in-the-Loop nodo approve_gate + endpoints /approve y /reject
Observabilidad observability/logging.py (structlog + trace_id)
LLM provider abstraction core/src/agentforge_core/llm/
Política versionada policies/default/versions/v1.yaml

Variables de entorno

Ver .env.example.

Roadmap

Ver docs/futuro.md.

Estructura del repositorio

agentforge/
├── core/                 servicio FastAPI
├── dashboard/            servicio Streamlit
├── agents/               definiciones declarativas (YAML)
├── policies/             políticas de guardrails
├── data/                 estado runtime (gitignored)
├── tests/                pytest unit + integration
└── docs/                 documentación adicional

Tests

make install
make test         # solo unit
make test-all     # unit + integration
make lint         # ruff + mypy
make smoke        # docker-compose + curl health

Licencia

MIT (a confirmar).

S
Description
No description provided
Readme
290 KiB
Languages
Python 61.7%
HTML 37.2%
Dockerfile 0.8%
Makefile 0.3%