429, 5xx y timeouts: prácticas de ingeniería para la tolerancia a fallos en gateways LLM
La limitación de tasa y los fallos del proveedor son la norma, no la excepción, en las aplicaciones LLM. Este artículo detalla el tratamiento correcto de 429/5xx/timeout/401, cuándo se puede cambiar de canal automáticamente, cuándo nunca se debe reintentar y cómo evitar la doble facturación.
Primero clasificar, luego decidir cómo actuar
'Reintentar tres veces todos los errores' es la práctica errónea más común. La semántica de cada código de error es completamente distinta y la estrategia de tratamiento también debe serlo. La siguiente tabla es la estrategia que aplica realmente nuestro gateway y puede servir de referencia para tu propia implementación.
- Fallo de conexión / DNS / TLS: cambiar de inmediato al canal de respaldo.
- Timeout (aún sin empezar a emitir): cambiar al canal de respaldo, como máximo 1~2 veces.
- HTTP 429: tras un enfriamiento breve, cambiar de canal y a la vez reducir el peso de ese canal.
- HTTP 5xx: contar en la ventana de fallos; los fallos consecutivos disparan el cortacircuitos.
- 401 / 403: problema de credenciales o permisos; deshabilitar esa credencial y alertar, no reintentar.
- Saldo insuficiente: pausar ese canal y alertar.
- Error de parámetros 400: tras normalizar, devolver directamente al cliente, sin reintentar ni facturar.
- SSE interrumpido tras emitir parte del contenido: devolver
upstream_stream_error, sin reintentar por defecto.
Por qué una interrupción SSE no se puede reintentar sin más
Una vez que la respuesta en streaming ha empezado a emitir tokens al cliente, significa que el proveedor ya ha generado una salida (y la va a facturar). Si en ese momento el gateway cambia silenciosamente a otro canal y lo repite, el usuario verá contenido duplicado y tú pagarás por dos salidas.
Lo correcto es tratar ese flujo a medias como un éxito parcial: devolver un código de error que indique al cliente 'interrupción del proveedor', y que el lado del negocio decida si muestra el contenido ya recibido con un aviso de reintento o si lo repite todo desde el principio.
Cortacircuitos: la capa más importante que el reintento
El reintento es el tratamiento de una petición individual; el cortacircuitos es el juicio sobre el estado global durante un periodo. Cuando un canal acumula fallos consecutivos hasta el umbral, se marca directamente como 'abierto', se deja de enviarle tráfico durante un tiempo y luego se le envía una pequeña cantidad de tráfico de sondeo (semiableirto); tras varios sondeos exitosos se recupera por completo (cerrado).
Sin cortacircuitos, los reintentos presionan aún más un canal ya caído y disparan la latencia media del cliente.
Idempotencia y facturación de los reintentos
- Peticiones no streaming: tras un reintento solo se factura el usage de la última vez que tuvo éxito.
- Peticiones streaming: la vez que ya emitió tokens genera un coste real en el proveedor y debe registrarse; no se puede cuadrar la cuenta porque haya habido un reintento.
- Asignar un
request_ida cada petición del usuario, compartido por todos los reintentos, para poder reproducir después por qué se fue por ese canal. - Los reembolsos/ajustes deben pasar por el libro mayor, no se puede modificar el saldo directamente.
Lo que Admesh ya hace
Esta estrategia es el comportamiento por defecto en el gateway de Admesh: conmutación automática entre varios canales del mismo public_model, cada decisión de enrutamiento se persiste en base de datos y el cliente puede ver en el registro de uso el request_id, el modelo realmente utilizado y el estado de salud del canal; los códigos de error se devuelven en formato unificado (error.type / error.code / request_id).
Cabe destacar que el enrutamiento solo ocurre dentro del pool de canales del mismo public_model; no te cambiamos a un modelo de otro proveedor porque pidas anthropic/xxx — sustituir entre modelos cambia directamente la calidad de la salida, y esa es una decisión que no podemos tomar por ti.
Tarifas en vivo de Admesh (extracto)
Los precios provienen de la configuración en vivo de Admesh, en USD por millón de tokens. Consulta el catálogo de modelos para la lista completa.
| Nombre e ID del modelo | Ventana de contexto | Introduzca el precio / 1 M | Precio de salida / 1M | Aciertos en la caché / 1 M |
|---|---|---|---|---|
Claude Fable 5 anthropic/claude-fable-5 | 1M | $3.25 / 1M | $16.25 / 1M | $0.325 / 1M |
Claude Fable 5.1 anthropic/claude-fable-5-1 | 1M | $3.25 / 1M | $16.25 / 1M | $0.08125 / 1M |
Claude Haiku 4.5 anthropic/claude-haiku-4-5-20251001 | 200K | $0.325 / 1M | $1.625 / 1M | $0.0325 / 1M |
Claude Haiku 5.5 anthropic/claude-haiku-5-5 | 1M | $0.0325 / 1M | $0.1625 / 1M | $0.00325 / 1M |
Claude Opus 4.5 anthropic/claude-opus-4-5-20251101 | 200K | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Claude Opus 4.6 anthropic/claude-opus-4-6 | 1M | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Claude Opus 4.7 anthropic/claude-opus-4-7 | 1M | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Claude Opus 4.8 anthropic/claude-opus-4-8 | 1M | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Las cifras anteriores corresponden a la tarifa unitaria estándar del canal público y se facturarán en función del consumo real de tokens. Ver el catálogo completo de modelos
Preguntas frecuentes
Ante un 429, ¿conviene hacer sleep o cambiar de modelo?
¿Qué duración de timeout es adecuada?
¿Los reintentos provocan doble cobro?
Referencias
Llama a estos modelos a través de un solo gateway
Admesh ofrece una API unificada compatible con OpenAI: una URL base y una clave para Claude, GPT, DeepSeek y más. Las cuentas nuevas reciben crédito de prueba que nunca caduca.
