Villumeðhöndlun
Beiðni sem mistekst skilar HTTP-stöðukóða og JSON-meginmáli með villugerð og skilaboðum. Þessi síða telur upp hverja stöðu, sýnir villumeginmál hvers API-sniðs og segir hvaða villur er þess virði að senda aftur.
SDK kasta villuhlut sem ber stöðukóðann og reiti meginmálsins. Þessi beiðni nefnir líkan sem er ekki til:
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"}]
}' Hún skilar stöðunni 400 og þessu meginmáli:
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} Meginmál villu
Meginmálin eru tvö. /v1/messages svarar á Anthropic-sniði; allir aðrir endapunktar svara á OpenAI-sniði. Í báðum eru upplýsingarnar í error.type og error.message, svo einn lesari dugir fyrir alla endapunkta.
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} | Reitur | Gerð | Lýsing |
|---|---|---|
error.type | string | Gerð villunnar. Sjá Villugerðir hér á eftir. |
error.message | string | Setning fyrir manneskju. Textarnir í töflunum hér á eftir eru stöðugir að breytilegum hlutum undanskildum, sem sýndir eru sem <id>, <n> eða …. |
error.code | string | null | Til staðar á sumum villum OpenAI-sniðsins: invalid_api_key með 401, request_too_large með 413, context_length_exceeded þegar samtal er of langt, annars null eða fjarverandi. Ákveddu fyrst út frá stöðunni og error.type og líttu á code sem viðbót. |
error.param | null | Til staðar á sömu villum og code. Alltaf null. |
type | string | Aðeins Anthropic-snið. Alltaf error. |
Villugerðir
| Gerð | Stöður | Lýsing |
|---|---|---|
invalid_request_error | 400, 413, 415, 422 | Beiðnin sjálf er röng: reitur, meginmál, líkanauðkenni eða inntak sem líkanið tekur ekki við. Breyttu beiðninni áður en þú sendir aftur. |
authentication_error | 401 | API-lykil vantar, hann er óþekktur eða afturkallaður. |
not_found_error | 404 | Slóðin er ekki til. |
rate_limit_error | 429 | Staðan dugir ekki fyrir beiðninni, flóðvörn stöðvaði hana, eða líkanið er upptekið. Skilaboðin segja hvað. |
api_error | 500, 502, 503, 504 | Beiðnin var í lagi og bilunin er okkar megin. Sendu hana aftur. |
server_error | 500 | Beiðnin var í lagi og bilunin er okkar megin. Sendu hana aftur. |
Stöðukóðar
| Staða | Gerð | Skilaboð | Hvenær |
|---|---|---|---|
400 | invalid_request_error | Failed to parse the request body as JSON: … | Meginmálið er ekki gilt JSON. |
400 | invalid_request_error | unknown model: <id> | model er ekki útgefið auðkenni. Á /v1/responses einnig þegar model vantar. |
400 | invalid_request_error | No user message provided | Shannon-þrep: beiðnin geymir engan notandatexta. |
400 | invalid_request_error | <id> does not accept image input | Mynd var send til hýsts líkans með opnum þyngdum án myndainntaks. |
400 | invalid_request_error | audio and video input are not supported by any hosted model | Hljóð- eða myndskeiðshluti var sendur til hýsts líkans með opnum þyngdum. |
400 | invalid_request_error | <id> does not accept response_format | Skipulagt úttak var beðið um af hýstu líkani með opnum þyngdum sem hefur það ekki. |
400 | invalid_request_error | <id> does not accept response_format json_schema; use json_object | JSON-skema var sent til hýsts líkans með opnum þyngdum sem tekur aðeins við json_object. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Rökhugsunarátakið er ekki eitt af gildunum á listanum. Hýst líkön með opnum þyngdum. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <id> | Beðið var um táknatalningu fyrir líkan utan hýstra líkana með opnum þyngdum. |
401 | authentication_error | Missing authentication | Enginn API-lykill var sendur. |
401 | authentication_error | Invalid API key | Lykillinn er óþekktur, var skipt út fyrir nýrri lykil eða var afturkallaður. |
404 | not_found_error | Not Found | Slóðin er ekki til, til dæmis /v1/embeddings. |
405 | api_error | Method Not Allowed | Slóðin er til en ekki með þessari HTTP-aðferð. |
413 | invalid_request_error | Failed to buffer the request body: … | Beiðnameginmálið er stærra en 32 MiB. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Content-Type haus vantar eða er ekki application/json. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Nauðsynlegan reit vantar, svo sem messages, eða reitur hefur rangt JSON-gagnatag. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | Úttaksmörk beiðninnar eru stærri en það sem eftir er af stöðunni þinni. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Flóðvörn: fleiri en 120 beiðnir á einni mínútu á reikningnum þínum. <n> er fjöldi sekúndna þar til mínútan endar. |
429 | rate_limit_error | Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan | shannon-coder-1 á /v1/chat/completions og /v1/messages: Shannon Coder köll áskriftarinnar þinnar fyrir núverandi 4 klukkustunda glugga eru uppurin. |
429 | rate_limit_error | Shannon routes are temporarily busy. Please retry. | Líkanið er upptekið á þessari stundu. |
500 | server_error | The model backend failed to answer. Please retry. | Líkanið skilaði ekki svari. |
500 | server_error | An internal error occurred. Please retry. | Innri bilun meðan beiðnin var undirbúin. |
502 | api_error | The model backend failed to answer. Please retry. | Líkanið skilaði ekki svari. Shannon 3 fjölskyldan og hýst líkön með opnum þyngdum. |
503 | api_error | Could not verify your quota right now. Please retry. | Ekki tókst að lesa stöðuna þína á þessari stundu. |
503 | api_error | token counting is temporarily unavailable for this model | Táknatalning er ekki í boði fyrir þetta líkan á þessari stundu. |
504 | api_error | upstream timed out | Hýst líkan með opnum þyngdum var lengur en tímamörk beiðni sem er ekki streymd. |
Athuganir keyra í þessari röð: API-lykill, beiðnameginmál, líkanauðkenni, flóðvörn, staða. Beiðni með röngum lykli og röngu meginmáli skilar því 401. Beiðni sem er hafnað með 4xx stöðu er ekki gjaldfærð.
Staða og flóðvörn
Hver beiðni er afgreidd jafnt: það eru engin hraðaþrep og enginn sérstakur API-kvóti. Tvennt getur þó svarað 429, bæði með gerðinni rate_limit_error. Skilaboðin greina þau að.
Staða
Staðan þín er dagleg úthlutun áskriftarinnar, sem endurstillist kl. 00:00 UTC, og á eftir henni keypt inneign. Spjall og API draga af sömu stöðu.
Hver beiðni tekur fyrst frá úttaksmörk sín: max_tokens, eða max_output_tokens á /v1/responses, 4,096 þegar þú sendir hvorugt. Þegar svarið er fullbúið kemur það sem beiðnin notaði í stað frátekna magnsins. Ef magnið rúmast ekki innan stöðunnar sem eftir er skilar beiðnin Quota exceeded áður en líkanið byrjar.
Beiðnir sem keyra á sama tíma taka hver frá sitt magn. Margar samhliða beiðnir með hátt max_tokens geta því tæmt stöðuna um stund, jafnvel þótt hvert svar sé stutt. Lægra max_tokens tekur minna frá.
Flóðvörn
Flóðvörn leyfir 120 beiðnir á mínútu á reikning. Hún telur reikninginn, ekki lykilinn, yfir /v1/chat/completions, /v1/responses og /v1/messages saman. Mínútan hefst með fyrstu beiðninni þinni.
Beiðni númer 121 innan þeirrar mínútu skilar Too many requests. Retry in <n>s. og kostar ekkert. Beiðnir sem er hafnað teljast líka, svo biðlari sem sendir aftur án þess að bíða er áfram hafnað þar til mínútan er liðin. Bíddu þær <n> sekúndur sem koma fram í skilaboðunum.
Beiðnum sem eru sendar samhliða er ekki hafnað fyrir að vera samhliða. Þær bíða í röð og er svarað hverri á eftir annarri.
GET /v1/models og talningarendapunktar tákna eru ekki taldir.
Meira um mörk og stöðu, og hvar þú sérð þína eigin stöðu og notkun: Mörk og staða Lyklar og notkun
Hvað á að endurreyna
Sendu beiðni aftur aðeins þegar sama beiðni getur tekist. OpenAI og Anthropic SDK endurreyna nú þegar 429 og 5xx svör tvisvar af sjálfu sér; stilltu max_retries (maxRetries í JavaScript) til að breyta því.
| Villa | Senda aftur? | Hvernig |
|---|---|---|
400, 404, 405, 413, 415, 422 | Nei. Leiðréttu beiðnina fyrst. | Skilaboðin nefna reitinn, líkanið eða inntakið sem er rangt. |
401 | Nei. Notaðu gildan lykil. | Búðu til eða skiptu um lykil á síðunni Lyklar og notkun. |
429 Too many requests | Já, eftir biðina. | Bíddu þann sekúndufjölda sem er í skilaboðunum og sendu síðan sömu beiðni. |
429 Quota exceeded | Ekki eins og hún er. | Lækkaðu max_tokens, bíddu eftir daglegri endurstillingu kl. 00:00 UTC, eða bættu við inneign. |
429 Shannon Coder call quota reached | Já, í næsta glugga. | Gluggarnir hefjast á 4 klukkustunda fresti frá 00:00 UTC. Annað líkan svarar strax. |
429 … temporarily busy | Já. | Bíddu í nokkrar sekúndur, síðan lengur við hverja frekari tilraun. |
500, 502, 503 | Já. | Bíddu 1 sekúndu, síðan 2, 4 og 8. Hættu eftir nokkrar tilraunir og tilkynntu beiðnaauðkennið. |
504 | Já. | Sendu hana með stream stillt á true: tímamörkin gilda um svör sem eru ekki streymd. |
Endurtilraunalykkja sem fylgir þessari töflu:
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); Villur inni í streymi
Straumur hefur stöðuna 200 frá fyrsta bæti. Bilun eftir það berst sem atburður inni í straumnum: bútur með error meðlim á /v1/chat/completions, error atburður á /v1/messages, response.failed eða error atburður á /v1/responses. Lokaatburðir straumsins fylgja samt. Líttu á slíkt svar sem misheppnað og sendu beiðnina aftur, eins og fyrir 5xx stöðu.
Samtal sem er lengra en samhengisgluggi líkansins er tilkynnt á þennan hátt, með gerðinni invalid_request_error og kóðanum context_length_exceeded. Styttu samtalið áður en þú sendir aftur.
Nákvæmu rammarnir eru lýstir með streymi. Streymi
Beiðnaauðkenni
Hvert svar, villur meðtaldar, hefur x-request-id haus. Hann er gildið sem þú sendir í þínum eigin x-request-id haus, eða 12 sextándakerfisstafir þegar þú sendir ekkert. Skráðu hann og nefndu hann þegar þú biður um hjálp með beiðni.