Volver al portfolio

AI Gateway

Gateway centralizado para múltiples proveedores de AI

Backend AI Multi-provider Microservice

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.

10
Endpoints
3
Modelos
3
Tests

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

Python
FastAPI
PostgreSQL
Redis
Docker
SQLAlchemy
Groq Groq
Gemini Gemini
OpenAI OpenAI
OpenCode 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.