Codex Multi-Provider Free Proxy
Codex Multi-Provider Free Proxy
Proxy local compatible con la API de OpenAI Responses, diseñado para conectar Codex CLI con modelos gratuitos de OpenRouter y, opcionalmente, Groq.
Permite centralizar la selección de modelos, gestionar varias API keys, aplicar mecanismos de recuperación ante errores y adaptar las peticiones de Codex a las APIs de los proveedores.
Versión documentada: 3.4.0 Estado: compilación y pruebas simuladas realizadas. No se garantiza la compatibilidad de todas las peticiones sin validación real con las cuentas de los proveedores.
Características
- Proxy local basado en FastAPI.
- Compatibilidad con Codex CLI mediante Responses API.
- Catálogo dinámico de modelos de OpenRouter.
- Filtrado de modelos gratuitos de OpenRouter.
- Integración opcional con Groq.
- Rotación de API keys.
- Cooldowns por clave, modelo y proveedor.
- Gestión de errores HTTP y límites de cuota.
- Bloqueo global cuando se alcanza la cuota diaria de OpenRouter.
- Sesión configurable de hasta 8 horas.
- Adaptación de herramientas
namespacede Codex a funciones compatibles con Groq. - Reconstrucción de namespaces en las respuestas de herramientas.
- Adaptación de herramientas web search.
- Fallback hacia
compound-betacuando está disponible en el catálogo de Groq. - Endpoint de salud del proxy.
- Logs locales.
Arquitectura
Codex CLI
|
| OpenAI Responses API
| http://127.0.0.1:8787/v1
|
v
FastAPI Local Proxy
|
|-- OpenRouter
| |-- Catálogo dinámico de modelos gratuitos
| |-- Rotación de API keys
| |-- Gestión de cuotas
| |-- Cooldowns
|
|-- Groq (opcional)
|-- Modelos permitidos explícitamente
|-- Adaptación de herramientas
|-- Fallback ante errores de TPM
|-- compound-beta, si está disponible
Requisitos
- Python 3.11 o superior.
- Codex CLI.
- Una API key de OpenRouter.
- Opcionalmente, una API key de Groq.
- Windows 11 o Fedora Linux.
Estructura del repositorio
codex-multi-provider-free-proxy/
├── proxy.py
├── .env.example
├── .gitignore
├── requirements.txt
├── run.ps1
├── README.md
└── tests/
El archivo proxy.py contiene la implementación completa del proxy.
Instalación en Windows 11
1. Crear el directorio
mkdir C:\AI\OpenRouterProxy
cd C:\AI\OpenRouterProxy
Copiar al directorio el archivo proxy.py.
2. Crear el entorno virtual
py -3 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
3. Instalar dependencias
pip install -r requirements.txt
Contenido de requirements.txt:
fastapi
uvicorn[standard]
httpx
python-dotenv
4. Configurar las variables de entorno
Crear el archivo .env a partir de .env.example.
Configuración de .env
# OpenRouter: obligatorio
OPENROUTER_API_KEYS=sk-or-v1-REEMPLAZAR
# Groq: opcional
GROQ_API_KEYS=
# Modelos Groq permitidos explícitamente.
# Comprobar previamente los IDs disponibles en la cuenta.
GROQ_FREE_MODELS=
# Token local del proxy
LOCAL_API_KEY=REEMPLAZAR_POR_TOKEN_SEGURO
# Configuración del proxy
PORT=8787
SESSION_HOURS=8
# Filtro del catálogo OpenRouter
MODEL_FILTER=free
# Caché del catálogo, en segundos
MODEL_CACHE_SECONDS=300
# Nivel de logging
LOG_LEVEL=INFO
Generar un token local
En PowerShell:
$token = [Convert]::ToHexString(
[Security.Cryptography.RandomNumberGenerator]::GetBytes(32)
)
$token
Asignar el token generado a LOCAL_API_KEY.
El token local es distinto de las claves de OpenRouter y Groq.
Configuración de Codex CLI
Codex debe apuntar al proxy local, no directamente a OpenRouter.
1. Configurar la variable de entorno
En PowerShell:
$env:CODEX_PROXY_TOKEN="EL_TOKEN_LOCAL_CONFIGURADO_EN_ENV"
Para persistirla en el usuario de Windows:
[Environment]::SetEnvironmentVariable(
"CODEX_PROXY_TOKEN",
"EL_TOKEN_LOCAL_CONFIGURADO_EN_ENV",
"User"
)
Después de establecerla de forma persistente, abrir una nueva terminal.
2. Configurar config.toml
Ubicación habitual:
%USERPROFILE%\.codex\config.toml
Configuración:
model_provider = "openrouter-proxy"
model = "openrouter/free"
model_reasoning_effort = "high"
[model_providers.openrouter-proxy]
name = "OpenRouter Local Proxy"
base_url = "http://127.0.0.1:8787/v1"
wire_api = "responses"
env_key = "CODEX_PROXY_TOKEN"
La variable CODEX_PROXY_TOKEN debe contener el mismo secreto que LOCAL_API_KEY en el .env del proxy.
Arranque del proxy
Windows PowerShell
Desde el directorio del proyecto:
.\.venv\Scripts\Activate.ps1
uvicorn proxy:app --host 127.0.0.1 --port 8787
El proxy estará disponible en:
http://127.0.0.1:8787/v1
Verificar el estado
Invoke-RestMethod `
-Uri "http://127.0.0.1:8787/health"
Consultar modelos
Invoke-RestMethod `
-Uri "http://127.0.0.1:8787/v1/models" `
-Headers @{
Authorization = "Bearer $env:CODEX_PROXY_TOKEN"
}
Fedora Linux
1. Crear el entorno
mkdir -p ~/apps/openrouter-proxy
cd ~/apps/openrouter-proxy
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
2. Proteger el archivo .env
chmod 600 .env
3. Ejecutar
source .venv/bin/activate
uvicorn proxy:app --host 127.0.0.1 --port 8787
Integración opcional con Groq
Groq es opcional. Para activarlo:
- Añadir la API key a
GROQ_API_KEYS. - Configurar explícitamente los modelos gratuitos autorizados en
GROQ_FREE_MODELS. - Verificar los IDs y las cuotas disponibles en la cuenta.
- Reiniciar el proxy.
El proxy no debe asumir que todos los modelos publicados por Groq son gratuitos.
Fallback compound-beta
La versión 3.4.0 incorpora compound-beta como fallback de mayor capacidad TPM.
El proxy lo incorpora a la lista permitida y comprueba su disponibilidad en el catálogo de Groq antes de utilizarlo.
La disponibilidad, las cuotas y los límites efectivos dependen de la cuenta y pueden cambiar.
Endpoints
| Endpoint | Método | Descripción |
|---|---|---|
/health | GET | Estado del proxy |
/v1/models | GET | Catálogo de modelos |
/v1/responses | POST | Responses API compatible con Codex |
/v1/chat/completions | POST | Chat Completions |
Prueba de Responses API
PowerShell
$body = @{
model = "openrouter/free"
input = "Escribe una función Java que compruebe si un número es primo."
max_output_tokens = 500
} | ConvertTo-Json -Depth 20
Invoke-RestMethod `
-Uri "http://127.0.0.1:8787/v1/responses" `
-Method Post `
-Headers @{
Authorization = "Bearer $env:CODEX_PROXY_TOKEN"
} `
-ContentType "application/json" `
-Body $body
Seguridad
- No publicar el archivo
.env. - No publicar API keys de OpenRouter ni Groq.
- No publicar el token local del proxy.
- No exponer el proxy a Internet.
- Mantener el proxy escuchando en
127.0.0.1. - Evitar incluir tokens en logs o capturas.
- Cambiar inmediatamente cualquier secreto que haya sido publicado.
.gitignore
.env
.venv/
__pycache__/
*.pyc
proxy.log
session.started
Limitaciones conocidas
- La disponibilidad de modelos gratuitos depende de cada proveedor.
- La rotación de claves no elimina las cuotas compartidas por cuenta u organización.
- Groq puede rechazar peticiones por límites de TPM, RPM o incompatibilidad de herramientas.
-
compound-betapuede no estar disponible en todas las cuentas. - Las pruebas simuladas no sustituyen una ejecución real con las API keys del usuario.
- La compatibilidad con herramientas complejas de Codex debe validarse con cada proveedor.
- No se garantiza que todos los modelos gratuitos soporten las mismas capacidades.
Versiones
v3.4.0
- Fallback
compound-betapara errores 413 por límites TPM. - Comprobación de disponibilidad del modelo en el catálogo de Groq.
- Adaptación del fallback para herramientas externas de Codex.
- Prueba simulada de transición desde modelos con límite TPM inferior.
v3.3.0
- Conversión de herramientas namespace a funciones.
- Reconstrucción de namespace en respuestas.
- Adaptación de historial de herramientas.
- Compatibilidad con streaming SSE en la adaptación.
- Conversión de web search.
- Exclusión de modelos incompatibles con herramientas integradas.
v3.2.0
- Normalización de estructuras de entrada, salida y herramientas.
- Correcciones de compatibilidad con Responses API.
v3.1.0
- Normalización de campos incompatibles con Codex.
- Corrección de IDs ausentes en llamadas a funciones.
Referencias
- OpenRouter API Reference
- OpenRouter Rate Limits
- OpenRouter Responses API
- Groq API Documentation
- Groq Rate Limits
- Codex Configuration
- FastAPI Documentation
Licencia
Añadir la licencia correspondiente antes de publicar el repositorio.
Enjoy Reading This Article?
Here are some more articles you might like to read next: