Convide e ganhe

Como funcionam as recompensas

Compartilhe seu link. Quando um amigo se cadastrar por ele e adicionar saldo, você receberá a recompensa exibida nas recargas posteriores.

API Timeout: como diagnosticar quedas e decidir uma tentativa segura

Guia prático para localizar timeouts em APIs de LLM, mudar apenas o limite responsável e validar a recuperação com duas tentativas controladas.

Conteúdo

API Timeout: como diagnosticar quedas e decidir uma tentativa segura

Um API Timeout significa que algum participante do caminho deixou de esperar. O cliente pode não ter conectado, um proxy pode ter fechado um stream ocioso, o deadline total da aplicação pode ter expirado ou o gateway pode não ter recebido a resposta upstream a tempo. A mensagem sozinha não prova indisponibilidade do modelo.

Antes de repetir, registre a classe da exceção, o status HTTP e o corpo quando existirem, o tempo decorrido, o request ID e se algum chunk chegou. Altere somente o limite da camada confirmada. Aumentar todos os timeouts esconde a causa e pode repetir uma operação com resultado desconhecido.

Se a solicitação usou BetterToken, abra o Dashboard antes do retry e compare horário, modelo, status e uso de Tokens. Isso separa imediatamente uma solicitação que chegou à API de uma falha anterior ao gateway.

Por que um timeout não tem uma causa única

Aplicação / SDK
  → DNS e TCP/TLS
  → proxy corporativo ou reverse proxy
  → API gateway
  → modelo upstream
  → resposta streaming ao cliente

O connect timeout cobre DNS, TCP e TLS. O read ou stream-idle timeout indica que o próximo chunk não chegou dentro do limite do cliente. O pool timeout ocorre ao esperar uma conexão livre. O deadline total limita toda a operação de negócio, enquanto o upstream timeout pertence separadamente ao gateway ou provedor. Mudar um deles não amplia os demais.

Como localizar a camada da interrupção

SinalCamada provávelPróxima verificação
httpx.ConnectTimeout, sem resposta HTTPDNS, TCP ou TLSReproduzir no mesmo ambiente; comparar DNS, CA, proxy e firewall
httpx.ReadTimeout antes ou entre chunksRead/idle do cliente ou proxy intermediárioMedir primeiro byte e intervalos; verificar limites idle do proxy
Há status HTTP e corpo de erroGateway ou upstreamGuardar status, corpo e request ID; seguir o contrato de erro do provedor
httpx.PoolTimeoutPool do clienteMedir concorrência e ocupação; mudar limites só com saturação confirmada
Cancelamento após o mesmo tempo totalAplicação, job runner ou reverse proxyIdentificar o dono do deadline e comparar com os timers inferiores

Siga esta ordem: preserve o sinal, reproduza no mesmo host ou container, verifique cada proxy intermediário e depois avalie gateway ou upstream. Mantenha modelo, prompt, rede, endpoint e proxy constantes; altere apenas uma variável por teste.

O HTTPX documenta timeouts separados para connect, read, write e pool. Valores concretos não são universais: devem vir das medições, das pausas esperadas entre chunks e do deadline total.

Quando mudar timeout, saída ou retry

  • Mude connect timeout somente se DNS/TCP/TLS estiver comprovadamente lento.
  • Mude read ou idle timeout se a conexão existe e um limite intermediário confirmado expira entre chunks.
  • Aumente o deadline total apenas se a operação puder durar mais e as camadas inferiores funcionarem.
  • Reduza ou divida a saída quando apenas o teste longo controlado falhar; não assuma isso sem medições.
  • Trate 429 e estouro de contexto separadamente: eles não são connect timeout.

Retry seguro sem duplicar uma operação desconhecida

Após o envio, um timeout é primeiro um resultado desconhecido. Um task ID local ajuda a correlacionar logs, mas não impede uma segunda operação no servidor. Repita automaticamente somente se houver idempotência ou consulta de status documentada e evidência externa de que a primeira solicitação não foi aceita.

Checklist mínimo:

  1. Guardar request ID, status/corpo, timestamps e chunks recebidos.
  2. Antes de repetir uma ação não idempotente, verificar o resultado real.
  3. Não reenviar automaticamente um stream parcial; isso pode criar outra geração e uso adicional.
  4. Limitar tentativas e deadline total; somar retries do SDK, proxy e aplicação.
  5. Capturar também erros durante a iteração SSE, não apenas na criação do objeto response.

Dois testes confirmam a correção

  1. Solicitação curta: peça uma resposta pequena e registre status, tempo até o primeiro byte, duração, request ID e conclusão do stream. Se falhar, verifique conexão, autenticação e endpoint.
  2. Solicitação longa controlada: depois do sucesso anterior, aumente apenas a saída esperada ou restaure a carga original. Mantenha modelo, endpoint, rede e proxy. Se só este teste falhar, compare read/idle timeout, deadline total e limites intermediários.

A correção fica confirmada quando o teste curto e uma repetição do cenário original terminam com o resultado esperado e sem duplicatas inexplicáveis. Se a solicitação chegou ao BetterToken, compare no Dashboard horário, modelo, status e uso de Tokens e depois verifique o contrato do endpoint.

Fontes

Quer otimizar seu fluxo de trabalho com LLMs?

Conecte modelos por uma única API, gerencie chaves e controle os gastos com IA.

Começar grátis