Plataforma
Erros
Os erros retornam em JSON no formato do endpoint que você chamou, com uma mensagem para pessoas e, nos endpoints no padrão OpenAI, um código estável para programas.
O formato
{ "error": { "message": "This API key can't use `gpt-6-astra`. It's limited to gpt-6-sol. Change that at https://zurelay.com/app/keys.", "type": "permission_error", "param": "model", "code": "model_not_allowed" }}Em /v1/messages, os mesmos erros vêm no formato da Anthropic, que não tem código: use o status HTTP e error.type: { "type": "error", "error": { "type": "...", "message": "..." } }. Toda resposta de chat, imagem e vídeo, com erro ou não, tem um cabeçalho x-request-id.
Códigos
Novas tentativas
- Tente novamente em caso de
429e503, aguardando os segundos indicados no cabeçalhoretry-after(ou aumentando o intervalo exponencialmente), a menos que a resposta indiquex-should-retry: false. - Não repita requisições com outros erros
4xxsem alterações: elas vão falhar do mesmo jeito. - Requisições que falham são gratuitas, então novas tentativas não custam nada até que uma dê certo. Um stream interrompido é cobrado pelo que entregou, e o raro
503comx-should-retry: falseé cobrado pela entrada (veja Faturamento). - Os SDKs oficiais da OpenAI e da Anthropic já fazem novas tentativas nos erros certos para você.
Erros durante o streaming
Erros que o modelo retorna sobre a própria requisição (um parâmetro que ele não aceita, um prompt longo demais) chegam com a mensagem e o código do próprio modelo, como 400 ou 422.
Erros durante o streaming
Depois que um stream começa, uma falha não pode mais ser retornada como status HTTP. Em vez disso, você recebe um evento final de erro (no formato do endpoint) e o stream termina. São cobradas a entrada e a saída que chegou até você antes disso, mas nada depois. Isso é raro: a maioria dos problemas é detectada e novas tentativas são feitas antes do primeiro token.
O mesmo tipo de evento encerra um stream quando o saldo ou o orçamento da chave acaba durante a execução, com insufficient_quota, key_budget_exceeded ou key_daily_budget_exceeded. Uma requisição sem streaming que fica sem saldo ou orçamento durante a execução retorna o que foi escrito, interrompido como uma resposta que atingiu max_tokens (finish_reason: "length", ou stop_reason: "max_tokens" em /v1/messages), com um cabeçalho x-zurelay-stopped indicando o código.
Tem dúvidas ou falta algo? Fale com nossa equipe de suporte e responderemos por e-mail, geralmente em até um minuto.