Rheoli gwallau
Mae cais sy'n methu yn dychwelyd cod statws HTTP a chorff JSON gyda math o wall a neges. Mae'r dudalen hon yn rhestru pob statws, yn dangos corff gwall pob fformat API ac yn dweud pa wallau sy'n werth eu hanfon eto.
Mae'r SDKs yn codi gwrthrych gwall sy'n cario'r cod statws a meysydd y corff. Mae'r cais hwn yn enwi model nad yw'n bodoli:
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"}]
}' Mae'n dychwelyd statws 400 a'r corff hwn:
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} Corff y gwall
Mae dau gorff. Mae /v1/messages yn ateb yn fformat Anthropic; mae pob pwynt terfyn arall yn ateb yn fformat OpenAI. Yn y ddau, mae'r manylion yn error.type ac error.message, felly mae un darllenydd yn gwasanaethu pob pwynt terfyn.
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} | Maes | Math | Disgrifiad |
|---|---|---|
error.type | string | Y math o wall. Gweler Mathau o wallau isod. |
error.message | string | Brawddeg i berson. Mae'r testunau yn y tablau isod yn sefydlog ac eithrio eu rhannau amrywiol, a ddangosir fel <id>, <n> neu …. |
error.code | string | null | Yn bresennol ar rai gwallau yn fformat OpenAI: invalid_api_key gyda 401, request_too_large gyda 413, context_length_exceeded pan fo sgwrs yn rhy hir, fel arall null neu'n absennol. Penderfynwch ar sail y statws a error.type yn gyntaf a thrinnwch code fel ychwanegiad. |
error.param | null | Yn bresennol ar yr un gwallau â code. Bob amser yn null. |
type | string | Fformat Anthropic yn unig. Bob amser yn error. |
Mathau o wallau
| Math | Statysau | Disgrifiad |
|---|---|---|
invalid_request_error | 400, 413, 415, 422 | Mae'r cais ei hun yn anghywir: maes, y corff, id y model neu fewnbwn nad yw'r model yn ei gymryd. Newidiwch y cais cyn i chi ei anfon eto. |
authentication_error | 401 | Mae'r allwedd API ar goll, yn anhysbys neu wedi'i dirymu. |
not_found_error | 404 | Nid yw'r llwybr yn bodoli. |
rate_limit_error | 429 | Nid yw'r balans yn cwmpasu'r cais, stopiodd amddiffyniad rhag llifogydd ef, neu mae'r model yn brysur. Mae'r neges yn dweud pa un. |
api_error | 500, 502, 503, 504 | Roedd y cais yn iawn ac mae'r methiant ar ein hochr ni. Anfonwch ef eto. |
server_error | 500 | Roedd y cais yn iawn ac mae'r methiant ar ein hochr ni. Anfonwch ef eto. |
Codau statws
| Statws | Math | Neges | Pryd |
|---|---|---|---|
400 | invalid_request_error | Failed to parse the request body as JSON: … | Nid yw'r corff yn JSON dilys. |
400 | invalid_request_error | unknown model: <id> | Nid yw model yn id cyhoeddedig. Ar /v1/responses hefyd pan fo model ar goll. |
400 | invalid_request_error | No user message provided | Haenau Shannon: nid yw'r cais yn cynnwys testun defnyddiwr. |
400 | invalid_request_error | <id> does not accept image input | Anfonwyd delwedd i fodel pwysau agored a gynhelir heb fewnbwn delwedd. |
400 | invalid_request_error | audio and video input are not supported by any hosted model | Anfonwyd rhan sain neu fideo i fodel pwysau agored a gynhelir. |
400 | invalid_request_error | <id> does not accept response_format | Gofynnwyd am allbwn strwythuredig gan fodel pwysau agored a gynhelir hebddo. |
400 | invalid_request_error | <id> does not accept response_format json_schema; use json_object | Anfonwyd sgema JSON i fodel pwysau agored a gynhelir sy'n cymryd json_object yn unig. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Nid yw'r ymdrech resymu yn un o'r gwerthoedd a restrir. Modelau pwysau agored a gynhelir. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <id> | Gofynnwyd am gyfrif tokenau ar gyfer model y tu allan i'r modelau pwysau agored a gynhelir. |
401 | authentication_error | Missing authentication | Ni anfonwyd allwedd API. |
401 | authentication_error | Invalid API key | Mae'r allwedd yn anhysbys, wedi'i disodli gan un newyddach, neu wedi'i dirymu. |
404 | not_found_error | Not Found | Nid yw'r llwybr yn bodoli, er enghraifft /v1/embeddings. |
405 | api_error | Method Not Allowed | Mae'r llwybr yn bodoli ond nid gyda'r dull HTTP hwn. |
413 | invalid_request_error | Failed to buffer the request body: … | Mae corff y cais yn fwy na 32 MiB. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Mae'r pennawd Content-Type ar goll neu nid yw'n application/json. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Mae maes gofynnol ar goll, fel messages, neu mae gan faes y math JSON anghywir. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | Mae terfyn allbwn y cais yn fwy na'r hyn sy'n weddill o'ch balans. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Amddiffyniad rhag llifogydd: mwy na 120 cais mewn un funud ar eich cyfrif. <n> yw nifer yr eiliadau nes bod y funud yn dod i ben. |
429 | rate_limit_error | Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan | shannon-coder-1 ar /v1/chat/completions a /v1/messages: mae galwadau Shannon Coder eich cynllun ar gyfer y ffenestr 4 awr gyfredol wedi'u defnyddio. |
429 | rate_limit_error | Shannon routes are temporarily busy. Please retry. | Mae'r model yn brysur ar hyn o bryd. |
500 | server_error | The model backend failed to answer. Please retry. | Ni chynhyrchodd y model ateb. |
500 | server_error | An internal error occurred. Please retry. | Methiant mewnol wrth baratoi'r cais. |
502 | api_error | The model backend failed to answer. Please retry. | Ni chynhyrchodd y model ateb. Teulu Shannon 3 a modelau pwysau agored a gynhelir. |
503 | api_error | Could not verify your quota right now. Please retry. | Ni ellid darllen eich balans ar hyn o bryd. |
503 | api_error | token counting is temporarily unavailable for this model | Nid yw cyfrif tokenau ar gael ar gyfer y model hwn ar hyn o bryd. |
504 | api_error | upstream timed out | Cymerodd model pwysau agored a gynhelir yn hirach na therfyn amser cais nad yw'n cael ei ffrydio. |
Mae'r gwiriadau'n rhedeg yn y drefn hon: allwedd API, corff y cais, id y model, amddiffyniad rhag llifogydd, balans. Felly mae cais gydag allwedd anghywir a chorff anghywir yn dychwelyd 401. Ni chodir tâl am gais a wrthodir â statws 4xx.
Balans ac amddiffyniad rhag llifogydd
Mae pob cais yn cael ei wasanaethu'n gyfartal: nid oes haenau cyfradd na chwota API ar wahân. Gall dau beth ateb 429 o hyd, y ddau gyda'r math rate_limit_error. Mae'r neges yn eu gwahaniaethu.
Balans
Eich balans yw lwfans y cynllun heddiw, sy'n ailosod am 00:00 UTC, ac ar ei ôl eich credyd a brynwyd. Mae sgwrs a'r API yn tynnu o'r un balans.
Mae pob cais yn neilltuo ei derfyn allbwn yn gyntaf: max_tokens, neu max_output_tokens ar /v1/responses, 4,096 pan nad anfonwch yr un. Pan fo'r ateb yn gyflawn, caiff y swm a neilltuwyd ei ddisodli gan yr hyn a ddefnyddiodd y cais. Os nad yw'r swm yn ffitio i'r balans sy'n weddill, mae'r cais yn dychwelyd Quota exceeded cyn i'r model ddechrau.
Mae ceisiadau sy'n rhedeg ar yr un pryd yn neilltuo eu swm eu hunain. Felly gall llawer o geisiadau cyfochrog gyda max_tokens uchel ddefnyddio'r balans am eiliad, hyd yn oed pan fo pob ateb yn fyr. Mae max_tokens is yn neilltuo llai.
Amddiffyniad rhag llifogydd
Mae amddiffyniad rhag llifogydd yn caniatáu 120 cais y funud i bob cyfrif. Mae'n cyfrif y cyfrif, nid yr allwedd, ar draws /v1/chat/completions, /v1/responses a /v1/messages gyda'i gilydd. Mae'r funud yn dechrau gyda'ch cais cyntaf.
Mae cais rhif 121 o fewn y funud honno yn dychwelyd Too many requests. Retry in <n>s. ac nid yw'n costio dim. Mae ceisiadau a wrthodir yn cyfrif hefyd, felly mae cleient sy'n anfon eto heb aros yn parhau i gael ei wrthod nes bod y funud ar ben. Arhoswch y <n> eiliad o'r neges.
Nid yw ceisiadau a anfonir yn gyfochrog yn cael eu gwrthod am eu bod yn gyfochrog. Maent yn aros yn y rhes ac yn cael eu hateb bob yn ail.
Nid yw GET /v1/models a'r pwyntiau terfyn cyfrif tokenau yn cael eu cyfrif.
Mwy am derfynau a balans, a ble i weld eich balans a'ch defnydd eich hun: Terfynau a balans Allweddi a defnydd
Beth i'w ailgeisio
Anfonwch gais eto dim ond pan all yr un cais lwyddo. Mae SDKs OpenAI ac Anthropic eisoes yn ailgeisio atebion 429 a 5xx ddwywaith ar eu pen eu hunain; gosodwch max_retries (maxRetries yn JavaScript) i newid hynny.
| Gwall | Anfon eto? | Sut |
|---|---|---|
400, 404, 405, 413, 415, 422 | Na. Cywirwch y cais yn gyntaf. | Mae'r neges yn enwi'r maes, y model neu'r mewnbwn sy'n anghywir. |
401 | Na. Defnyddiwch allwedd ddilys. | Crëwch neu amnewidiwch yr allwedd ar y dudalen Keys & usage. |
429 Too many requests | Ie, ar ôl yr aros. | Arhoswch nifer yr eiliadau yn y neges, yna anfonwch yr un cais. |
429 Quota exceeded | Nid fel y mae. | Gostyngwch max_tokens, arhoswch am yr ailosod dyddiol am 00:00 UTC, neu ychwanegwch gredyd. |
429 Shannon Coder call quota reached | Ie, yn y ffenestr nesaf. | Mae'r ffenestri'n dechrau bob 4 awr o 00:00 UTC. Mae model arall yn ateb ar unwaith. |
429 … temporarily busy | Ie. | Arhoswch ychydig eiliadau, yna'n hirach ar bob ymgais bellach. |
500, 502, 503 | Ie. | Arhoswch 1 eiliad, yna 2, 4 ac 8. Stopiwch ar ôl ychydig ymdrechion ac adroddwch yr id cais. |
504 | Ie. | Anfonwch ef gyda stream wedi'i osod i true: mae'r terfyn amser yn berthnasol i atebion nad ydynt yn cael eu ffrydio. |
Dolen ailgeisio sy'n dilyn y tabl hwn:
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); Gwallau y tu mewn i ffrwd
Mae gan ffrwd statws 200 o'i bytiad cyntaf. Mae methiant ar ôl hynny yn cyrraedd fel digwyddiad y tu mewn i'r ffrwd: darn ag aelod error ar /v1/chat/completions, digwyddiad error ar /v1/messages, digwyddiad response.failed neu error ar /v1/responses. Mae digwyddiadau cau'r ffrwd yn dilyn o hyd. Trinnwch ateb o'r fath fel un a fethodd ac anfonwch y cais eto, fel ar gyfer statws 5xx.
Adroddir sgwrs sy'n hirach na ffenestr cyd-destun y model fel hyn, gyda'r math invalid_request_error a'r cod context_length_exceeded. Byrhewch y sgwrs cyn i chi ei hanfon eto.
Disgrifir y fframiau union gyda ffrydio. Ffrydio
Ids cais
Mae gan bob ateb, gwallau yn gynwysedig, bennawd x-request-id. Dyma'r gwerth a anfonoch yn eich pennawd x-request-id eich hun, neu 12 nod hecsadegol pan na anfonoch un. Cofnodwch ef, a'i ddyfynnu pan ofynnwch am help gyda chais.