కంటెంట్‌కు వెళ్లండి
ఎరర్ హ్యాండ్లింగ్

ఎరర్ హ్యాండ్లింగ్

విఫలమైన రిక్వెస్ట్ 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

ఇది స్టేటస్ 400 మరియు ఈ బాడీని తిరిగి ఇస్తుంది:

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}

ఎరర్ బాడీ

రెండు బాడీలు ఉన్నాయి. /v1/messages Anthropic ఫార్మాట్‌లో సమాధానం ఇస్తుంది; మిగతా ప్రతి ఎండ్‌పాయింట్ OpenAI ఫార్మాట్‌లో సమాధానం ఇస్తుంది. రెండింటిలోనూ వివరాలు error.type మరియు error.message లో ఉంటాయి, కాబట్టి ఒకే రీడర్ అన్ని ఎండ్‌పాయింట్‌లకు సరిపోతుంది.

401 OpenAI ఫార్మాట్
{
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key",
    "code": "invalid_api_key",
    "param": null
  }
}
401 Anthropic ఫార్మాట్
{
  "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)

స్ట్రీమ్ లోపల ఎరర్‌లు

స్ట్రీమ్‌కు మొదటి బైట్ నుండే స్టేటస్ 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 హెక్సాడెసిమల్ అక్షరాలు. దాన్ని లాగ్ చేయండి, మరియు రిక్వెస్ట్ గురించి సహాయం అడిగేటప్పుడు ఉటంకించండి.