DocumentaçãoLimites e erros

Operar

Limites e erros

O que a API recusa, porquê, e o que o teu código deve fazer com cada resposta.

Nesta página
  1. Os limites
  2. Os erros
  3. Tentar de novo da forma certa

Os limites

LimiteValorAcima do limite
Pedidos300 por minuto e por chave429, com o tempo de espera em retry-after
Pedidos simultâneosConforme o teu plano429, nova tentativa após 5 segundos
Tokens por dia, semana ou mêsConforme o teu plano429, sem retry-after
Tamanho de um pedido50 MBRecusado

Os erros

CódigoCausaO que fazer
400Pedido mal formado ou modelo desconhecido. A mensagem indica o campo em causa.Corrigir o pedido
401Chave em falta, desconhecida, revogada ou expiradaVerificar a chave, sem repetir em ciclo
403Modelo ou funcionalidade não incluído no teu planoMudar de modelo ou de plano
429Demasiados pedidos, ou limite de tokens atingidoEsperar por retry-after se estiver presente, caso contrário parar
502O modelo não respondeu corretamenteTentar de novo um pouco mais tarde
503Serviço temporariamente indisponívelTentar de novo um pouco mais tarde

O corpo de um erro contém sempre uma mensagem legível:

json
{
  "error": {
    "message": "model \"max\" is not part of this plan",
    "type": "router_error"
  }
}

Tentar de novo da forma certa

Tenta de novo só quando a API te disser quanto tempo esperar. Um limite de tokens atingido não se resolve a insistir.

import time
from openai import OpenAI, RateLimitError

client = OpenAI(
    base_url="https://api.learnya.ai/v1",
    api_key=os.environ["LEARNYA_API_KEY"],
    max_retries=0,
)


def complete(**request):
    for attempt in range(5):
        try:
            return client.chat.completions.create(**request)
        except RateLimitError as error:
            # The gateway says how long to wait.
            # A spent token budget says nothing: stop there.
            wait = error.response.headers.get("retry-after")
            if wait is None:
                raise
            time.sleep(int(wait) + attempt)
    raise RuntimeError("still limited after five attempts")