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
| Problema | Solución |
|---|
| Solicitudes paralelas ilimitadas | Añade un semáforo, una cola o un pool de workers. |
| Reintentar todos los fallos | Reintenta solo 429 y fallos temporales del servidor. |
| Sin métricas por modelo | Registra la ruta, el model ID, el estado y la latencia de cada solicitud. |
| Tormenta de reintentos | Añade jitter y limita el retraso máximo de reintento. |
Enlaces relacionados