Invita y gana

Cómo funcionan las recompensas

Comparte tu enlace. Cuando un amigo se registre con él y recargue saldo, recibirás la recompensa indicada por sus recargas posteriores.

API Timeout: cómo diagnosticar desconexiones y decidir un reintento seguro

Guía práctica para localizar timeouts de API LLM, cambiar solo el límite responsable y validar la recuperación con reintentos seguros.

Índice

API Timeout: cómo diagnosticar desconexiones y decidir un reintento seguro

Un API Timeout significa que algún participante de la ruta dejó de esperar. El cliente pudo no conectarse, un proxy pudo cerrar un stream inactivo, venció el deadline total de la aplicación o el gateway no recibió a tiempo la respuesta upstream. El mensaje por sí solo no demuestra que el modelo esté caído.

Antes de reintentar, registre la excepción, el estado HTTP y el cuerpo si existen, el tiempo transcurrido, el request ID y si llegó algún chunk. Cambie únicamente el límite de la capa confirmada; ampliar todos los timeouts oculta la causa y puede repetir una operación con resultado desconocido.

Si la solicitud usó BetterToken, abra el Dashboard antes del reintento y compare hora, modelo, estado y uso de Tokens. Así separa de inmediato una solicitud que llegó a la API de un fallo anterior al gateway.

Por qué un timeout no tiene una sola causa

Aplicación / SDK
  → DNS y TCP/TLS
  → proxy corporativo o reverse proxy
  → API gateway
  → modelo upstream
  → respuesta streaming al cliente

El connect timeout cubre DNS, TCP y TLS. El read o stream-idle timeout indica que no llegó el siguiente chunk dentro del límite del cliente. El pool timeout ocurre al esperar una conexión libre. El deadline total limita toda la operación de negocio, mientras que el upstream timeout pertenece por separado al gateway o proveedor. Cambiar uno no amplía los demás.

Cómo localizar la capa de la caída

SeñalCapa probableSiguiente comprobación
httpx.ConnectTimeout, sin respuesta HTTPDNS, TCP o TLSReproducir desde el mismo entorno; comparar DNS, CA, proxy y firewall
httpx.ReadTimeout antes o entre chunksRead/idle del cliente o proxy intermedioMedir primer byte e intervalos; revisar límites idle del proxy
Hay estado HTTP y cuerpo de errorGateway o upstreamGuardar estado, cuerpo y request ID; seguir el contrato de error del proveedor
httpx.PoolTimeoutPool del clienteMedir concurrencia y ocupación; cambiar límites solo si se confirma saturación
Cancelación tras el mismo tiempo totalAplicación, job runner o reverse proxyIdentificar al propietario del deadline y compararlo con temporizadores inferiores

Siga este orden: conserve la señal, reproduzca desde el mismo host o contenedor, revise cada proxy intermedio y después evalúe gateway o upstream. Mantenga modelo, prompt, red, endpoint y proxy constantes; cambie una sola variable por prueba.

HTTPX documenta timeouts independientes de connect, read, write y pool. Los valores concretos no son universales: deben derivarse de las mediciones, las pausas esperadas entre chunks y el deadline total.

Cuándo cambiar el timeout, la salida o el retry

  • Cambie connect timeout solo si se confirma que DNS/TCP/TLS tarda demasiado.
  • Cambie read o idle timeout si la conexión existe y un límite intermedio confirmado vence entre chunks.
  • Amplíe el deadline total solo si la operación puede durar más y las capas inferiores funcionan.
  • Reduzca o divida la salida cuando solo falle la prueba larga controlada; no lo convierta en explicación sin mediciones.
  • Trate 429 y el desbordamiento de contexto por separado: no son connect timeout.

Retry seguro sin duplicar una operación desconocida

Después del envío, un timeout es primero un resultado desconocido. Un task ID local ayuda a correlacionar logs, pero no impide una segunda operación del servidor. Repita automáticamente solo si existe idempotencia o consulta de estado documentada y una evidencia externa muestra que la primera solicitud no fue aceptada.

Lista mínima:

  1. Conservar request ID, estado/cuerpo, timestamps y chunks recibidos.
  2. Antes de repetir una acción no idempotente, comprobar su resultado real.
  3. No reenviar automáticamente un stream parcial: puede crear otra generación y consumo adicional.
  4. Limitar número de intentos y deadline total; sumar retries del SDK, proxy y aplicación.
  5. Capturar también errores durante la iteración SSE, no solo al crear el objeto response.

Dos pruebas confirman la reparación

  1. Solicitud corta: pida una respuesta pequeña y registre estado, tiempo al primer byte, duración, request ID y fin del stream. Si falla, revise conexión, autenticación y endpoint.
  2. Solicitud larga controlada: tras el éxito anterior, aumente solo la salida esperada o restaure la carga original. Mantenga modelo, endpoint, red y proxy. Si solo falla esta prueba, compare read/idle timeout, deadline total y límites intermedios.

La reparación queda confirmada cuando la prueba corta y una repetición del escenario original terminan con el resultado esperado y sin duplicados inexplicables. Si la solicitud llegó a BetterToken, compare en el Dashboard hora, modelo, estado y uso de Tokens y luego verifique el contrato del endpoint.

Fuentes

¿Quieres optimizar tu flujo de trabajo con LLM?

Conecta modelos mediante una API, gestiona claves y controla el gasto en IA.

Empezar gratis