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 import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
try {
await client.chat.completions.create({
model: "no-such-model",
messages: [{ role: "user", content: "Hello" }],
});
} catch (error) {
if (!(error instanceof OpenAI.APIError)) throw error;
console.log(error.status); // 400
console.log(error.type); // invalid_request_error
console.log(error.error.message); // unknown model: no-such-model
} curl -i https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "no-such-model",
"messages": [{"role": "user", "content": "Hello"}]
}' Statum 400 et hoc corpus reddit:
{
"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.
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"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) import OpenAI from "openai";
// maxRetries: 0 — this loop does the retrying, the SDK does not add its own.
const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://api.shannon-ai.com/v1", maxRetries: 0 });
const sleep = (seconds) => new Promise((resolve) => setTimeout(resolve, seconds * 1000));
async function createWithRetry(request, attempts = 5) {
for (let attempt = 0; attempt < attempts; attempt++) {
try {
return await client.chat.completions.create(request);
} catch (error) {
const text = String(error.message);
const flood = text.match(/Retry in (\d+)s/);
if (error.status === 429 && flood) {
await sleep(Number(flood[1])); // flood protection: wait out the minute
} else if (error.status === 429 && text.includes("temporarily busy")) {
await sleep(2 ** attempt);
} else if (error.status >= 500 || error instanceof OpenAI.APIConnectionError) {
await sleep(2 ** attempt); // 1, 2, 4, 8 seconds
} else {
throw error; // wrong request, wrong key or balance
}
}
}
throw new Error("the request failed after all attempts");
}
const response = await createWithRetry({
model: "shannon-3",
messages: [{ role: "user", content: "Hello" }],
});
console.log(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.