Servidor proxy que distribuye solicitudes entre múltiples proveedores de IA (Groq, Cerebras, Gemini) con balanceo automático y fallback inteligente.
- 🔄 Balanceo Round-Robin: Distribuye solicitudes entre los 3 proveedores
- 🛡️ Fallback Automático: Si un servicio falla, automáticamente usa el siguiente
- 🏥 Health Monitoring: Endpoint para verificar estado y estadísticas
- ✅ Validación de Entrada: Valida requests antes de procesarlos
- 📊 Logging Mejorado: Logs con timestamps y tracking de uso
- ⚡ Streaming: Respuestas en tiempo real con Server-Sent Events
- 🌐 CORS: Habilitado para desarrollo local
- Instala las dependencias:
bun install- Configura tus claves API en el archivo
.env:
GROQ_API_KEY=tu_clave_real_de_groq
CEREBRAS_API_KEY=tu_clave_real_de_cerebras
GOOGLE_API_KEY=tu_clave_real_de_google
PORT=3001Hemos incluido una colección completa de Postman con todas las peticiones pre-configuradas y tests automáticos:
- Importa el archivo
AI-Proxy.postman_collection.jsonen Postman - Consulta la guía completa en POSTMAN.md
La colección incluye:
- ✅ Health check
- ✅ Chat con Groq, Cerebras y Gemini
- ✅ Modo automático (round-robin)
- ✅ Conversaciones multi-turno
- ✅ Parámetros avanzados
- ✅ Tests automáticos integrados
bun run index.tsEl servidor iniciará en el puerto 3001 (o el configurado en .env).
Envía solicitudes de chat con streaming:
curl -X POST http://localhost:3001/chat \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user", "content": "Hola, ¿cómo estás?"}
]
}'Request:
{
"messages": [
{ "role": "system", "content": "Eres un asistente útil" },
{ "role": "user", "content": "¿Qué es TypeScript?" }
]
}Response: Stream de texto con los chunks de la respuesta
Verifica el estado del servidor y obtén estadísticas:
curl http://localhost:3001/healthResponse:
{
"status": "ok",
"timestamp": "2025-12-30T06:10:00.000Z",
"stats": {
"uptime": "3600s",
"services": {
"Groq": { "count": 10, "failures": 1 },
"Cerebras": { "count": 8, "failures": 0 },
"Gemini": { "count": 9, "failures": 2 }
}
}
}El servidor distribuye las solicitudes entre los tres proveedores de IA:
- Primera solicitud → Groq
- Segunda solicitud → Cerebras
- Tercera solicitud → Gemini
- Cuarta solicitud → Groq (y así sucesivamente)
Si un servicio falla (por API key inválida, límite de rate, error de red, etc.), el sistema automáticamente intenta con el siguiente servicio disponible:
Request → Groq (falla) → Cerebras (falla) → Gemini (éxito) → Response
Esto garantiza alta disponibilidad incluso cuando uno o más servicios están caídos.
- Groq:
llama-3.3-70b-versatile - Cerebras:
llama3.1-8b - Gemini:
gemini-2.0-flash-exp
ai-proxy-free/
├── services/
│ ├── groq.ts - Integración con Groq
│ ├── cerebras.ts - Integración con Cerebras
│ └── gemini.ts - Integración con Gemini
├── types.ts - Interfaces TypeScript
├── utils.ts - Utilidades (logging, validación, stats)
├── index.ts - Servidor principal
├── tsconfig.json - Configuración TypeScript
├── package.json - Dependencias
└── .env - Variables de entorno
El servidor proporciona logs detallados con timestamps:
[2025-12-30T06:10:00.000Z] INFO: 🚀 Server running on port 3001
[2025-12-30T06:10:05.123Z] INFO: Processing chat request with 2 messages
[2025-12-30T06:10:05.124Z] INFO: Attempt 1/3: Using service Groq
[2025-12-30T06:10:06.456Z] INFO: Successfully completed request with Groq
El servidor valida:
- Que exista un array
messages - Que cada mensaje tenga
roleycontent - Que el
rolesea válido:system,user, oassistant
Todas las respuestas de error son JSON estructurado:
{
"error": "Request must include 'messages' array"
}docker build -t ai-proxy-free .docker run -d \
-p 3001:3001 \
-e GROQ_API_KEY=tu_clave_groq \
-e CEREBRAS_API_KEY=tu_clave_cerebras \
-e GOOGLE_API_KEY=tu_clave_google \
--name ai-proxy \
ai-proxy-free-
Asegúrate de tener tus claves API en el archivo
.env -
Inicia el servicio:
docker-compose up -d- Ver logs:
docker-compose logs -f- Detener el servicio:
docker-compose downDocker incluye health checks automáticos que verifican el endpoint /health cada 30 segundos.
El proyecto usa TypeScript con configuración estricta. Los tipos globales de Bun están incluidos.
Si faltan variables de entorno, el servidor mostrará warnings pero continuará ejecutándose (los servicios sin API key fallarán cuando se usen).
- El servidor usa CORS abierto (
*) para facilitar el desarrollo local - Las respuestas se envían en formato Server-Sent Events (SSE)
- El fallback automático mejora significativamente la disponibilidad
- Las estadísticas se reinician cuando el servidor se reinicia
Problema: "All services failed"
- Solución: Verifica que al menos una API key sea válida en
.env
Problema: Errores de TypeScript
- Solución: Ejecuta
bun installpara instalar las dependencias
Problema: El servidor no inicia
- Solución: Asegúrate de tener Bun instalado y que el puerto 3001 esté disponible