ఎరర్ హ్యాండ్లింగ్
విఫలమైన రిక్వెస్ట్ HTTP స్టేటస్ కోడ్ను మరియు ఎరర్ రకం, మెసేజ్ ఉన్న JSON బాడీని తిరిగి ఇస్తుంది. ఈ పేజీ ప్రతి స్టేటస్ను జాబితా చేస్తుంది, ప్రతి API ఫార్మాట్ యొక్క ఎరర్ బాడీని చూపిస్తుంది మరియు ఏ ఎరర్లను మళ్ళీ పంపడం విలువైనదో చెబుతుంది.
SDK లు స్టేటస్ కోడ్ను మరియు బాడీ ఫీల్డ్లను కలిగి ఉన్న ఎరర్ ఆబ్జెక్ట్ను రేజ్ చేస్తాయి. ఈ రిక్వెస్ట్ లేని మోడల్ను పేర్కొంటుంది:
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"}]
}' ఇది స్టేటస్ 400 మరియు ఈ బాడీని తిరిగి ఇస్తుంది:
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} ఎరర్ బాడీ
రెండు బాడీలు ఉన్నాయి. /v1/messages Anthropic ఫార్మాట్లో సమాధానం ఇస్తుంది; మిగతా ప్రతి ఎండ్పాయింట్ OpenAI ఫార్మాట్లో సమాధానం ఇస్తుంది. రెండింటిలోనూ వివరాలు error.type మరియు error.message లో ఉంటాయి, కాబట్టి ఒకే రీడర్ అన్ని ఎండ్పాయింట్లకు సరిపోతుంది.
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} | ఫీల్డ్ | రకం | వివరణ |
|---|---|---|
error.type | string | ఎరర్ రకం. దిగువన ఎరర్ రకాలు చూడండి. |
error.message | string | మనిషి కోసం ఒక వాక్యం. దిగువ పట్టికలలోని టెక్స్ట్లు <id>, <n> లేదా … గా చూపిన వేరియబుల్ భాగాలు తప్ప స్థిరంగా ఉంటాయి. |
error.code | string | null | OpenAI ఫార్మాట్లోని కొన్ని ఎరర్లలో ఉంటుంది: 401 తో invalid_api_key, 413 తో request_too_large, సంభాషణ చాలా పొడవుగా ఉన్నప్పుడు context_length_exceeded, లేకపోతే null లేదా ఉండదు. ముందుగా స్టేటస్ మరియు error.type ఆధారంగా నిర్ణయించండి మరియు code ను అదనపు సమాచారంగా పరిగణించండి. |
error.param | null | code ఉన్న అవే ఎరర్లలో ఉంటుంది. ఎల్లప్పుడూ null. |
type | string | Anthropic ఫార్మాట్లో మాత్రమే. ఎల్లప్పుడూ error. |
ఎరర్ రకాలు
| రకం | స్టేటస్లు | వివరణ |
|---|---|---|
invalid_request_error | 400, 413, 415, 422 | రిక్వెస్ట్లోనే తప్పు ఉంది: ఒక ఫీల్డ్, బాడీ, మోడల్ id లేదా మోడల్ తీసుకోని ఇన్పుట్. మళ్ళీ పంపే ముందు రిక్వెస్ట్ను మార్చండి. |
authentication_error | 401 | API కీ లేదు, తెలియనిది లేదా రద్దు చేయబడినది. |
not_found_error | 404 | ఆ path లేదు. |
rate_limit_error | 429 | బ్యాలెన్స్ రిక్వెస్ట్ను భరించలేదు, flood protection దాన్ని ఆపింది, లేదా మోడల్ బిజీగా ఉంది. ఏదో మెసేజ్ చెబుతుంది. |
api_error | 500, 502, 503, 504 | రిక్వెస్ట్ సరిగ్గానే ఉంది, వైఫల్యం మా వైపు ఉంది. దాన్ని మళ్ళీ పంపండి. |
server_error | 500 | రిక్వెస్ట్ సరిగ్గానే ఉంది, వైఫల్యం మా వైపు ఉంది. దాన్ని మళ్ళీ పంపండి. |
స్టేటస్ కోడ్లు
| స్టేటస్ | రకం | మెసేజ్ | ఎప్పుడు |
|---|---|---|---|
400 | invalid_request_error | Failed to parse the request body as JSON: … | బాడీ చెల్లుబాటు అయ్యే JSON కాదు. |
400 | invalid_request_error | unknown model: <id> | model ప్రచురించిన id కాదు. /v1/responses లో model లేనప్పుడు కూడా. |
400 | invalid_request_error | No user message provided | Shannon టియర్లు: రిక్వెస్ట్లో యూజర్ టెక్స్ట్ లేదు. |
400 | invalid_request_error | <id> does not accept image input | చిత్ర ఇన్పుట్ లేని హోస్ట్ చేసిన ఓపెన్-వెయిట్ మోడల్కు చిత్రం పంపబడింది. |
400 | invalid_request_error | audio and video input are not supported by any hosted model | హోస్ట్ చేసిన ఓపెన్-వెయిట్ మోడల్కు ఆడియో లేదా వీడియో భాగం పంపబడింది. |
400 | invalid_request_error | <id> does not accept response_format | నిర్మిత అవుట్పుట్ లేని హోస్ట్ చేసిన ఓపెన్-వెయిట్ మోడల్ నుండి నిర్మిత అవుట్పుట్ అడిగారు. |
400 | invalid_request_error | <id> does not accept response_format json_schema; use json_object | json_object మాత్రమే తీసుకునే హోస్ట్ చేసిన ఓపెన్-వెయిట్ మోడల్కు JSON schema పంపబడింది. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | రీజనింగ్ effort జాబితాలోని విలువల్లో ఒకటి కాదు. హోస్ట్ చేసిన ఓపెన్-వెయిట్ మోడల్స్. |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <id> | హోస్ట్ చేసిన ఓపెన్-వెయిట్ మోడల్స్ కాని మోడల్కు tokens లెక్కింపు అడిగారు. |
401 | authentication_error | Missing authentication | API కీ పంపబడలేదు. |
401 | authentication_error | Invalid API key | కీ తెలియనిది, కొత్త దానితో మార్చబడింది, లేదా రద్దు చేయబడింది. |
404 | not_found_error | Not Found | path లేదు, ఉదాహరణకు /v1/embeddings. |
405 | api_error | Method Not Allowed | path ఉంది కానీ ఈ HTTP మెథడ్తో కాదు. |
413 | invalid_request_error | Failed to buffer the request body: … | రిక్వెస్ట్ బాడీ 32 MiB కంటే పెద్దది. |
415 | invalid_request_error | Expected request with `Content-Type: application/json` | Content-Type హెడర్ లేదు లేదా application/json కాదు. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages వంటి తప్పనిసరి ఫీల్డ్ లేదు, లేదా ఒక ఫీల్డ్కు తప్పు JSON రకం ఉంది. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | రిక్వెస్ట్ అవుట్పుట్ పరిమితి మీ బ్యాలెన్స్లో మిగిలిన దానికంటే పెద్దది. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Flood protection: మీ ఖాతాలో ఒక నిమిషంలో 120 కంటే ఎక్కువ రిక్వెస్ట్లు. <n> అనేది నిమిషం ముగిసే వరకు సెకన్ల సంఖ్య. |
429 | rate_limit_error | Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan | /v1/chat/completions మరియు /v1/messages లో shannon-coder-1: ప్రస్తుత 4-గంటల విండోకు మీ ప్లాన్ Shannon Coder కాల్స్ ఉపయోగించబడ్డాయి. |
429 | rate_limit_error | Shannon routes are temporarily busy. Please retry. | మోడల్ ఈ క్షణంలో బిజీగా ఉంది. |
500 | server_error | The model backend failed to answer. Please retry. | మోడల్ సమాధానం ఇవ్వలేదు. |
500 | server_error | An internal error occurred. Please retry. | రిక్వెస్ట్ సిద్ధం చేస్తున్నప్పుడు అంతర్గత వైఫల్యం. |
502 | api_error | The model backend failed to answer. Please retry. | మోడల్ సమాధానం ఇవ్వలేదు. Shannon 3 ఫ్యామిలీ మరియు హోస్ట్ చేసిన ఓపెన్-వెయిట్ మోడల్స్. |
503 | api_error | Could not verify your quota right now. Please retry. | ఈ క్షణంలో మీ బ్యాలెన్స్ను చదవలేకపోయాము. |
503 | api_error | token counting is temporarily unavailable for this model | ఈ క్షణంలో ఈ మోడల్కు tokens లెక్కింపు అందుబాటులో లేదు. |
504 | api_error | upstream timed out | స్ట్రీమ్ కాని రిక్వెస్ట్ సమయ పరిమితి కంటే హోస్ట్ చేసిన ఓపెన్-వెయిట్ మోడల్ ఎక్కువ సమయం తీసుకుంది. |
తనిఖీలు ఈ క్రమంలో జరుగుతాయి: API కీ, రిక్వెస్ట్ బాడీ, మోడల్ id, flood protection, బ్యాలెన్స్. అందువల్ల తప్పు కీ మరియు తప్పు బాడీ ఉన్న రిక్వెస్ట్కు 401 వస్తుంది. 4xx స్టేటస్తో తిరస్కరించబడిన రిక్వెస్ట్కు ఛార్జ్ ఉండదు.
బ్యాలెన్స్ మరియు flood protection
ప్రతి రిక్వెస్ట్కు సమానంగా సేవ అందుతుంది: రేట్ టియర్లు లేవు మరియు ప్రత్యేక API కోటా లేదు. అయినా రెండు విషయాలు 429 తో సమాధానం ఇవ్వగలవు, రెండూ rate_limit_error type తో. మెసేజ్ వాటిని వేరు చేసి చెబుతుంది.
బ్యాలెన్స్
మీ బ్యాలెన్స్ అంటే 00:00 UTC కి రీసెట్ అయ్యే ఈరోజు ప్లాన్ అలౌన్స్, మరియు దాని తర్వాత మీరు కొనుగోలు చేసిన క్రెడిట్. చాట్ మరియు API ఒకే బ్యాలెన్స్ నుండి తీసుకుంటాయి.
ప్రతి రిక్వెస్ట్ ముందుగా తన అవుట్పుట్ పరిమితిని పక్కన పెడుతుంది: max_tokens, లేదా /v1/responses లో max_output_tokens, రెండూ పంపకపోతే 4,096. సమాధానం పూర్తయినప్పుడు, పక్కన పెట్టిన మొత్తం రిక్వెస్ట్ ఉపయోగించిన దానితో భర్తీ అవుతుంది. ఆ మొత్తం మిగిలిన బ్యాలెన్స్లో సరిపోకపోతే, మోడల్ ప్రారంభం కాకముందే రిక్వెస్ట్ Quota exceeded ను తిరిగి ఇస్తుంది.
ఒకే సమయంలో నడిచే రిక్వెస్ట్లు ప్రతి ఒక్కటి తన సొంత మొత్తాన్ని పక్కన పెడతాయి. అందువల్ల అధిక max_tokens ఉన్న చాలా సమాంతర రిక్వెస్ట్లు, ప్రతి సమాధానం చిన్నదైనా, కొద్దిసేపు బ్యాలెన్స్ను ఖర్చు చేసేయవచ్చు. తక్కువ max_tokens తక్కువ పక్కన పెడుతుంది.
Flood protection
Flood protection ఖాతాకు నిమిషానికి 120 రిక్వెస్ట్లను అనుమతిస్తుంది. ఇది కీని కాకుండా ఖాతాను లెక్కిస్తుంది, /v1/chat/completions, /v1/responses మరియు /v1/messages కలిపి. నిమిషం మీ మొదటి రిక్వెస్ట్తో మొదలవుతుంది.
ఆ నిమిషంలో 121వ రిక్వెస్ట్ Too many requests. Retry in <n>s. ను తిరిగి ఇస్తుంది మరియు ఏమీ ఖర్చు కాదు. తిరస్కరించిన రిక్వెస్ట్లు కూడా లెక్కలోకి వస్తాయి, కాబట్టి వేచి ఉండకుండా మళ్ళీ పంపే క్లయింట్ నిమిషం ముగిసే వరకు తిరస్కరించబడుతూనే ఉంటుంది. మెసేజ్లోని <n> సెకన్లు వేచి ఉండండి.
సమాంతరంగా పంపిన రిక్వెస్ట్లు సమాంతరంగా ఉన్నందుకు తిరస్కరించబడవు. అవి వరుసలో వేచి ఉండి క్రమంగా సమాధానం పొందుతాయి.
GET /v1/models మరియు tokens లెక్కింపు ఎండ్పాయింట్లు లెక్కించబడవు.
పరిమితులు మరియు బ్యాలెన్స్ గురించి మరింత, మరియు మీ సొంత బ్యాలెన్స్ మరియు వినియోగాన్ని ఎక్కడ చూడాలి: పరిమితులు మరియు బ్యాలెన్స్ Keys & usage
దేన్ని మళ్ళీ ప్రయత్నించాలి
అదే రిక్వెస్ట్ విజయవంతం కాగలిగినప్పుడు మాత్రమే మళ్ళీ పంపండి. OpenAI మరియు Anthropic SDK లు 429 మరియు 5xx సమాధానాలను ఇప్పటికే తమంతట తాము రెండుసార్లు మళ్ళీ ప్రయత్నిస్తాయి; దాన్ని మార్చడానికి max_retries (JavaScript లో maxRetries) సెట్ చేయండి.
| ఎరర్ | మళ్ళీ పంపాలా? | ఎలా |
|---|---|---|
400, 404, 405, 413, 415, 422 | కాదు. ముందు రిక్వెస్ట్ను సరిదిద్దండి. | ఏ ఫీల్డ్, మోడల్ లేదా ఇన్పుట్ తప్పో మెసేజ్ పేర్కొంటుంది. |
401 | కాదు. చెల్లుబాటు అయ్యే కీని ఉపయోగించండి. | Keys & usage పేజీలో కీని సృష్టించండి లేదా మార్చండి. |
429 Too many requests | అవును, వేచి ఉన్న తర్వాత. | మెసేజ్లోని సెకన్ల సంఖ్య వేచి ఉండండి, ఆపై అదే రిక్వెస్ట్ను పంపండి. |
429 Quota exceeded | ఉన్నట్లుగా కాదు. | max_tokens తగ్గించండి, 00:00 UTC కి రోజువారీ రీసెట్ కోసం వేచి ఉండండి, లేదా క్రెడిట్ జోడించండి. |
429 Shannon Coder call quota reached | అవును, తదుపరి విండోలో. | విండోలు 00:00 UTC నుండి ప్రతి 4 గంటలకు మొదలవుతాయి. మరో మోడల్ వెంటనే సమాధానం ఇస్తుంది. |
429 … temporarily busy | అవును. | కొన్ని సెకన్లు వేచి ఉండండి, ఆ తర్వాత ప్రతి తదుపరి ప్రయత్నానికి ఎక్కువసేపు. |
500, 502, 503 | అవును. | 1 సెకను వేచి ఉండండి, ఆపై 2, 4 మరియు 8. కొన్ని ప్రయత్నాల తర్వాత ఆపి రిక్వెస్ట్ id ని నివేదించండి. |
504 | అవును. | stream ను true కి సెట్ చేసి పంపండి: సమయ పరిమితి స్ట్రీమ్ కాని సమాధానాలకు వర్తిస్తుంది. |
ఈ పట్టికను అనుసరించే రీట్రై లూప్:
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); స్ట్రీమ్ లోపల ఎరర్లు
స్ట్రీమ్కు మొదటి బైట్ నుండే స్టేటస్ 200 ఉంటుంది. ఆ తర్వాత వచ్చే వైఫల్యం స్ట్రీమ్ లోపల ఈవెంట్గా వస్తుంది: /v1/chat/completions లో error సభ్యం ఉన్న చంక్, /v1/messages లో error ఈవెంట్, /v1/responses లో response.failed లేదా error ఈవెంట్. స్ట్రీమ్ ముగింపు ఈవెంట్లు ఇంకా తర్వాత వస్తాయి. అలాంటి సమాధానాన్ని విఫలమైనదిగా భావించి, 5xx స్టేటస్కు లాగే రిక్వెస్ట్ను మళ్ళీ పంపండి.
మోడల్ కాంటెక్స్ట్ విండో కంటే పొడవైన సంభాషణ ఈ విధంగా నివేదించబడుతుంది, type invalid_request_error మరియు code context_length_exceeded తో. మళ్ళీ పంపే ముందు సంభాషణను తగ్గించండి.
ఖచ్చితమైన ఫ్రేమ్లు స్ట్రీమింగ్తో పాటు వివరించబడ్డాయి. స్ట్రీమింగ్
రిక్వెస్ట్ ids
ఎరర్లతో సహా ప్రతి సమాధానానికి x-request-id హెడర్ ఉంటుంది. అది మీరు మీ సొంత x-request-id హెడర్లో పంపిన విలువ, లేదా మీరు ఏదీ పంపకపోతే 12 హెక్సాడెసిమల్ అక్షరాలు. దాన్ని లాగ్ చేయండి, మరియు రిక్వెస్ట్ గురించి సహాయం అడిగేటప్పుడు ఉటంకించండి.