Zum Inhalt springen
API-Key API-Key

Fehler und Zuverlässigkeit

Wiederholen Sie einen fehlgeschlagenen Aufruf, wenn der Status vorübergehend ist. Fehlercodes listet jeden Status. Queued Requests warten auf Rate-Limit-Budget, statt sofort 429 zu liefern.

Bei HTTP 429 warten Sie 2 ** attempt Sekunden und versuchen es erneut. Nach 3 Versuchen bricht die Schleife ab. Die Modell-ID ist gpt-oss-120b.

Python
import time
from openai import OpenAI, RateLimitError
client = OpenAI()
def call_with_retry(messages, max_retries=3):
for attempt in range(max_retries):
try:
return client.chat.completions.create(
model="gpt-oss-120b",
messages=messages,
)
except RateLimitError:
if attempt == max_retries - 1:
raise
wait = 2 ** attempt
print(f"Rate limited. Retrying in {wait}s...")
time.sleep(wait)

Bei 429 wartet die Funktion und versucht es erneut. Beim dritten Fehlschlag wirft sie den RateLimitError erneut.

max_retries ist 3. Die Wartezeit ist 2 ** attempt Sekunden (1 s, dann 2 s).

  • 429 bedeutet, das Rate-Limit ist erreicht. Warten und mit exponentiellem Backoff wiederholen, oder Queued Requests nutzen.
  • 500 ist ein serverseitiger Fehler. Nach kurzer Pause erneut versuchen.
  • 503 bedeutet, das Modell ist vorübergehend nicht verfügbar. Modellstatus prüfen und erneut versuchen.
  • 400, 401, 403 und 404 sind Fehler der Anfrage oder der Zugangsdaten. Dieselbe Anfrage erneut zu senden hilft nicht. Siehe Fehlercodes.

Ist eine Queue-Anfrage nach zwei Minuten noch über dem Limit, enthält die 429-Antwort einen Retry-After-Header. Siehe Queued Requests.

Die /queue-Endpunkte funktionieren wie die /v2-Endpunkte, mit einem Unterschied: Wenn Sie Ihr Rate-Limit überschreiten, antwortet /v2 sofort mit 429 Too Many Requests, während /queue bis zu zwei Minuten wartet, bis Ihr Limit wieder frei ist, und die Anfrage dann ausführt.

  • Innerhalb Ihres Limits: Die Anfrage wird sofort ausgeführt.
  • Über Ihrem Limit: Die Anfrage wartet. Limits werden jede Minute zurückgesetzt, daher wird sie zu Beginn jeder Minute erneut geprüft.
  • Nach zwei Minuten noch über Ihrem Limit: Die Wartezeit ist begrenzt. Die Anfrage wartet nicht länger, und Sie erhalten 429 Too Many Requests mit einem Retry-After-Header, der angibt, nach wie vielen Sekunden Sie es erneut versuchen können. Der Body enthält Queue wait limit of 120 seconds reached. Diese Obergrenze sorgt dafür, dass ein ausgehungertes Projekt eine klare Antwort erhält statt eines undurchsichtigen 504 Gateway Timeout aus der Netzwerkschicht.

Die Obergrenze richtet sich nach der Kalenderminute, nicht nach dem Zeitpunkt, zu dem Ihre Anfrage eintrifft: Die Anfrage wird beim Eintreffen geprüft und erneut bei den nächsten beiden Minutenwechseln; nach dem zweiten gibt sie auf. Die tatsächliche Wartezeit liegt daher zwischen einer und zwei Minuten, je nachdem, wann innerhalb der Minute Sie die Anfrage gesendet haben.

Stellen Sie das Client-Timeout auf mindestens zwei Minuten plus die erwartete Antwortzeit ein, sonst gibt Ihr Client möglicherweise auf, bevor die Queue es tut. Wenn Sie die Verbindung während des Wartens schließen, wird die Anfrage abgebrochen.

Ein 429 von /queue bedeutet, dass Sie dauerhaft mehr senden, als Ihr Limit erlaubt, nicht nur eine kurze Spitze. Eine einzelne Anfrage mit mehr Input-Tokens als Ihr Token-Limit pro Minute passt nie und läuft daher immer nach zwei Minuten in den Timeout. Senden Sie langsamer oder beantragen Sie ein höheres Limit.

  • Verwenden Sie /queue für Batch-Jobs, die gelegentlich über dem Limit liegen, damit kurze Spitzen warten statt fehlzuschlagen.
  • Verwenden Sie /v2 für interaktive Anwendungen, bei denen ein sofortiger 429 besser ist als Warten, und für lang laufende Anfragen (nutzen Sie Streaming).

Jeder Standard-Endpunkt hat ein /queue-Äquivalent:

Standard-EndpunktQueue-EndpunktBeschreibung
POST /v2/chat/completionsPOST /queue/chat/completionsChat Completion
POST /v2/completionsPOST /queue/completionsText Completion (/v2/completions ist auf diesem Host derzeit nicht verfügbar; siehe API-Endpunkte)
POST /v2/embeddingsPOST /queue/embeddingsEmbeddings
POST /v2/audio/transcriptionsPOST /queue/audio/transcriptionsAudio Transcription
POST /v2/audio/translationsPOST /queue/audio/translationsAudio Translation
POST /v2/images/generationsPOST /queue/images/generationsImage Generation
POST /v2/images/editsPOST /queue/images/editsImage Edit
GET /v2/modelsGET /queue/modelsModelle auflisten

Der Request-Body für jeden Queue-Endpunkt ist identisch mit seinem Standard-Gegenstück — ändern Sie einfach den Basispfad von /v2 zu /queue.

Senden Sie eine Chat Completion an die Warteschlange:

Terminal
curl -X POST "https://llm-server.llmhub.t-systems.net/queue/chat/completions" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss-120b",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Write a detailed analysis of renewable energy trends in Europe."}
],
"max_tokens": 2000
}'

Verarbeiten Sie mehrere Prompts effizient über die Warteschlange:

import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(
base_url="https://llm-server.llmhub.t-systems.net/queue",
)
prompts = [
"Summarize the benefits of solar energy.",
"Explain how wind turbines generate electricity.",
"Describe the future of hydrogen fuel cells.",
]
async def process_prompt(prompt):
response = await client.chat.completions.create(
model="gpt-oss-120b",
messages=[{"role": "user", "content": prompt}],
max_tokens=500,
)
return response.choices[0].message.content
async def main():
tasks = [process_prompt(p) for p in prompts]
results = await asyncio.gather(*tasks)
for prompt, result in zip(prompts, results):
print(f"Prompt: {prompt[:50]}...")
print(f"Result: {result[:100]}...\n")
asyncio.run(main())
Python
from openai import OpenAI
client = OpenAI(
base_url="https://llm-server.llmhub.t-systems.net/queue",
)
response = client.embeddings.create(
model="text-embedding-bge-m3",
input="The benefits of renewable energy in Europe",
)
print(f"Embedding dimension: {len(response.data[0].embedding)}")
Python
from openai import OpenAI
client = OpenAI(
base_url="https://llm-server.llmhub.t-systems.net/queue",
)
with open("meeting_recording.mp3", "rb") as audio_file:
transcript = client.audio.transcriptions.create(
model="whisper-large-v3",
file=audio_file,
)
print(transcript.text)
Python
from openai import OpenAI
client = OpenAI(
base_url="https://llm-server.llmhub.t-systems.net/queue",
)
result = client.images.generate(
model="gpt-image-2",
prompt="A futuristic data center powered by renewable energy",
)
print(result.data[0].b64_json[:50] + "...")