ModelRouter utiliza una arquitectura por capas diseñada para la extensibilidad y la resiliencia en entornos asíncronos.
┌─────────────────────────────────────────────────────────────┐
│ FastAPI (HTTP Layer) │
│ /chat /stream /health │
└─────────────────────┬───────────────────────────────────────┘
│
┌─────────────────────▼───────────────────────────────────────┐
│ Controllers │
│ • Validación (Pydantic) | Autorización | Manejo SSE │
└─────────────────────┬───────────────────────────────────────┘
│
┌─────────────────────▼───────────────────────────────────────┐
│ Orchestrator │
│ • Timeouts globales | Coordinación | Cancelación │
└─────────────────────┬───────────────────────────────────────┘
│
┌─────────────────────▼───────────────────────────────────────┐
│ Router │
│ • Selección | Fallback | Blacklist | Estado en Redis │
└─────────────────────┬───────────────────────────────────────┘
│
┌─────────────┴─────────────┬─────────────────┐
┌───────▼────────┐ ┌────────▼───────┐ ┌────▼────────┐
│ GroqAdapter │ │ OpenRouter │ │ Ollama │
└───────┬────────┘ └────────┬───────┘ └─────┬───────┘
└─────────────┬─────────────┴──────────────────┘
┌───────▼────────┐
│ HTTPClient │
└────────────────┘
-
El cliente envía una petición HTTP a FastAPI (endpoint
/chato/stream). -
El Controller: Valida la API Key y el esquema del mensaje.
-
El Orchestrator: Inicia un timer global. Si el proveedor principal falla o tarda demasiado, instruye al Router para buscar el siguiente.
-
El Router: Verifica en Redis si el proveedor está en "blacklist" por errores recientes.
-
El Adapter: Traduce el formato estándar de ModelRouter al formato específico del SDK/API del proveedor (Groq, OpenAI, etc).