Pular para o conteúdo principal

Documentation Index

Fetch the complete documentation index at: https://docs.mka1.com/llms.txt

Use this file to discover all available pages before exploring further.

A API MKA1 aplica limites de taxa em uma base 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 do limite 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
Os limites podem ser combinados — por exemplo, 10 requisições/segundo e 5.000 requisições/hora na mesma chave.

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

O exemplo a seguir usa uma chave de API real configurada com um limite de taxa de 1 requisição por minuto. A primeira requisição é bem-sucedida, e a segunda requisição — 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": "meetkai:functionary-pt",
    "input": "Hello, how are you?",
    "stream": false
  }'
Resposta: HTTP 200
{
  "id": "resp_5ab19d58984940c88a971c6829ae201c",
  "object": "response",
  "status": "completed",
  "model": "meetkai:functionary-pt",
  "output": [
    {
      "type": "message",
      "role": "assistant",
      "content": [{ "type": "output_text", "text": "Hello! I'm doing well..." }]
    }
  ]
}

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": "meetkai:functionary-pt",
    "input": "This should be rate limited",
    "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

# Primeira requisição — bem-sucedida (HTTP 200)
mka1 llm responses create \
  --model meetkai:functionary-pt \
  --input '"Hello"' \
  --include-headers \
  -H 'X-On-Behalf-Of: <end-user-id>'

# Segunda requisição — limitada por taxa (HTTP 429)
mka1 llm responses create \
  --model meetkai:functionary-pt \
  --input '"This will be rate limited"' \
  --include-headers \
  -H 'X-On-Behalf-Of: <end-user-id>'

A resposta 429

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

Lidando com limites de taxa em sua aplicação

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

const response = await requestWithRetry(() =>
  openai.responses.create({ model: 'meetkai:functionary-pt', input: 'Hello', stream: false })
);

Veja também