메인 콘텐츠로 건너뛰기

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 limit을 처리하세요. CometAPI가 429를 반환하면 exponential backoff와 jitter로 재시도하고, 재시도가 반복되면 버스트 트래픽을 줄이세요.

동시성 제한

다음 Python 예제는 async 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 limit 재시도

다음 JavaScript 예제는 jitter를 사용해 429 응답을 재시도합니다:
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);
성공한 응답에는 일반적인 채팅 완성이 포함됩니다:
{
  "choices": [
    {
      "message": {
        "content": "Hello."
      }
    }
  ]
}

일반적인 오류

오류수정 방법
무제한 병렬 요청semaphore, queue 또는 worker pool을 추가하세요.
모든 실패 재시도429와 일시적인 서버 실패에 대해서만 재시도하세요.
model별 메트릭 없음각 요청에 대해 route, model ID, status, latency를 기록하세요.
재시도 폭주jitter를 추가하고 최대 재시도 지연 시간을 제한하세요.

관련 링크

Last modified on May 28, 2026