AI Gateway
Gateway centralizado para múltiples proveedores de AI
API REST que unifica acceso a Groq, Gemini y OpenCode detrás de un solo endpoint. Incluye gestión de apps con API keys, sesiones multi-turno, caché Redis, y observabilidad completa.
1. Arquitectura
Routers
Endpoints FastAPI con validación Pydantic y dependencias
Services
Lógica de negocio con gestión de sesiones, caché y orquestación
Providers
Abstracción de proveedores AI con factory pattern y ABC
2. Características
Core
Multi-Provider
Soporte para Groq, Gemini y OpenCode con abstracción de providers y factory pattern
Sesiones Multi-Turno
Conversaciones persistentes con historial completo y truncamiento automático
Gestión de Apps
Registro de apps con API keys únicas y gestión de cuotas
History Truncation
Truncamiento automático de historial para optimizar costos de tokens
Seguridad
Autenticación Dual
Master key para gestión de apps y API keys por app para chat
API Key Hashing
Hashing de API keys con bcrypt y prefijo frq_ para identificación
Infraestructura
Caché Redis
Caché de API keys y sesiones con TTL configurable y degradación graceful
Observabilidad
Métricas Prometheus con contadores de requests AI y latencia por provider
Async/Await
Arquitectura completamente asíncrona con asyncpg y aiohttp
Production Ready
Docker multi-stage, Alembic migrations y configuración por entorno
3. Tech Stack
OpenCode 4. API Reference
| Módulo | Endpoints |
|---|---|
| Apps | 4 |
| Chat | 6 |
| Health | 2 |
5. Decisiones de Diseño
Provider Abstraction
ABC BaseProvider define la interfaz común. Cada provider implementa su adaptación específica. Factory pattern permite agregar nuevos providers sin modificar código existente.
Client-Side UUIDs
Los UUIDs se generan en Python con uuid.uuid4() en lugar de usar defaults de base de datos. Esto permite retornar el ID inmediatamente después de crear un recurso.
Denormalized app_id
La tabla messages tiene app_id además de session_id. Esto permite queries directas de uso por app sin joins a través de sessions.
Redis Graceful Degradation
Todas las operaciones Redis están envueltas en try/except que loguea y degrada silenciosamente. La app funciona sin Redis, haciéndolo opcional.