Saltar al contenido 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.

Gestiona los límites de tasa controlando la concurrencia antes de que las solicitudes salgan de tu aplicación. Cuando CometAPI devuelve 429, vuelve a intentarlo con backoff exponencial y jitter, y luego reduce el tráfico en ráfaga si se producen reintentos repetidos.

Limitar la concurrencia

El siguiente ejemplo en Python limita las solicitudes de chat concurrentes con un semáforo asíncrono:
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())
El resultado es un array de salidas del modelo:
[
  "Hello.",
  "A concise title",
  "{\"key\":\"value\"}"
]

Reintentar límites de tasa

El siguiente ejemplo en JavaScript vuelve a intentar las respuestas 429 con 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 respuesta correcta contiene una finalización de chat normal:
{
  "choices": [
    {
      "message": {
        "content": "Hello."
      }
    }
  ]
}

Errores comunes

ProblemaSolución
Solicitudes paralelas ilimitadasAñade un semáforo, una cola o un pool de workers.
Reintentar todos los fallosReintenta solo 429 y fallos temporales del servidor.
Sin métricas por modeloRegistra la ruta, el model ID, el estado y la latencia de cada solicitud.
Tormenta de reintentosAñade jitter y limita el retraso máximo de reintento.

Enlaces relacionados

Last modified on May 28, 2026