Saltar para o conteúdo principal
A API MKA1 aplica limites de taxa por chave. Cada chave de API tem sua própria cota configurada independentemente — requisições por segundo, minuto, hora ou dia. Quando uma chave excede seu limite, o gateway retorna 429 Too Many Requests antes que a requisição chegue ao modelo. Nenhum token é consumido e nenhum uso é cobrado.

Configuração de limites de taxa

Os limites de taxa são definidos por chave de API no momento do provisionamento. As granularidades disponíveis são:
JanelaExemplo
Por segundo10 requisições/segundo
Por minuto60 requisições/minuto
Por hora1.000 requisições/hora
Por dia10.000 requisições/dia
Limites podem ser combinados — por exemplo, 10 requisições/segundo e 5.000 requisições/hora na mesma chave.

Demonstração: limitação de taxa em ação

O exemplo a seguir usa uma chave de API real configurada com limite de taxa de 1 requisição por minuto. A primeira requisição é bem-sucedida, e a segunda — enviada imediatamente após — é rejeitada com HTTP 429.

Requisição 1 — bem-sucedida

curl https://apigw.mka1.com/api/v1/llm/responses \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer mk-YfcgFr...BsFLzg' \
  --data '{
    "model": "auto",
    "input": "Olá, tudo bem?",
    "stream": false
  }'
Resposta: HTTP 200
{
  "id": "resp_5ab19d58984940c88a971c6829ae201c",
  "object": "response",
  "status": "completed",
  "model": "auto",
  "output": [
    {
      "type": "message",
      "role": "assistant",
      "content": [{ "type": "output_text", "text": "Olá! Estou bem..." }]
    }
  ]
}

Requisição 2 — limitada por taxa (enviada imediatamente após)

curl https://apigw.mka1.com/api/v1/llm/responses \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer mk-YfcgFr...BsFLzg' \
  --data '{
    "model": "auto",
    "input": "Testando limite de taxa",
    "stream": false
  }'
Resposta: HTTP 429
{
  "error": "Rate limit exceeded"
}
O gateway rejeita a requisição antes que ela chegue ao modelo — nenhum token é consumido e nenhum uso é cobrado.

Exemplo programático

import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: '<mka1-api-key>',
  baseURL: 'https://apigw.mka1.com/api/v1/llm/',
});

// Primeira requisição — bem-sucedida
const response = await openai.responses.create({
  model: 'auto',
  input: 'Olá',
  stream: false,
});
console.log(response.status); // "completed"

// Segunda requisição — limitada por taxa
try {
  await openai.responses.create({
    model: 'auto',
    input: 'Esta será limitada por taxa',
    stream: false,
  });
} catch (err) {
  if (err instanceof OpenAI.RateLimitError) {
    console.log(err.status);   // 429
    console.log(err.message);  // "429 Rate limit exceeded"
    console.log(err.error);    // { error: "Rate limit exceeded" }
  }
}

A resposta 429

Quando uma requisição é limitada por taxa, o gateway retorna:
CampoValor
Status HTTP429 Too Many Requests
Content-Typeapplication/json
Corpo{"error": "Rate limit exceeded"}
Tokens consumidos0 — a requisição nunca chega ao modelo
Uso cobradoNenhum
O OpenAI SDK apresenta isso como OpenAI.RateLimitError com err.status === 429. O MKA1 SDK lança APIError com err.statusCode === 429.

Tratando limites de taxa na sua aplicação

Quando sua aplicação receber uma resposta 429, faça retentativa com backoff exponencial:
async function requestComRetentativa(fn: () => Promise<any>, maxTentativas = 3): Promise<any> {
  for (let tentativa = 0; tentativa < maxTentativas; tentativa++) {
    try {
      return await fn();
    } catch (err: any) {
      if (err.status === 429 && tentativa < maxTentativas - 1) {
        const esperaMs = Math.pow(2, tentativa) * 1000; // 1s, 2s, 4s
        await new Promise((r) => setTimeout(r, esperaMs));
        continue;
      }
      throw err;
    }
  }
}

const response = await requestComRetentativa(() =>
  openai.responses.create({ model: 'auto', input: 'Olá', stream: false })
);

Veja também