DokumentationLimits und Fehler

Betreiben

Limits und Fehler

Was die API ablehnt, warum, und wie Ihr Code mit jeder Antwort umgehen soll.

Auf dieser Seite
  1. Die Limits
  2. Die Fehler
  3. Richtig wiederholen

Die Limits

LimitWertBei Überschreitung
Anfragen300 pro Minute und Schlüssel429, mit der Wartezeit in retry-after
Gleichzeitige AnfragenJe nach Plan429, neuer Versuch nach 5 Sekunden
Tokens pro Tag, Woche oder MonatJe nach Plan429, ohne retry-after
Grösse einer Anfrage50 MBAbgelehnt

Die Fehler

CodeUrsacheWas tun
400Fehlerhafte Anfrage oder unbekanntes Modell. Die Meldung nennt das betroffene Feld.Anfrage korrigieren
401Schlüssel fehlt, ist unbekannt, widerrufen oder abgelaufenSchlüssel prüfen, nicht endlos wiederholen
403Modell oder Funktion nicht in Ihrem Plan enthaltenModell oder Plan wechseln
429Zu viele Anfragen oder Token-Limit erreichtDie Zeit in retry-after abwarten, falls vorhanden, sonst aufhören
502Das Modell hat nicht korrekt geantwortetEtwas später erneut versuchen
503Dienst vorübergehend nicht verfügbarEtwas später erneut versuchen

Der Body eines Fehlers enthält immer eine lesbare Meldung:

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

Richtig wiederholen

Versuchen Sie es nur erneut, wenn die API Ihnen sagt, wie lange Sie warten sollen. Ein erreichtes Token-Limit lässt sich durch Wiederholen nicht lösen.

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