DocumentaciónLímites y errores

Operar

Límites y errores

Lo que la API rechaza, por qué, y qué debe hacer tu código con cada respuesta.

En esta página
  1. Los límites
  2. Los errores
  3. Reintentar correctamente

Los límites

LímiteValorSi se supera
Solicitudes300 por minuto y por clave429, con la espera indicada en retry-after
Solicitudes simultáneasSegún tu plan429, nuevo intento tras 5 segundos
Tokens por día, semana o mesSegún tu plan429, sin retry-after
Tamaño de una solicitud50 MBRechazada

Los errores

CódigoCausaQué hacer
400Solicitud mal formada o modelo desconocido. El mensaje indica el campo afectado.Corregir la solicitud
401Clave ausente, desconocida, revocada o caducadaVerificar la clave, sin reintentar en bucle
403Modelo o función no incluidos en tu planCambiar de modelo o de plan
429Demasiadas solicitudes, o límite de tokens alcanzadoEsperar lo que indique retry-after si está presente, si no, detenerse
502El modelo no ha respondido correctamenteReintentar un poco más tarde
503Servicio no disponible temporalmenteReintentar un poco más tarde

El cuerpo de un error siempre lleva un mensaje legible:

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

Reintentar correctamente

Reintenta solo cuando la API te indique cuánto esperar. Un límite de tokens alcanzado no se resuelve insistiendo.

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")