Prácticas de gateway9 min de lecturaFuente: Admesh 技术团队

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_id a 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.

Lista de precios de los modelos de Admesh.ai: precios y ventanas de contexto de 8 modelos activados
Nombre e ID del modeloVentana de contextoIntroduzca el precio / 1 MPrecio de salida / 1MAciertos en la caché / 1 M
Claude Fable 5anthropic/claude-fable-5
1M$3.25 / 1M$16.25 / 1M$0.325 / 1M
Claude Fable 5.1anthropic/claude-fable-5-1
1M$3.25 / 1M$16.25 / 1M$0.08125 / 1M
Claude Haiku 4.5anthropic/claude-haiku-4-5-20251001
200K$0.325 / 1M$1.625 / 1M$0.0325 / 1M
Claude Haiku 5.5anthropic/claude-haiku-5-5
1M$0.0325 / 1M$0.1625 / 1M$0.00325 / 1M
Claude Opus 4.5anthropic/claude-opus-4-5-20251101
200K$1.625 / 1M$8.125 / 1M$0.1625 / 1M
Claude Opus 4.6anthropic/claude-opus-4-6
1M$1.625 / 1M$8.125 / 1M$0.1625 / 1M
Claude Opus 4.7anthropic/claude-opus-4-7
1M$1.625 / 1M$8.125 / 1M$0.1625 / 1M
Claude Opus 4.8anthropic/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

Ver referencia rápida de códigos de error →

Preguntas frecuentes

Ante un 429, ¿conviene hacer sleep o cambiar de modelo?
Ninguna de las dos es ideal. Lo correcto es cambiar a otro canal del mismo modelo o esperar en cola según el tiempo de reintento de las cabeceras de respuesta. Cambiar de modelo altera la calidad de la salida; hacer sleep a ciegas ralentiza el rendimiento global.
¿Qué duración de timeout es adecuada?
Hay que verlo en dos partes: el timeout de conexión debe ser muy corto (unos segundos), porque un fallo en la fase de conexión permite cambiar de inmediato; el timeout total depende de la tarea, y la generación de textos largos puede necesitar decenas de segundos. No uses un solo valor para gestionar ambas cosas.
¿Los reintentos provocan doble cobro?
En Admesh no: las peticiones no streaming se liquidan según el usage de la última vez que tuvieron éxito; en las peticiones streaming, la parte que ya generó salida se factura tal cual y no se cobra dos veces por cambiar de canal. Todas las liquidaciones se basan en el libro mayor y se pueden verificar una a una en la página de uso.

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.