Queued Requests (Queue API)
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.
So funktioniert es
Abschnitt betitelt „So funktioniert es“- 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 Requestsmit einemRetry-After-Header, der angibt, nach wie vielen Sekunden Sie es erneut versuchen können. Der Body enthältQueue wait limit of 120 seconds reached. Diese Obergrenze sorgt dafür, dass ein ausgehungertes Projekt eine klare Antwort erhält statt eines undurchsichtigen504 Gateway Timeoutaus 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.
Wann die Queue API verwenden
Abschnitt betitelt „Wann die Queue API verwenden“- Verwenden Sie
/queuefür Batch-Jobs, die gelegentlich über dem Limit liegen, damit kurze Spitzen warten statt fehlzuschlagen. - Verwenden Sie
/v2für interaktive Anwendungen, bei denen ein sofortiger429besser ist als Warten, und für lang laufende Anfragen (nutzen Sie Streaming).
Endpunkt-Zuordnung
Abschnitt betitelt „Endpunkt-Zuordnung“Jeder Standard-Endpunkt hat ein /queue-Aequivalent:
| Standard-Endpunkt | Queue-Endpunkt | Beschreibung |
|---|---|---|
POST /v2/chat/completions | POST /queue/chat/completions | Chat Completion |
POST /v2/completions | POST /queue/completions | Text Completion |
POST /v2/embeddings | POST /queue/embeddings | Embeddings |
POST /v2/audio/transcriptions | POST /queue/audio/transcriptions | Audio Transcription |
POST /v2/audio/translations | POST /queue/audio/translations | Audio Translation |
POST /v2/images/generations | POST /queue/images/generations | Image Generation |
POST /v2/images/edits | POST /queue/images/edits | Image Edit |
GET /v2/models | GET /queue/models | Modelle auflisten |
Der Request-Body fuer jeden Queue-Endpunkt ist identisch mit seinem Standard-Gegenstueck — aendern Sie einfach den Basispfad von /v2 zu /queue.
Grundlegende Verwendung
Abschnitt betitelt „Grundlegende Verwendung“Senden Sie eine Chat Completion an die Warteschlange:
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 }'from openai import OpenAI
client = OpenAI( base_url="https://llm-server.llmhub.t-systems.net/queue",)
response = client.chat.completions.create( 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,)
print(response.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://llm-server.llmhub.t-systems.net/queue",});
const response = await client.chat.completions.create({ 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,});
console.log(response.choices[0].message.content);Beispiel fuer Batch-Verarbeitung
Abschnitt betitelt „Beispiel fuer Batch-Verarbeitung“Verarbeiten Sie mehrere Prompts effizient ueber 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())import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://llm-server.llmhub.t-systems.net/queue",});
const prompts = [ "Summarize the benefits of solar energy.", "Explain how wind turbines generate electricity.", "Describe the future of hydrogen fuel cells.",];
const results = await Promise.all( prompts.map((prompt) => client.chat.completions.create({ model: "gpt-oss-120b", messages: [{ role: "user", content: prompt }], max_tokens: 500, }) ));
results.forEach((result, i) => { console.log(`Prompt: ${prompts[i]}`); console.log(`Result: ${result.choices[0].message.content}\n`);});Queue-Endpunkte fuer andere APIs
Abschnitt betitelt „Queue-Endpunkte fuer andere APIs“Embeddings
Abschnitt betitelt „Embeddings“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)}")Audio Transcription
Abschnitt betitelt „Audio Transcription“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)Image Generation
Abschnitt betitelt „Image Generation“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] + "...")Naechste Schritte
Abschnitt betitelt „Naechste Schritte“- Chat Completions — Standard-synchrone Chat-API
- Streaming — Echtzeit-Token-fuer-Token-Antworten
- Rate Limits — TPM/RPM-Limits und Header verstehen
- API-Endpunkte — Vollstaendige Endpunkt-Referenz