Pular para o conteúdo principal

Erros e tentativas

Erros da API REST​

Toda recusa da API REST (/api/v1/...) tem o mesmo corpo:

{
"detail": {
"code": "training_slot_occupied",
"message": "One training run at a time per account"
}
}

Decida pelo detail.code; mostre o detail.message. Alguns erros trazem campos extras, como field para uma configuração recusada, ou successor para um caminho encerrado. Os códigos são estáveis dentro de /api/v1: um código novo pode surgir, e um existente mantém seu significado.

HTTPcode padrãoSignificado
400bad_requestA requisição está malformada de um jeito que o schema não expressa.
401unauthenticatedCredenciais ausentes, inválidas ou expiradas; a resposta traz WWW-Authenticate: Bearer.
402insufficient_creditsA conta não consegue pagar por esta operação.
403forbiddenAutenticado, mas sem permissão.
404not_foundO recurso não existe para quem chamou.
409conflictO estado atual do recurso recusa a operação (por exemplo training_slot_occupied ou project_capability_mismatch).
410api_version_requiredUm caminho sem versão encerrado; detail.successor é o caminho a usar.
413payload_too_largeO corpo passou do limite.
422validation_errorA requisição falhou na validação; detail.errors lista cada problema de campo.
429rate_limitedRequisições demais; respeite o Retry-After quando presente.
503unavailableIndisponível no momento (por exemplo training_unavailable); tente mais tarde.

Uma rota pode retornar um código mais específico com o mesmo status, por exemplo training_slot_occupied (409) ou embedding_selection_changed (409). A tabela dá o valor padrão de cada status.

Erros compatíveis com a OpenAI​

Falhas geradas depois que uma requisição compatível com OpenAI chega ao handler de inferência usam este envelope legível por máquina, inclusive em /v1/completions:

{
"error": {
"message": "This project is archived. Unarchive it in project settings to serve requests.",
"type": "invalid_request_error",
"code": "project_archived",
"param": null
}
}

As dependências de autenticação e a validação do schema rodam antes desse handler. Essas falhas atualmente usam o formato do FastAPI no nível superior:

{
"detail": "Invalid or inactive API key"
}

Em erros de validação, detail pode ser uma lista de campos. O cliente deve ler primeiro error.code quando houver error; caso contrário, deve tratar detail como falha de credencial ou schema. Nunca decida pelo texto em inglês.

Códigos estáveis​

CódigoHTTPRetry-AfterSignificado
model_warming503simO modelo está iniciando ou temporariamente ocupado. Tente após o atraso informado, um número limitado de vezes.
overloaded503simReservado; um modelo sobrecarregado hoje responde model_warming.
ambiguous_transport502nãoA requisição pode ter chegado ao modelo. Não repita às cegas.
upstream_error502nãoO modelo falhou depois de aceitar a requisição.
model_not_supported400nãoO modelo base nunca esteve no catálogo deste deployment.
model_deprecated410nãoA base usada pela requisição ou pelo fine-tune foi aposentada. Treine novamente na base atual.
model_not_found404nãoUm alias ou job bem formado não pode ser resolvido para este chamador.
invalid_request400, 413 ou 422nãoErro determinístico da requisição. Em embeddings, 400 cobre mais de duas entradas, acima do limite de entrada do modelo (512 tokens, ou o comprimento do treino até 2.048) por entrada ou no total, lote não suportado ou dimensões não suportadas; error.param identifica input nos limites de entrada.
insufficient_credits402nãoA conta não pode pagar ou não tem direito ao modelo.
authentication_error401nãoO bearer foi verificado, mas não há conta ReOpenly associada.
project_capability_mismatch409nãoO projeto não expõe a capacidade exigida por esta rota.
capacity_unavailable503simO modelo de embeddings não pode aceitar a requisição agora: está iniciando ou chegaram mais requisições ao mesmo tempo do que ele atende. Tente após o Retry-After.
artifact_not_ready503simO modelo de embeddings ainda não está pronto para servir. Tente após o Retry-After.
upstream_validation_error422nãoO modelo de embeddings retornou uma saída que não passou na validação (malformada, não finita, com tamanho ou ordem errados), por isso ela não foi devolvida.
upstream_ambiguous502nãoA requisição de embedding pode ter chegado ao modelo; ela não foi repetida. Não repita às cegas.
project_archived404nãoO projeto é reversível, mas somente leitura até ser restaurado pelo proprietário.
internal_error500nãoFalha inesperada do servidor. Ao contatar o suporte, informe o trace se existir.

model_deprecated é permanente para aquela base: após o corte para 9B, a produção aposentou as entradas 0.8B, 2B e 4B. Artefatos antigos continuam disponíveis para download, mas serving e publicação de aliases dessa base são bloqueados.

Política de retry​

Só repita automaticamente quando a resposta trouxer explicitamente Retry-After. Em embeddings, isso pode ocorrer em capacity_unavailable e artifact_not_ready; em geração de texto, em model_warming. Use um número limitado de tentativas e preserve a identidade da requisição original. O playground v2 da primeira parte faz no máximo três novas tentativas automáticas após a requisição original e depois mantém disponível a ação manual Tentar novamente. Ele nunca repete um erro durante o streaming.

Nunca repita automaticamente:

  • ambiguous_transport, pois o modelo pode já ter respondido e a cobrança pode já ter sido registrada;
  • upstream_error, pois a admissão já ocorreu;
  • insufficient_credits, model_deprecated e project_archived, pois é preciso alterar o estado da conta ou do projeto;
  • falhas determinísticas invalid_request.

Falhas durante streaming​

Antes do primeiro frame SSE, os erros usam o status HTTP e o corpo JSON normais. Depois que o stream começa, uma falha é enviada como:

data: {"error":{"message":"…","type":"api_error","code":"upstream_error","param":null}}

O servidor fecha o stream sem enviar data: [DONE]. A ausência de [DONE] significa saída incompleta, não uma resposta vazia bem-sucedida.