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.
Wiederholungen
Abschnitt betitelt „Wiederholungen“Minimales Beispiel
Abschnitt betitelt „Minimales Beispiel“Bei HTTP 429 warten Sie 2 ** attempt Sekunden und versuchen es erneut. Nach 3 Versuchen bricht die Schleife ab. Die Modell-ID ist gpt-.
import timefrom 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.
Parameter
Abschnitt betitelt „Parameter“max_ ist 3. Die Wartezeit ist 2 ** attempt Sekunden (1 s, dann 2 s).
Grenzen und Fehlersuche
Abschnitt betitelt „Grenzen und Fehlersuche“429bedeutet, das Rate-Limit ist erreicht. Warten und mit exponentiellem Backoff wiederholen, oder Queued Requests nutzen.500ist ein serverseitiger Fehler. Nach kurzer Pause erneut versuchen.503bedeutet, das Modell ist vorübergehend nicht verfügbar. Modellstatus prüfen und erneut versuchen.400,401,403und404sind 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--Header. Siehe Queued Requests.
Queued Requests
Abschnitt betitelt „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.
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--Header, der angibt, nach wie vielen Sekunden Sie es erneut versuchen können. Der Body enthältAfter Queue 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-Äquivalent:
| Standard-Endpunkt | Queue-Endpunkt | Beschreibung |
|---|---|---|
POST /v2/ | POST /queue/ | Chat Completion |
POST /v2/ | POST /queue/ | Text Completion (/v2/ ist auf diesem Host derzeit nicht verfügbar; siehe API-Endpunkte) |
POST /v2/ | POST /queue/ | Embeddings |
POST /v2/ | POST /queue/ | Audio Transcription |
POST /v2/ | POST /queue/ | Audio Translation |
POST /v2/ | POST /queue/ | Image Generation |
POST /v2/ | POST /queue/ | Image Edit |
GET /v2/ | GET /queue/ | Modelle 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.
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 für Batch-Verarbeitung
Abschnitt betitelt „Beispiel für Batch-Verarbeitung“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()) 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 für andere APIs
Abschnitt betitelt „Queue-Endpunkte für 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-Transkription
Abschnitt betitelt „Audio-Transkription“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) Bildgenerierung
Abschnitt betitelt „Bildgenerierung“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 ] + "..." )