ഉള്ളടക്കത്തിലേക്ക് പോകുക
എറർ ഹാൻഡ്ലിംഗ്

എറർ ഹാൻഡ്ലിംഗ്

പരാജയപ്പെടുന്ന റിക്വസ്റ്റ് ഒരു 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 റിക്വസ്റ്റ് തന്നെ തെറ്റാണ്: ഒരു ഫീൽഡ്, ബോഡി, മോഡൽ ഐഡി, അല്ലെങ്കിൽ മോഡൽ സ്വീകരിക്കാത്ത ഇൻപുട്ട്. വീണ്ടും അയയ്ക്കുന്നതിന് മുമ്പ് റിക്വസ്റ്റ് മാറ്റുക.
authentication_error 401 API കീ ഇല്ല, അജ്ഞാതമാണ്, അല്ലെങ്കിൽ റദ്ദാക്കിയതാണ്.
not_found_error 404 പാത്ത് നിലവിലില്ല.
rate_limit_error 429 ബാലൻസ് റിക്വസ്റ്റിന് തികയുന്നില്ല, ഫ്ലഡ് പ്രൊട്ടക്ഷൻ തടഞ്ഞു, അല്ലെങ്കിൽ മോഡൽ തിരക്കിലാണ്. ഏതെന്ന് സന്ദേശം പറയും.
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 പ്രസിദ്ധീകരിച്ച ഐഡി അല്ല. /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 സ്കീമ അയച്ചു.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high റീസണിംഗ് എഫർട്ട് പട്ടികപ്പെടുത്തിയ മൂല്യങ്ങളിൽ ഒന്നല്ല. ഹോസ്റ്റ് ചെയ്ത ഓപ്പൺ-വെയിറ്റ് മോഡലുകൾ.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <id> ഹോസ്റ്റ് ചെയ്ത ഓപ്പൺ-വെയിറ്റ് മോഡലുകൾക്ക് പുറത്തുള്ള ഒരു മോഡലിന് ടോക്കൺ എണ്ണൽ ആവശ്യപ്പെട്ടു.
401 authentication_error Missing authentication API കീ അയച്ചില്ല.
401 authentication_error Invalid API key കീ അജ്ഞാതമാണ്, പുതിയൊരു കീ കൊണ്ട് മാറ്റിയതാണ്, അല്ലെങ്കിൽ റദ്ദാക്കിയതാണ്.
404 not_found_error Not Found പാത്ത് നിലവിലില്ല, ഉദാഹരണത്തിന് /v1/embeddings.
405 api_error Method Not Allowed പാത്ത് നിലവിലുണ്ട്, പക്ഷേ ഈ 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. ഫ്ലഡ് പ്രൊട്ടക്ഷൻ: നിങ്ങളുടെ അക്കൗണ്ടിൽ ഒരു മിനിറ്റിൽ 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 ഈ നിമിഷം ഈ മോഡലിന് ടോക്കൺ എണ്ണൽ ലഭ്യമല്ല.
504 api_error upstream timed out സ്ട്രീം ചെയ്യാത്ത റിക്വസ്റ്റിന്റെ സമയപരിധിയേക്കാൾ കൂടുതൽ സമയം ഹോസ്റ്റ് ചെയ്ത ഓപ്പൺ-വെയിറ്റ് മോഡൽ എടുത്തു.

പരിശോധനകൾ ഈ ക്രമത്തിൽ നടക്കുന്നു: API കീ, റിക്വസ്റ്റ് ബോഡി, മോഡൽ ഐഡി, ഫ്ലഡ് പ്രൊട്ടക്ഷൻ, ബാലൻസ്. അതിനാൽ തെറ്റായ കീയും തെറ്റായ ബോഡിയും ഉള്ള റിക്വസ്റ്റ് 401 നൽകും. 4xx സ്റ്റാറ്റസോടെ നിരസിക്കപ്പെടുന്ന റിക്വസ്റ്റിന് ചാർജ് ഈടാക്കില്ല.

ബാലൻസും ഫ്ലഡ് പ്രൊട്ടക്ഷനും

ഓരോ റിക്വസ്റ്റും തുല്യമായി സേവിക്കുന്നു: റേറ്റ് ടിയറുകളില്ല, പ്രത്യേക API ക്വാട്ടയുമില്ല. എങ്കിലും രണ്ട് കാര്യങ്ങൾ 429 നൽകാം, രണ്ടും ടൈപ്പ് rate_limit_error ഓടെ. സന്ദേശം അവയെ വേർതിരിച്ചറിയാൻ സഹായിക്കും.

ബാലൻസ്

നിങ്ങളുടെ ബാലൻസ് 00:00 UTC-ക്ക് റീസെറ്റ് ആകുന്ന ഇന്നത്തെ പ്ലാൻ അലവൻസും, അതിന് ശേഷം നിങ്ങൾ വാങ്ങിയ ക്രെഡിറ്റുമാണ്. ചാറ്റും API-യും ഒരേ ബാലൻസിൽ നിന്നാണ് എടുക്കുന്നത്.

ഓരോ റിക്വസ്റ്റും ആദ്യം അതിന്റെ ഔട്ട്പുട്ട് പരിധി മാറ്റിവയ്ക്കുന്നു: max_tokens, അല്ലെങ്കിൽ /v1/responses-ൽ max_output_tokens, രണ്ടും അയച്ചില്ലെങ്കിൽ 4,096. മറുപടി പൂർത്തിയാകുമ്പോൾ, മാറ്റിവച്ച തുകയ്ക്ക് പകരം റിക്വസ്റ്റ് ഉപയോഗിച്ചത് കണക്കാക്കും. ആ തുക ബാക്കി ബാലൻസിൽ ഒതുങ്ങുന്നില്ലെങ്കിൽ, മോഡൽ തുടങ്ങുന്നതിന് മുമ്പ് റിക്വസ്റ്റ് Quota exceeded നൽകും.

ഒരേ സമയം പ്രവർത്തിക്കുന്ന റിക്വസ്റ്റുകൾ ഓരോന്നും സ്വന്തം തുക മാറ്റിവയ്ക്കുന്നു. അതിനാൽ ഉയർന്ന max_tokens ഉള്ള നിരവധി സമാന്തര റിക്വസ്റ്റുകൾ, ഓരോ മറുപടിയും ചെറുതാണെങ്കിലും, കുറച്ചുനേരത്തേക്ക് ബാലൻസ് തീർത്തേക്കാം. കുറഞ്ഞ max_tokens കുറച്ച് മാറ്റിവയ്ക്കുന്നു.

ഫ്ലഡ് പ്രൊട്ടക്ഷൻ

ഫ്ലഡ് പ്രൊട്ടക്ഷൻ ഓരോ അക്കൗണ്ടിനും മിനിറ്റിൽ 120 റിക്വസ്റ്റുകൾ അനുവദിക്കുന്നു. ഇത് കീ അല്ല, അക്കൗണ്ടിനെയാണ് എണ്ണുന്നത്, /v1/chat/completions, /v1/responses, /v1/messages എന്നിവ ചേർത്ത്. നിങ്ങളുടെ ആദ്യ റിക്വസ്റ്റോടെ മിനിറ്റ് തുടങ്ങുന്നു.

ആ മിനിറ്റിലെ 121-ാമത്തെ റിക്വസ്റ്റ് Too many requests. Retry in <n>s. നൽകുകയും ചെലവ് ഈടാക്കാതിരിക്കുകയും ചെയ്യും. നിരസിച്ച റിക്വസ്റ്റുകളും എണ്ണപ്പെടും, അതിനാൽ കാത്തിരിക്കാതെ വീണ്ടും അയയ്ക്കുന്ന ക്ലയന്റ് മിനിറ്റ് തീരുംവരെ നിരസിക്കപ്പെട്ടുകൊണ്ടിരിക്കും. സന്ദേശത്തിലെ <n> സെക്കൻഡ് കാത്തിരിക്കുക.

സമാന്തരമായി അയയ്ക്കുന്ന റിക്വസ്റ്റുകൾ സമാന്തരമായതിന്റെ പേരിൽ നിരസിക്കില്ല. അവ ക്യൂവിൽ കാത്തിരിക്കുകയും ക്രമത്തിൽ മറുപടി ലഭിക്കുകയും ചെയ്യും.

GET /v1/models-ഉം ടോക്കൺ എണ്ണൽ എൻഡ്‌പോയിന്റുകളും എണ്ണപ്പെടുന്നില്ല.

പരിധികളെയും ബാലൻസിനെയും കുറിച്ച് കൂടുതൽ, നിങ്ങളുടെ ബാലൻസും ഉപയോഗവും എവിടെ കാണാം എന്നതും: പരിധികളും ബാലൻസും കീകളും ഉപയോഗവും

എന്ത് വീണ്ടും ശ്രമിക്കണം

അതേ റിക്വസ്റ്റ് വിജയിക്കാൻ സാധ്യതയുള്ളപ്പോൾ മാത്രം വീണ്ടും അയയ്ക്കുക. 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. കുറച്ച് ശ്രമങ്ങൾക്ക് ശേഷം നിർത്തി റിക്വസ്റ്റ് ഐഡി റിപ്പോർട്ട് ചെയ്യുക.
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 സ്റ്റാറ്റസിലെന്നപോലെ റിക്വസ്റ്റ് വീണ്ടും അയയ്ക്കുക.

മോഡലിന്റെ കോൺടെക്സ്റ്റ് വിൻഡോയേക്കാൾ ദൈർഘ്യമേറിയ സംഭാഷണം ഈ രീതിയിൽ റിപ്പോർട്ട് ചെയ്യപ്പെടുന്നു, ടൈപ്പ് invalid_request_error, കോഡ് context_length_exceeded ഓടെ. വീണ്ടും അയയ്ക്കുന്നതിന് മുമ്പ് സംഭാഷണം ചുരുക്കുക.

കൃത്യമായ ഫ്രെയിമുകൾ സ്ട്രീമിംഗിനൊപ്പം വിവരിച്ചിട്ടുണ്ട്. സ്റ്റ്രീമിംഗ്

റിക്വസ്റ്റ് ഐഡികൾ

പിശകുകൾ ഉൾപ്പെടെ എല്ലാ മറുപടിയിലും x-request-id ഹെഡർ ഉണ്ട്. നിങ്ങളുടെ സ്വന്തം x-request-id ഹെഡറിൽ അയച്ച മൂല്യമാണിത്, ഒന്നും അയച്ചില്ലെങ്കിൽ 12 ഹെക്സാഡെസിമൽ അക്ഷരങ്ങൾ. ഇത് ലോഗ് ചെയ്യുക, ഒരു റിക്വസ്റ്റിനെക്കുറിച്ച് സഹായം ചോദിക്കുമ്പോൾ ഉദ്ധരിക്കുക.