Ad contentum transili
Tractatio errorum

Tractatio errorum

Petitio quae deficit codicem status HTTP et corpus JSON cum genere erroris et nuntio reddit. Haec pagina omnem statum enumerat, corpus erroris cuiusque formae API ostendit et dicit qui errores iterum mittendi sint.

SDK objectum erroris excitant quod codicem status et campos corporis fert. Haec petitio modellum quod non est nominat:

import openai
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

try:
    client.chat.completions.create(
        model="no-such-model",
        messages=[{"role": "user", "content": "Hello"}],
    )
except openai.APIStatusError as error:
    print(error.status_code)                           # 400
    print(error.type)                                  # invalid_request_error
    print(error.body["message"])                       # unknown model: no-such-model
    print(error.response.headers.get("x-request-id"))  # the id of this request

Statum 400 et hoc corpus reddit:

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}

Corpus erroris

Duo corpora sunt. /v1/messages in forma Anthropic respondet; omne aliud endpoint in forma OpenAI respondet. In ambobus singula in error.type et error.message sunt, itaque unus lector omnibus endpoints sufficit.

401 Forma OpenAI
{
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key",
    "code": "invalid_api_key",
    "param": null
  }
}
401 Forma Anthropic
{
  "type": "error",
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key"
  }
}
Campus Genus Descriptio
error.type string Genus erroris. Vide Genera errorum infra.
error.message string Sententia pro homine. Textus in tabulis infra stabiles sunt praeter partes variabiles, ut <id>, <n> vel … ostenduntur.
error.code string | null In quibusdam erroribus formae OpenAI adest: invalid_api_key cum 401, request_too_large cum 413, context_length_exceeded cum colloquium nimis longum est, alioquin null vel absens. Primum de statu et error.type decerne et code ut additamentum tracta.
error.param null In eisdem erroribus ac code adest. Semper null.
type string Solum forma Anthropic. Semper error.

Genera errorum

Genus Status Descriptio
invalid_request_error 400, 413, 415, 422 Petitio ipsa falsa est: campus, corpus, id modelli vel input quod modellum non accipit. Petitionem muta antequam iterum mittis.
authentication_error 401 Clavis API deest, ignota vel revocata est.
not_found_error 404 Via non exstat.
rate_limit_error 429 Saldum petitionem non tegit, defensio inundationis eam sistit, vel modellum occupatum est. Nuntius dicit quid.
api_error 500, 502, 503, 504 Petitio recta erat et defectus a nostra parte est. Iterum mitte.
server_error 500 Petitio recta erat et defectus a nostra parte est. Iterum mitte.

Codices status

Status Genus Nuntius Quando
400 invalid_request_error Failed to parse the request body as JSON: … Corpus non est JSON validum.
400 invalid_request_error unknown model: <id> model non est id publicatum. In /v1/responses etiam cum model deest.
400 invalid_request_error No user message provided Gradus Shannon: petitio nullum textum utentis continet.
400 invalid_request_error <id> does not accept image input Imago ad modellum open-weight hospitatum missa est quod imaginem ut input non accipit.
400 invalid_request_error audio and video input are not supported by any hosted model Pars audii vel video ad modellum open-weight hospitatum missa est.
400 invalid_request_error <id> does not accept response_format Output structus a modello open-weight hospitato petitus est quod eo caret.
400 invalid_request_error <id> does not accept response_format json_schema; use json_object Schema JSON ad modellum open-weight hospitatum missum est quod solum json_object accipit.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high Conatus ratiocinationis non est unus ex valoribus enumeratis. Modella open-weight hospitata.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <id> Computatio tokenorum pro modello extra modella open-weight hospitata petita est.
401 authentication_error Missing authentication Nulla clavis API missa est.
401 authentication_error Invalid API key Clavis ignota est, nova substituta est, vel revocata est.
404 not_found_error Not Found Via non exstat, exempli gratia /v1/embeddings.
405 api_error Method Not Allowed Via exstat sed non cum hac methodo HTTP.
413 invalid_request_error Failed to buffer the request body: … Corpus petitionis maius est quam 32 MiB.
415 invalid_request_error Expected request with `Content-Type: application/json` Header Content-Type deest vel non est application/json.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Campus necessarius deest, ut messages, vel campus typum JSON falsum habet.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan Limes outputi petitionis maior est quam quod de saldo tuo superest.
429 rate_limit_error Too many requests. Retry in <n>s. Defensio inundationis: plus quam 120 petitiones uno minuto in ratione tua. <n> est numerus secundorum donec minutum finiatur.
429 rate_limit_error Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan shannon-coder-1 in /v1/chat/completions et /v1/messages: vocationes Shannon Coder plani tui pro fenestra 4 horarum praesenti consumptae sunt.
429 rate_limit_error Shannon routes are temporarily busy. Please retry. Modellum hoc momento occupatum est.
500 server_error The model backend failed to answer. Please retry. Modellum responsum non edidit.
500 server_error An internal error occurred. Please retry. Defectus internus dum petitio praeparabatur.
502 api_error The model backend failed to answer. Please retry. Modellum responsum non edidit. Familia Shannon 3 et modella open-weight hospitata.
503 api_error Could not verify your quota right now. Please retry. Saldum tuum hoc momento legi non potuit.
503 api_error token counting is temporarily unavailable for this model Computatio tokenorum pro hoc modello hoc momento non praesto est.
504 api_error upstream timed out Modellum open-weight hosted diutius quam terminus petitionis non fluentis cepit.

Inspectiones hoc ordine fiunt: clavis API, corpus petitionis, id modelli, defensio inundationis, saldum. Petitio cum clave falsa et corpore falso itaque 401 reddit. Petitio quae cum statu 4xx recusatur non computatur.

Saldum et defensio inundationis

Quaeque petitio aequaliter ministratur: nulli gradus celeritatis sunt nec quota API separata. Duo tamen 429 respondere possunt, ambo cum genere rate_limit_error. Nuntius ea distinguit.

Saldum

Saldum tuum est quota diei plani, quae hora 00:00 UTC resetur, et post eam creditum emptum. Chat et API ex eodem saldo hauriunt.

Quaeque petitio primum limitem outputi sui reservat: max_tokens, vel max_output_tokens in /v1/responses, 4,096 cum neutrum mittis. Cum responsum completum est, quantitas reservata eo quod petitio usa est substituitur. Si quantitas in saldum quod superest non capit, petitio Quota exceeded reddit antequam modellum incipit.

Petitiones quae simul currunt quaeque quantitatem suam reservant. Multae petitiones parallelae cum max_tokens alto itaque saldum ad tempus consumere possunt, etiam si quodque responsum breve est. max_tokens inferius minus reservat.

Defensio inundationis

Defensio inundationis 120 petitiones per minutum per rationem permittit. Rationem computat, non clavem, per /v1/chat/completions, /v1/responses et /v1/messages simul. Minutum a prima petitione tua incipit.

Petitio numero 121 intra illud minutum Too many requests. Retry in <n>s. reddit et nihil constat. Petitiones recusatae etiam computantur, itaque cliens qui sine exspectatione iterum mittit recusatus manet donec minutum finiatur. <n> secunda ex nuntio exspecta.

Petitiones parallelae non recusantur quia parallelae sunt. In ordine exspectant et vicissim respondentur.

GET /v1/models et endpoints computationis tokenorum non computantur.

Plura de limitibus et saldo, et ubi saldum tuum et usum tuum videas: Limites et saldum Claves et usus

Quid iterandum sit

Petitionem iterum mitte solum cum eadem petitio succedere potest. SDK OpenAI et Anthropic responsa 429 et 5xx iam bis sponte iterant; max_retries (maxRetries in JavaScript) pone ut id mutes.

Error Iterum mittere? Quomodo
400, 404, 405, 413, 415, 422 Minime. Petitionem primum corrige. Nuntius campum, modellum vel input quod falsum est nominat.
401 Minime. Clavem validam utere. Clavem in pagina Claves et usus crea vel substitue.
429 Too many requests Ita, post exspectationem. Numerum secundorum in nuntio exspecta, deinde eandem petitionem mitte.
429 Quota exceeded Non ut est. max_tokens minue, resetationem cotidianam hora 00:00 UTC exspecta, vel creditum adde.
429 Shannon Coder call quota reached Ita, in fenestra proxima. Fenestrae quaque 4 horis ab 00:00 UTC incipiunt. Aliud modellum statim respondet.
429 … temporarily busy Ita. Paucis secundis exspecta, deinde in quoque conatu ulteriore diutius.
500, 502, 503 Ita. 1 secundum exspecta, deinde 2, 4 et 8. Post paucos conatus siste et id petitionis nuntia.
504 Ita. Cum stream in true posito mitte: limes temporis ad responsa non per fluxum missa pertinet.

Circulus iterationis qui hanc tabulam sequitur:

import re
import time

import openai
from openai import OpenAI

# max_retries=0: this loop does the retrying, the SDK does not add its own.
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.shannon-ai.com/v1", max_retries=0)


def create_with_retry(attempts=5, **request):
    for attempt in range(attempts):
        try:
            return client.chat.completions.create(**request)
        except openai.RateLimitError as error:
            text = str(error)
            flood = re.search(r"Retry in (\d+)s", text)
            if flood:
                time.sleep(int(flood.group(1)))   # flood protection: wait out the minute
            elif "temporarily busy" in text:
                time.sleep(2 ** attempt)
            else:
                raise                             # balance: a wait of seconds does not help
        except (openai.InternalServerError, openai.APIConnectionError):
            time.sleep(2 ** attempt)              # 1, 2, 4, 8 seconds
    raise RuntimeError("the request failed after all attempts")


response = create_with_retry(
    model="shannon-3",
    messages=[{"role": "user", "content": "Hello"}],
)
print(response.choices[0].message.content)

Errores intra fluxum

Fluxus a primo byte statum 200 habet. Defectus post id ut eventus intra fluxum advenit: chunk cum membro error in /v1/chat/completions, eventus error in /v1/messages, eventus response.failed vel error in /v1/responses. Eventus clausurae fluxus tamen sequuntur. Tale responsum ut defectum tracta et petitionem iterum mitte, sicut pro statu 5xx.

Colloquium longius quam fenestra contextus modelli hoc modo nuntiatur, cum genere invalid_request_error et codice context_length_exceeded. Colloquium abbrevia antequam iterum mittis.

Frames exacta cum streaming describuntur. Fluens

Ids petitionum

Omne responsum, erroribus inclusis, header x-request-id habet. Est valor quem in header tuo x-request-id misisti, vel 12 characteres hexadecimales cum nullum misisti. Eum in acta scribe, et cita cum auxilium de petitione rogas.