Tsallake zuwa abun ciki
Kuskuren Gudanarwa

Kuskuren Gudanarwa

Request da ya gaza yana mayar da lambar matsayi ta HTTP da jikin JSON mai nau'in kuskure da saƙo. Wannan shafin yana lissafa kowane matsayi, yana nuna jikin kuskure na kowane tsarin API kuma yana faɗin waɗanne kurakurai ya cancanci a sake aikawa.

SDKs suna ɗaga object na kuskure da ke ɗauke da lambar matsayi da fields na jiki. Wannan request yana ambaton model da babu shi:

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

Yana mayar da matsayi 400 da wannan jiki:

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

Jikin kuskure

Akwai jikuna biyu. /v1/messages yana amsawa a tsarin Anthropic; kowane sauran endpoint yana amsawa a tsarin OpenAI. A duka biyun, cikakkun bayanai suna a error.type da error.message, don haka mai karatu ɗaya yana yi wa endpoints duka hidima.

401 Tsarin OpenAI
{
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key",
    "code": "invalid_api_key",
    "param": null
  }
}
401 Tsarin Anthropic
{
  "type": "error",
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key"
  }
}
Field Nau'i Bayani
error.type string Nau'in kuskure. Duba Nau'ikan kurakurai a ƙasa.
error.message string Jumla ga mutum. Rubutun da ke cikin teburan da ke ƙasa suna tsayayye sai dai sassansu masu canzawa, da aka nuna a matsayin <id>, <n> ko ….
error.code string | null Yana nan a wasu kurakurai na tsarin OpenAI: invalid_api_key da 401, request_too_large da 413, context_length_exceeded idan tattaunawa ta yi tsawo da yawa, in ba haka ba null ko babu shi. Ku yanke shawara bisa matsayi da error.type da farko, kuma ku ɗauki code a matsayin ƙari.
error.param null Yana nan a kurakurai iri ɗaya da code. Koyaushe null.
type string Tsarin Anthropic kaɗai. Koyaushe error.

Nau'ikan kurakurai

Nau'i Matsayi Bayani
invalid_request_error 400, 413, 415, 422 Request da kansa ba daidai ba ne: field, jiki, model id ko input da model ba ya karɓa. Ku canza request kafin ku sake aikawa.
authentication_error 401 Maɓallin API ya ɓace, ba a san shi ba ko an soke shi.
not_found_error 404 Hanyar ba ta wanzu.
rate_limit_error 429 Balance bai isa request ba, flood protection ya dakatar da shi, ko model yana aiki da yawa. Saƙon yana faɗin wanne.
api_error 500, 502, 503, 504 Request ɗin yana da kyau kuma gazawar ta gefenmu ce. Ku sake aika shi.
server_error 500 Request ɗin yana da kyau kuma gazawar ta gefenmu ce. Ku sake aika shi.

Lambobin matsayi

Matsayi Nau'i Saƙo Lokaci
400 invalid_request_error Failed to parse the request body as JSON: … Jikin ba JSON mai inganci ba ne.
400 invalid_request_error unknown model: <id> model ba id da aka wallafa ba ne. A /v1/responses haka ma idan model ya ɓace.
400 invalid_request_error No user message provided Matakan Shannon: request ɗin ba shi da rubutun mai amfani.
400 invalid_request_error <id> does not accept image input An aika hoto zuwa hosted open-weight model wanda ba shi da image input.
400 invalid_request_error audio and video input are not supported by any hosted model An aika sashen audio ko bidiyo zuwa hosted open-weight model.
400 invalid_request_error <id> does not accept response_format An nemi structured output daga hosted open-weight model wanda ba shi da shi.
400 invalid_request_error <id> does not accept response_format json_schema; use json_object An aika JSON schema zuwa hosted open-weight model wanda ke karɓar json_object kaɗai.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high Reasoning effort ba ɗaya daga cikin ƙimomin da aka lissafa ba. Hosted open-weight models.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <id> An nemi ƙirgan tokens ga model a wajen hosted open-weight models.
401 authentication_error Missing authentication Ba a aika maɓallin API ba.
401 authentication_error Invalid API key Ba a san maɓallin ba, sabo ya maye gurbinsa, ko an soke shi.
404 not_found_error Not Found Hanyar ba ta wanzu, misali /v1/embeddings.
405 api_error Method Not Allowed Hanyar tana nan amma ba da wannan HTTP method ba.
413 invalid_request_error Failed to buffer the request body: … Jikin request ya fi 32 MiB girma.
415 invalid_request_error Expected request with `Content-Type: application/json` Header na Content-Type ya ɓace ko ba application/json ba ne.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Field da ake buƙata ya ɓace, kamar messages, ko field yana da nau'in JSON mara kyau.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan Iyakar output ta request ta fi abin da ya rage a balance ɗinku girma.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: fiye da requests 120 a cikin minti ɗaya a asusunku. <n> shi ne adadin daƙiƙu har minti ya ƙare.
429 rate_limit_error Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan shannon-coder-1 a /v1/chat/completions da /v1/messages: an yi amfani da kiran Shannon Coder na plan ɗinku na taga ta awa 4 ta yanzu.
429 rate_limit_error Shannon routes are temporarily busy. Please retry. Model yana aiki da yawa a wannan lokacin.
500 server_error The model backend failed to answer. Please retry. Model bai samar da amsa ba.
500 server_error An internal error occurred. Please retry. Gazawar ciki yayin da ake shirya request.
502 api_error The model backend failed to answer. Please retry. Model bai samar da amsa ba. Iyalin Shannon 3 da hosted open-weight models.
503 api_error Could not verify your quota right now. Please retry. Ba a iya karanta balance ɗinku a wannan lokacin ba.
503 api_error token counting is temporarily unavailable for this model Ƙirgan tokens ba ya samuwa ga wannan model a wannan lokacin.
504 api_error upstream timed out Hosted open-weight model ya ɗauki fiye da iyakar lokacin request da ba a yi streaming ba.

Ana yin dubawa bisa wannan tsari: maɓallin API, jikin request, model id, flood protection, balance. Don haka request mai maɓalli mara kyau da jiki mara kyau yana mayar da 401. Request da aka ƙi da matsayin 4xx ba a caje shi.

Balance da flood protection

Ana yi wa kowace request hidima daidai: babu matakan rate kuma babu quota na API daban. Abubuwa biyu har yanzu suna iya amsawa da 429, duka biyu da nau'in rate_limit_error. Saƙon yana bambanta su.

Balance

Balance ɗinku shi ne plan allowance na yau, wanda ke sake saitawa da ƙarfe 00:00 UTC, sannan bayansa credit ɗinku da aka saya. Taɗi da API suna ɗaukar daga balance ɗaya.

Kowace request tana ware iyakar output ɗinta da farko: max_tokens, ko max_output_tokens a /v1/responses, 4,096 idan ba ku aika kowanne ba. Idan amsar ta cika, ana maye gurbin adadin da aka ware da abin da request ya yi amfani da shi. Idan adadin bai shiga cikin balance da ya rage ba, request yana mayar da Quota exceeded kafin model ya fara.

Requests da ke gudana a lokaci guda kowanne yana ware nasa adadin. Don haka requests da yawa a lokaci guda masu max_tokens mai yawa na iya gama balance na ɗan lokaci, ko da kowace amsa gajeriya ce. max_tokens mafi ƙanƙanta yana ware ƙasa.

Flood protection

Flood protection yana ba da damar requests 120 a minti ɗaya ga kowane asusu. Yana ƙirga asusu, ba maɓalli ba, a /v1/chat/completions, /v1/responses da /v1/messages a haɗe. Minti yana farawa da request ɗinku na farko.

Request mai lamba 121 a cikin wannan minti yana mayar da Too many requests. Retry in <n>s. kuma ba ya kashe komai. Ana ƙirga requests da aka ƙi ma, don haka client da ke sake aikawa ba tare da jira ba yana ci gaba da zama a ƙi har minti ya ƙare. Ku jira daƙiƙun <n> daga saƙon.

Ba a ƙin requests da aka aika a lokaci guda saboda suna lokaci guda. Suna jira a layi kuma ana amsa su bi da bi.

Ba a ƙirga GET /v1/models da endpoints na ƙirgan tokens.

Ƙari kan iyakoki da balance, da inda za ku ga balance da amfanin ku: Iyakoki da balance Maɓallai & amfani

Abin da za a sake gwadawa

Ku sake aika request ne kawai idan request iri ɗaya zai iya yin nasara. OpenAI da Anthropic SDKs suna sake gwada amsoshin 429 da 5xx sau biyu da kansu; ku saita max_retries (maxRetries a JavaScript) don canza hakan.

Kuskure A sake aikawa? Yaya
400, 404, 405, 413, 415, 422 A'a. Ku gyara request da farko. Saƙon yana ambaton field, model ko input da ba daidai ba.
401 A'a. Ku yi amfani da maɓalli mai inganci. Ku ƙirƙira ko ku maye gurbin maɓalli a shafin Maɓallai & amfani.
429 Too many requests Eh, bayan jira. Ku jira adadin daƙiƙu da ke cikin saƙon, sannan ku aika request iri ɗaya.
429 Quota exceeded Ba yadda yake ba. Ku rage max_tokens, ku jira sake saitawa na yau da kullun da ƙarfe 00:00 UTC, ko ku ƙara credit.
429 Shannon Coder call quota reached Eh, a taga ta gaba. Tagogi suna farawa kowane awa 4 daga 00:00 UTC. Wani model yana amsawa nan take.
429 … temporarily busy Eh. Ku jira ƴan daƙiƙu, sannan ku ƙara tsawon jira a kowane ƙoƙari na gaba.
500, 502, 503 Eh. Ku jira daƙiƙa 1, sannan 2, 4 da 8. Ku tsaya bayan ƴan ƙoƙari kuma ku bayar da rahoton request id.
504 Eh. Ku aika shi da stream an saita zuwa true: iyakar lokaci tana shafar amsoshin da ba a yi streaming ba.

Retry loop da ke bin wannan tebur:

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)

Kurakurai a cikin stream

Stream yana da matsayi 200 tun daga byte ɗinsa na farko. Gazawa bayan haka tana zuwa a matsayin event a cikin stream: chunk mai member na error a /v1/chat/completions, event na error a /v1/messages, event na response.failed ko error a /v1/responses. Events na rufe stream har yanzu suna biye. Ku ɗauki irin wannan amsa a matsayin wadda ta gaza kuma ku sake aika request, kamar yadda ake yi da matsayin 5xx.

Ana bayyana tattaunawar da ta fi context window na model tsawo ta wannan hanya, da nau'in invalid_request_error da code context_length_exceeded. Ku gajarta tattaunawar kafin ku sake aikawa.

An bayyana ainihin frames tare da streaming. Yawo

Request ids

Kowace amsa, har da kurakurai, tana da header na x-request-id. Shi ne ƙimar da kuka aika a header ɗinku na x-request-id, ko haruffan hexadecimal 12 idan ba ku aika ba. Ku rubuta shi a log, kuma ku ambace shi lokacin da kuke neman taimako game da request.