Erros

Todos os códigos de erro com que esta API pode responder, o estado HTTP que os transporta, e o que fazer a respeito. O envelope tem a forma da OpenAI com uma adição em namespace.

O envelope

error.message é escrito para uma pessoa que lê um registo, error.type nomeia a classe de falha, e error.code é o identificador estável para ramificar — o texto da mensagem não é um contrato. Onde a API tem detalhe estruturado (que política, que endpoint, que modelo) este chega em error.llmeu e nunca substitui os três campos padrão.

{
  "error": {
    "message": "No endpoint satisfies residency eu-owned. Residency is never relaxed silently.",
    "type": "conflict_error",
    "code": "no_endpoint_for_policy",
    "llmeu": { "requested": "llmeu-auto" }
  }
}

tipo segue o status

O mapeamento abaixo é o que a API aplica, renderizado a partir da mesma tabela que constrói as suas respostas.

HTTP tipo
400invalid_request_error
401authentication_error
402insufficient_quota
403permission_error
404not_found_error
409conflict_error
413invalid_request_error
422invalid_request_error
429rate_limit_error
500api_error
501api_error
502api_error
503api_error

Códigos

Todo código que pode chegar a um cliente. Um teste percorre o código-fonte da API e falha quando esta tabela e o código discordam em qualquer direção, portanto um código não pode ser inventado aqui nem adicionado lá sem ser documentado.

HTTP code O que significa, e o que fazer
400 invalid_request O corpo do pedido falhou a validação.
400 invalid_json O corpo não era JSON válido.
400 invalid_llmeu O objeto llmeu não era um objeto, ou continha um campo desconhecido.
400 invalid_residency A residência solicitada não é uma das quatro classes de alojamento.
400 invalid_data_class A data_class solicitada não é uma das quatro classes.
400 invalid_retention A retenção solicitada não é zero, 24h, 7d ou 30d.
400 invalid_max_tokens max_tokens não era um inteiro positivo.
400 invalid_stream stream não era um booleano.
400 invalid_stop stop não era nem uma string nem um array de strings.
400 invalid_role Uma mensagem continha um role fora de system, user, assistant e tool.
400 invalid_tools tools ou tool_choice estava malformado.
400 missing_model O campo model é obrigatório.
400 missing_messages messages é obrigatório e não pode estar vazio.
400 missing_input input é obrigatório para embeddings.
400 missing_name name é obrigatório.
401 invalid_api_key A chave está em falta, desconhecida, revogada ou expirada.
402 budget_exceeded O orçamento diário da organização está esgotado. Aumente max_usd_per_day ou espere que a janela reinicie.
403 api_key_required O pedido usou uma sessão de consola. Crie uma chave de API e envie essa em vez disso.
403 insufficient_scope A chave é válida, mas não possui o escopo que este endpoint requer.
403 no_organization A credencial não está associada a uma organização.
403 model_denied A política da organização nega este modelo ou o seu fornecedor.
403 policy_violation O pedido viola uma regra da política da organização.
403 retention_exceeds_policy A retenção solicitada é mais longa do que a política permite. Isto é verificado antes de qualquer outra coisa sobre o pedido.
403 data_class_not_allowed A data_class do pedido não é permitida pela política.
404 model_not_found Não existe tal modelo para esta organização.
404 hosted_unavailable O modelo está no catálogo, mas não está alojado no LLM EU, por isso não pode ser chamado.
404 not_found A rota existe, mas o objeto não.
404 unknown_route Nenhuma rota está montada neste caminho. Todos os endpoints OpenAI que não estão listados em Endpoints respondem a isto.
404 policy_not_found O policy_id em llmeu não pertence a esta organização.
409 no_endpoint_for_policy Nada satisfaz a política e a residência em conjunto, e nenhuma delas é relaxada silenciosamente.
409 not_a_text_model O modelo nomeado não pode gerar texto: é um modelo de reconhecimento de fala, embedding ou reranker.
409 conflict A solicitação entra em conflito com o estado atual do objeto.
413 request_too_large O corpo excedeu o limite de tamanho do endpoint.
429 rate_limit_exceeded Um limite da tabela de limite de taxa foi atingido. A mensagem indica o horário de reinício da janela.
500 internal_error Uma falha inesperada do nosso lado.
501 not_implemented O endpoint intencionalmente não é oferecido, ou o recurso solicitado não existe nesta implantação.
501 retention_not_implemented A política permite uma retenção diferente de zero e apenas zero é implementada, então a solicitação é recusada em vez de ser armazenada.
501 unsupported_n n maior que 1 não é suportado.
502 upstream_error Nenhum endpoint pôde atender à solicitação após o failover. O trace registra cada tentativa.
502 stream_failed O stream falhou depois que já havia começado.

no_endpoint_for_policy é o produto a funcionar

Um 409 com este código significa que a política e o pedido juntos não admitem nenhum endpoint, e o router recusou-se a relaxar qualquer um deles silenciosamente. Não é transitório: tentar novamente sem alterar o pedido, a política ou a residência falha da mesma forma. O erro transporta a residência solicitada, e o trace regista por que cada endpoint foi rejeitado.

Erros dentro de um stream

Um pedido de streaming que falha depois de os cabeçalhos serem enviados escreve o erro como um frame SSE final e depois o terminador, para que um cliente que segue o formato veja uma falha em vez de um sucesso truncado.

data: {"error":{"message":"No endpoint could start the stream.","type":"api_error","code":"upstream_error"}}

data: [DONE]