Njikwa njehie
Request dara na-eweghachi HTTP status code na JSON body nwere error type na ozi. Peeji a depụtara status niile, na-egosi error body nke API format ọ bụla, ma na-ekwu njehie ndị kwesịrị ịzighachi.
SDKs na-ebili error object nke nwere status code na fields nke body. Request a na-akpọ model na-adịghị adị:
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"}]
}' Ọ na-eweghachi status 400 na body a:
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} Error body
Enwere bodies abụọ. /v1/messages na-aza n'Anthropic format; endpoint ọ bụla ọzọ na-aza n'OpenAI format. N'abụọ, nkọwa dị na error.type na error.message, ya mere otu reader na-ejere endpoints niile ozi.
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} | Field | Ụdị | Nkọwa |
|---|---|---|
error.type | string | Ụdị njehie. Lee Error types n'okpuru. |
error.message | string | Okwu maka mmadụ. Ederede dị n'ime tebụl ndị dị n'okpuru kwụsiri ike ruo akụkụ ha na-agbanwe, egosiri dị ka <id>, <n> ma ọ bụ …. |
error.code | string | null | Dị na ụfọdụ njehie nke OpenAI format: invalid_api_key nwere 401, request_too_large nwere 413, context_length_exceeded mgbe mkparịta ụka toro ogologo, ma ọ bụghị null ma ọ bụ adịghị. Buru ụzọ kpebie site na status na error.type, were code dị ka ihe mgbakwunye. |
error.param | null | Dị na njehie ndị ahụ dị ka code. Mgbe niile null. |
type | string | Anthropic format naanị. Mgbe niile error. |
Error types
| Ụdị | Status | Nkọwa |
|---|---|---|
invalid_request_error | 400, 413, 415, 422 | Request n'onwe ya adịghị mma: field, body, model id ma ọ bụ input model anaghị anara. Gbanwee request ahụ tupu ị zighachi ya. |
authentication_error | 401 | API key adịghị, amabeghị ya ma ọ bụ a kagburu ya. |
not_found_error | 404 | Path ahụ adịghị. |
rate_limit_error | 429 | Balance adịghị ekpuchi request ahụ, flood protection kwụsịrị ya, ma ọ bụ model nọ n'ọrụ. Ozi ahụ na-ekwu nke ọ bụ. |
api_error | 500, 502, 503, 504 | Request ahụ dị mma, ọdịda ahụ si n'akụkụ anyị. Zighachi ya. |
server_error | 500 | Request ahụ dị mma, ọdịda ahụ si n'akụkụ anyị. Zighachi ya. |
Status codes
| Status | Ụdị | Ozi | Mgbe |
|---|---|---|---|
400 | invalid_request_error | Failed to parse the request body as JSON: … | Body abụghị JSON ziri ezi. |
400 | invalid_request_error | unknown model: <id> | model abụghị id e bipụtara. Na /v1/responses ọ bụkwa mgbe model adịghị. |
400 | invalid_request_error | No user message provided | Shannon tiers: request enweghị user text. |
400 | invalid_request_error | <id> does not accept image input | Zipụrụ image na hosted open-weight model na-enweghị image input. |
400 | invalid_request_error | audio and video input are not supported by any hosted model | Zipụrụ audio ma ọ bụ video part na hosted open-weight model. |
400 | invalid_request_error | <id> does not accept response_format | Arịrịọ structured output site na hosted open-weight model na-enweghị ya. |
400 | invalid_request_error | <id> does not accept response_format json_schema; use json_object | Zipụrụ JSON schema na hosted open-weight model na-anara json_object naanị. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Reasoning effort abụghị otu n'ime uru ndị depụtara. Hosted open-weight models. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <id> | Arịrịọ token counting maka model na-abụghị hosted open-weight models. |
401 | authentication_error | Missing authentication | Ezipụghị API key. |
401 | authentication_error | Invalid API key | Amabeghị key ahụ, key ọhụrụ dochiri ya, ma ọ bụ a kagburu ya. |
404 | not_found_error | Not Found | Path ahụ adịghị, dịka /v1/embeddings. |
405 | api_error | Method Not Allowed | Path ahụ dị ma ọ bụghị na HTTP method a. |
413 | invalid_request_error | Failed to buffer the request body: … | Request body buru ibu karịa 32 MiB. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Header Content-Type adịghị ma ọ bụ abụghị application/json. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Field chọrọ achọrọ adịghị, dị ka messages, ma ọ bụ field nwere JSON type na-ezighi ezi. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | Output limit nke request ka ukwuu karịa ihe fọdụrụ na balance gị. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Flood protection: karịa requests 120 n'otu nkeji na akaụntụ gị. <n> bụ ọnụọgụ sekọnd ruo mgbe nkeji ahụ gwụrụ. |
429 | rate_limit_error | Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan | shannon-coder-1 na /v1/chat/completions na /v1/messages: ejirila Shannon Coder calls nke plan gị maka 4-hour window dị ugbu a. |
429 | rate_limit_error | Shannon routes are temporarily busy. Please retry. | Model nọ n'ọrụ n'oge a. |
500 | server_error | The model backend failed to answer. Please retry. | Model emepụtaghị azịza. |
500 | server_error | An internal error occurred. Please retry. | Ọdịda dị n'ime mgbe a na-akwado request ahụ. |
502 | api_error | The model backend failed to answer. Please retry. | Model emepụtaghị azịza. Shannon 3 family na hosted open-weight models. |
503 | api_error | Could not verify your quota right now. Please retry. | Enweghị ike ịgụ balance gị n'oge a. |
503 | api_error | token counting is temporarily unavailable for this model | Token counting adịghị maka model a n'oge a. |
504 | api_error | upstream timed out | Hosted open-weight model were oge karịrị oke oge nke request na-abụghị stream. |
Nlele na-aga n'usoro a: API key, request body, model id, flood protection, balance. Ya mere request nwere key na-ezighi ezi na body na-ezighi ezi na-eweghachi 401. A naghị akwụ ụgwọ maka request a jụrụ site na 4xx status.
Balance na flood protection
A na-ejere request ọ bụla otu aka: enweghị rate tiers, enweghịkwa API quota dị iche. Ihe abụọ nwere ike ịzakwa 429, ha abụọ nwere ụdị rate_limit_error. Ozi ahụ na-egosi ndịiche.
Balance
Balance gị bụ plan allowance nke taa, nke na-ebido ọzọ na 00:00 UTC, na mgbe ya credit i zụtara. Chat na API na-eji otu balance.
Request ọ bụla buru ụzọ debe output limit ya: max_tokens, ma ọ bụ max_output_tokens na /v1/responses, 4,096 mgbe ị zipụghị ọ bụla n'ime ha. Mgbe azịza zuru ezu, ego edebere ahụ na-anọchi ihe request ahụ jiri. Ọ bụrụ na ego ahụ abaghị n'ime balance fọdụrụ, request ahụ na-eweghachi Quota exceeded tupu model amalite.
Requests na-agba n'otu oge na-edebe ego nke ha ọ bụla. Ya mere ọtụtụ requests n'otu oge nwere max_tokens dị elu nwere ike ịmechu balance nwa oge, ọbụlagodi mgbe azịza ọ bụla dị mkpụmkpụ. max_tokens dị ala na-edebe obere.
Flood protection
Flood protection na-ekwe 120 requests n'otu nkeji maka akaụntụ ọ bụla. Ọ na-agụ akaụntụ, ọ bụghị key, n'elu /v1/chat/completions, /v1/responses na /v1/messages ọnụ. Nkeji ahụ na-amalite site na request mbụ gị.
Request nọmba 121 n'ime nkeji ahụ na-eweghachi Too many requests. Retry in <n>s. ma ọ naghị efu ihe ọ bụla. A na-agụkwa requests a jụrụ, ya mere client na-ezighachi na-echeghị ga-anọgide na-ajụ ruo mgbe nkeji ahụ gwụrụ. Chere sekọnd <n> si n'ozi ahụ.
A naghị ajụ requests a zipụrụ n'otu oge n'ihi na ha dị n'otu oge. Ha na-eche n'ahịrị ma a na-aza ha n'usoro.
A naghị agụ GET /v1/models na token counting endpoints.
Ihe ndị ọzọ gbasara limits na balance, na ebe ịhụ balance na ojiji nke gị: Limits na balance Keys & usage
Ihe a ga-ezighachi
Zighachi request naanị mgbe otu request ahụ nwere ike ịga nke ọma. OpenAI na Anthropic SDKs na-anwa ọzọ azịza 429 na 5xx ugboro abụọ n'onwe ha; tọọ max_retries (maxRetries na JavaScript) iji gbanwee nke ahụ.
| Njehie | Zighachi? | Otu esi eme |
|---|---|---|
400, 404, 405, 413, 415, 422 | Mba. Buru ụzọ dozie request ahụ. | Ozi ahụ na-akpọ field, model ma ọ bụ input ahụ na-adịghị mma. |
401 | Mba. Jiri key ziri ezi. | Mepụta ma ọ bụ dochie key na peeji Keys & usage. |
429 Too many requests | Ee, mgbe ịchere. | Chere ọnụọgụ sekọnd dị n'ozi ahụ, wee zipụ otu request ahụ. |
429 Quota exceeded | Ọ bụghị dị ka ọ dị. | Belata max_tokens, chere daily reset na 00:00 UTC, ma ọ bụ gbakwunye credit. |
429 Shannon Coder call quota reached | Ee, n'window na-esote. | Windows na-amalite kwa awa 4 site na 00:00 UTC. Model ọzọ na-aza ozugbo. |
429 … temporarily busy | Ee. | Chere ihe ọbụla sekọnd ole na ole, wee chere ogologo oge n'ịnwa ọ bụla ọzọ. |
500, 502, 503 | Ee. | Chere sekọnd 1, wee 2, 4 na 8. Kwụsị mgbe nnwale ole na ole gasịrị ma kọọ request id. |
504 | Ee. | Zipụ ya na stream tọrọ true: oke oge na-emetụta azịza ndị na-abụghị stream. |
Retry loop na-eso tebụl a:
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); Njehie n'ime stream
Stream nwere status 200 site na byte mbụ ya. Ọdịda emere mgbe nke ahụ gasịrị na-abịa dị ka event n'ime stream: chunk nwere member error na /v1/chat/completions, event error na /v1/messages, event response.failed ma ọ bụ error na /v1/responses. Events mmechi nke stream ka na-eso. Lee azịza dị otú ahụ dị ka nke dara ma zighachi request ahụ, dị ka maka 5xx status.
A na-akọ mkparịta ụka toro ogologo karịa context window nke model n'ụzọ a, na ụdị invalid_request_error na koodu context_length_exceeded. Mee ka mkparịta ụka ahụ dị mkpụmkpụ tupu ị zighachi ya.
A kọwara frames ziri ezi na streaming. Nzipu ozugbo
Request ids
Azịza ọ bụla, gụnyere njehie, nwere header x-request-id. Ọ bụ uru i zipụrụ na header x-request-id nke gị, ma ọ bụ mkpụrụedemede hexadecimal 12 mgbe ị zipụghị ọ bụla. Debe ya na log, ma kwuo ya mgbe ị na-arịọ enyemaka gbasara request.