Перейти до основного вмісту

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.

Обробляйте rate limits, контролюючи concurrency ще до того, як запити залишать ваш застосунок. Коли CometAPI повертає 429, повторіть запит із exponential backoff і jitter, а потім зменште burst-трафік, якщо повторні спроби трапляються знову.

Обмеження concurrency

Наведений нижче приклад Python обмежує кількість одночасних chat-запитів за допомогою асинхронного 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())
Результат — це масив вихідних даних моделі:
[
  "Hello.",
  "A concise title",
  "{\"key\":\"value\"}"
]

Повторні спроби для rate limits

Наведений нижче приклад JavaScript повторює 429 відповіді з 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);
Успішна відповідь містить звичайний chat completion:
{
  "choices": [
    {
      "message": {
        "content": "Hello."
      }
    }
  ]
}

Поширені помилки

ПомилкаЯк виправити
Необмежені паралельні запитиДодайте semaphore, queue або worker pool.
Повторні спроби для всіх збоївПовторюйте лише для 429 і тимчасових збоїв сервера.
Немає метрик на рівні modelЛогуйте route, model ID, status і latency для кожного запиту.
Шторм повторних спробДодайте jitter і обмежте максимальну затримку повторної спроби.

Пов’язані посилання

Last modified on May 28, 2026