Passer au contenu principal

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.

Gérez les limites de débit en contrôlant la concurrence avant que les requêtes ne quittent votre application. Lorsque CometAPI renvoie 429, réessayez avec un backoff exponentiel et du jitter, puis réduisez le trafic en rafale si des réessais répétés se produisent.

Limiter la concurrence

L’exemple Python suivant plafonne les requêtes de chat simultanées avec un sémaphore asynchrone :
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())
Le résultat est un tableau de sorties du modèle :
[
  "Hello.",
  "A concise title",
  "{\"key\":\"value\"}"
]

Réessayer après une limite de débit

L’exemple JavaScript suivant réessaie les réponses 429 avec jitter :
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);
La réponse réussie contient une complétion de chat normale :
{
  "choices": [
    {
      "message": {
        "content": "Hello."
      }
    }
  ]
}

Erreurs courantes

ErreurCorrectif
Requêtes parallèles illimitéesAjoutez un sémaphore, une file d’attente ou un pool de workers.
Réessayer tous les échecsRéessayez uniquement 429 et les défaillances serveur temporaires.
Aucune métrique par modèleJournalisez la route, le model ID, le statut et la latence pour chaque requête.
Tempête de réessaisAjoutez du jitter et plafonnez le délai de réessai maximal.

Liens associés

Last modified on May 28, 2026