Documentation Index
Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt
Use this file to discover all available pages before exploring further.
Behandle Rate Limits, indem du die Concurrency kontrollierst, bevor Anfragen deine App verlassen. Wenn CometAPI 429 zurückgibt, versuche es mit exponentiellem Backoff und Jitter erneut und reduziere dann Burst-Traffic, falls wiederholt Retries auftreten.
Concurrency begrenzen
Das folgende Python-Beispiel begrenzt gleichzeitige Chat-Anfragen mit einem asynchronen Semaphore:
import asyncio
import os
from openai import AsyncOpenAI
client = AsyncOpenAI(
api_key=os.environ["COMETAPI_KEY"],
base_url="https://api.cometapi.com/v1",
)
semaphore = asyncio.Semaphore(5)
async def ask(prompt):
async with semaphore:
completion = await client.chat.completions.create(
model="your-model-id",
messages=[{"role": "user", "content": prompt}],
)
return completion.choices[0].message.content
async def main():
prompts = ["Say hello.", "Write a title.", "Return one JSON key."]
results = await asyncio.gather(*(ask(prompt) for prompt in prompts))
print(results)
asyncio.run(main())
Das Ergebnis ist ein Array von model-Ausgaben:
[
"Hello.",
"A concise title",
"{\"key\":\"value\"}"
]
Rate Limits erneut versuchen
Das folgende JavaScript-Beispiel versucht 429-Antworten mit Jitter erneut:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.COMETAPI_KEY,
baseURL: "https://api.cometapi.com/v1",
});
async function sleep(milliseconds) {
return new Promise((resolve) => setTimeout(resolve, milliseconds));
}
async function createCompletion() {
for (let attempt = 0; attempt < 5; attempt += 1) {
try {
return await client.chat.completions.create({
model: "your-model-id",
messages: [{ role: "user", content: "Say hello." }],
});
} catch (error) {
if (error.status !== 429 || attempt === 4) {
throw error;
}
const delay = Math.min(30000, 1000 * 2 ** attempt);
await sleep(delay + Math.random() * 1000);
}
}
}
const completion = await createCompletion();
console.log(completion.choices[0].message.content);
Die erfolgreiche Antwort enthält eine normale Chat Completion:
{
"choices": [
{
"message": {
"content": "Hello."
}
}
]
}
Häufige Fehler
| Fehler | Lösung |
|---|
| Unbegrenzte parallele Anfragen | Füge ein Semaphore, eine Queue oder einen Worker-Pool hinzu. |
| Alle Fehler erneut versuchen | Versuche nur 429 und temporäre Serverfehler erneut. |
| Keine Metriken pro model | Protokolliere für jede Anfrage Route, model ID, Status und Latenz. |
| Retry-Sturm | Füge Jitter hinzu und begrenze die maximale Retry-Verzögerung. |
Verwandte Links