Yiya kumxholo
Ukuphatha imposiso

Ukuphatha imposiso

Isicelo esiyaleza sibuyisa ikhowudi yesimo se-HTTP nomzimba we-JSON onohlobo lwempazamo nomyalezo. Eli phepha lidwelisa yonke imo, libonisa umzimba wempazamo wefomethi nganye ye-API kwaye lithi zeziphi iimpazamo ezifanele ukuthunyelwa kwakhona.

Ii-SDK zivelisa i-object yempazamo ethwala ikhowudi yesimo neentsimi zomzimba. Esi sicelo sibiza imodeli engekhoyo:

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

Sibuyisa isimo 400 nalo mzimba:

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

Umzimba wempazamo

Kukho imizimba emibini. I-/v1/messages iphendula ngefomethi ye-Anthropic; yonke enye i-endpoint iphendula ngefomethi ye-OpenAI. Kuzo zozibini, iinkcukacha zikwi-error.type nakwi-error.message, ngoko umfundi omnye usebenzela zonke ii-endpoint.

401 Ifomethi ye-OpenAI
{
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key",
    "code": "invalid_api_key",
    "param": null
  }
}
401 Ifomethi ye-Anthropic
{
  "type": "error",
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key"
  }
}
Intsimi Uhlobo Inkcazelo
error.type string Uhlobo lwempazamo. Jonga Iindidi zeempazamo ngezantsi.
error.message string Isivakalisi somntu. Imibhalo kwiitheyibhile ezingezantsi izinzile ngaphandle kweendawo ezitshintshayo, ezibonakaliswe njenge-<id>, <n> okanye ….
error.code string | null Ikhona kwezinye iimpazamo zefomethi ye-OpenAI: invalid_api_key nge-401, request_too_large nge-413, context_length_exceeded xa incoko ide kakhulu, ngaphandle koko null okanye ayikho. Nquma ngokwesimo ne-error.type kuqala kwaye uthathe i-code njengesongezo.
error.param null Ikhona kwiimpazamo ezifanayo ne-code. Ihlala i-null.
type string Kwifomethi ye-Anthropic kuphela. Ihlala i-error.

Iindidi zeempazamo

Uhlobo Izimo Inkcazelo
invalid_request_error 400, 413, 415, 422 Isicelo ngokwaso asilunganga: intsimi, umzimba, i-id yemodeli okanye i-input engayamkeliyo imodeli. Tshintsha isicelo phambi kokuba usithumele kwakhona.
authentication_error 401 I-API key ilahlekile, ayaziwa okanye irhoxisiwe.
not_found_error 404 Indlela ayikho.
rate_limit_error 429 Ibhalansi ayiluboni isicelo, i-flood protection yasimisa, okanye imodeli ixakekile. Umyalezo uthi nguwuphi.
api_error 500, 502, 503, 504 Isicelo besilungile kwaye ukusilela kwicala lethu. Sithumele kwakhona.
server_error 500 Isicelo besilungile kwaye ukusilela kwicala lethu. Sithumele kwakhona.

Iikhowudi zesimo

Isimo Uhlobo Umyalezo Xa
400 invalid_request_error Failed to parse the request body as JSON: … Umzimba awuyiyo i-JSON esebenzayo.
400 invalid_request_error unknown model: <id> I-model ayiyiyo i-id epapashiweyo. Kwi-/v1/responses nakuxa i-model ilahlekile.
400 invalid_request_error No user message provided Amanqanaba eShannon: isicelo asinambhalo womsebenzisi.
400 invalid_request_error <id> does not accept image input Umfanekiso uthunyelwe kwimodeli ye-open-weight esingathiweyo engenayo i-image input.
400 invalid_request_error audio and video input are not supported by any hosted model Inxalenye yeaudiyo okanye yevidiyo ithunyelwe kwimodeli ye-open-weight esingathiweyo.
400 invalid_request_error <id> does not accept response_format I-structured output iceliwe kwimodeli ye-open-weight esingathiweyo engenayo.
400 invalid_request_error <id> does not accept response_format json_schema; use json_object I-JSON schema ithunyelwe kwimodeli ye-open-weight esingathiweyo yamkela i-json_object kuphela.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high I-effort yokuqiqa ayikuwo amaxabiso adweliswe kuluhlu. Iimodeli ze-open-weight ezisingathiweyo.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <id> Ukubala ii-token kuceliwe kwimodeli engaphandle kweemodeli ze-open-weight ezisingathiweyo.
401 authentication_error Missing authentication Akukho API key ithunyelweyo.
401 authentication_error Invalid API key Isitshixo asaziwa, sathatyathelwa indawo esitsha, okanye sarhoxiswa.
404 not_found_error Not Found Indlela ayikho, umzekelo i-/v1/embeddings.
405 api_error Method Not Allowed Indlela ikhona kodwa hayi ngale ndlela ye-HTTP.
413 invalid_request_error Failed to buffer the request body: … Umzimba wesicelo mkhulu kuno-32 MiB.
415 invalid_request_error Expected request with `Content-Type: application/json` I-header ye-Content-Type ilahlekile okanye ayiyo i-application/json.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Intsimi efunekayo ilahlekile, njenge-messages, okanye intsimi inohlobo olungalunganga lwe-JSON.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan Umda we-output wesicelo mkhulu kunokushiyekileyo kwibhalansi yakho.
429 rate_limit_error Too many requests. Retry in <n>s. I-flood protection: izicelo ezingaphezu kwe-120 kumzuzu omnye kwiakhawunti yakho. I-<n> linani lemizuzwana ukuya ekupheleni komzuzu uphele.
429 rate_limit_error Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan shannon-coder-1 kwi-/v1/chat/completions nakwi-/v1/messages: ubizo lwakho lweShannon Coder lwefestile yeeyure ezi-4 yangoku lusetyenzisiwe.
429 rate_limit_error Shannon routes are temporarily busy. Please retry. Imodeli ixakekile ngeli xesha.
500 server_error The model backend failed to answer. Please retry. Imodeli ayivelisanga mpendulo.
500 server_error An internal error occurred. Please retry. Ukusilela kwangaphakathi ngoxa isicelo silungiswa.
502 api_error The model backend failed to answer. Please retry. Imodeli ayivelisanga mpendulo. Intsapho yeShannon 3 neemodeli ze-open-weight ezisingathiweyo.
503 api_error Could not verify your quota right now. Please retry. Ibhalansi yakho ayikwazanga ukufundwa ngeli xesha.
503 api_error token counting is temporarily unavailable for this model Ukubala ii-token akufumaneki kule modeli ngeli xesha.
504 api_error upstream timed out Imodeli ye-open-weight esingathiweyo ithathe ixesha elide kunomda wexesha wesicelo esingekho kwi-stream.

Ukuhlolwa kuqhutywa ngolu landelelwano: i-API key, umzimba wesicelo, i-id yemodeli, i-flood protection, ibhalansi. Isicelo esinesitshixo esingalunganga nomzimba ongalunganga ngoko sibuyisa i-401. Isicelo esenqatshwe ngesimo se-4xx asihlawulwa.

Ibhalansi ne-flood protection

Isicelo ngasinye sikhonzwa ngokulinganayo: akukho manqanaba ereyithi kwaye akukho quota ye-API eyahlukileyo. Izinto ezimbini zisenokuphendula nge-429, zombini ngohlobo rate_limit_error. Umyalezo ubonisa umahluko.

Ibhalansi

Ibhalansi yakho yisabelo seplani sanamhlanje, esiqala kwakhona ngentsimbi ye-00:00 UTC, kwaye emva kwaso yikhredithi othengiweyo. Incoko ne-API zitsala kwibhalansi enye.

Isicelo ngasinye siqala ngokubeka bucala umda waso we-output: i-max_tokens, okanye i-max_output_tokens kwi-/v1/responses, 4,096 xa ungathumeli nanye. Xa impendulo igqityiwe, inani elibekelwe bucala lithatyathelwa indawo koko isicelo esikusebenzisileyo. Ukuba inani alingeni kwibhalansi eshiyekileyo, isicelo sibuyisa i-Quota exceeded phambi kokuba imodeli iqale.

Izicelo eziqhubeka ngaxeshanye nganye ibeka bucala inani layo. Izicelo ezininzi ezihambelanayo ezine-max_tokens ephezulu zisenokuyisebenzisa ibhalansi okwexeshana, nokuba impendulo nganye imfutshane. I-max_tokens ephantsi ibeka bucala okuncinci.

I-flood protection

I-flood protection ivumela izicelo ezili-120 ngomzuzu ngeakhawunti. Ibala iakhawunti, hayi isitshixo, kuyo i-/v1/chat/completions, i-/v1/responses ne-/v1/messages zidibene. Umzuzu uqala ngesicelo sakho sokuqala.

Isicelo esinombolo 121 ngaphakathi kwaloo mzuzu sibuyisa Too many requests. Retry in <n>s. kwaye asixabisi nto. Izicelo ezenqatshiweyo nazo ziyabalwa, ngoko i-client ethumela kwakhona ngaphandle kokulinda ihlala yenqatshiwe de umzuzu uphele. Linda imizuzwana ye-<n> evela kumyalezo.

Izicelo ezithunyelwe ngokuhambelana azenqatshwa ngenxa yokuhambelana. Zilinda kumgca kwaye ziphendulwa ngokulandelelana.

I-GET /v1/models nee-endpoint zokubala ii-token azibalwa.

Okungakumbi malunga nemida nebhalansi, nokuba ubone phi ibhalansi nokusetyenziswa kwakho: Imida nebhalansi Izitshixo nokusetyenziswa

Oko kufuneka ukuzame kwakhona

Thumela isicelo kwakhona kuphela xa isicelo esifanayo sinokuphumelela. Ii-SDK ze-OpenAI ne-Anthropic sele ziphinda iimpendulo ze-429 ne-5xx kabini ngokwazo; seta i-max_retries (maxRetries kwi-JavaScript) ukuze utshintshe oko.

Impazamo Thumela kwakhona? Njani
400, 404, 405, 413, 415, 422 Hayi. Lungisa isicelo kuqala. Umyalezo ubiza intsimi, imodeli okanye i-input engalunganga.
401 Hayi. Sebenzisa isitshixo esisebenzayo. Yenza okanye utshintshe isitshixo kwiphepha leZitshixo nokusetyenziswa.
429 Too many requests Ewe, emva kokulinda. Linda inani lemizuzwana ekumyalezo, emva koko uthumele isicelo esifanayo.
429 Quota exceeded Hayi njengoko injalo. Yehlisa i-max_tokens, linda ukuseta kwakhona kosuku ngentsimbi ye-00:00 UTC, okanye yongeza ikhredithi.
429 Shannon Coder call quota reached Ewe, kwifestile elandelayo. Iifestile ziqala rhoqo emva kweeyure ezi-4 ukusuka ngentsimbi ye-00:00 UTC. Enye imodeli iphendula ngoko nangoko.
429 … temporarily busy Ewe. Linda imizuzwana embalwa, emva koko ixesha elide kuzama ngalinye olandelayo.
500, 502, 503 Ewe. Linda umzuzwana we-1, emva koko ii-2, ii-4 nee-8. Yeka emva kwemizamo embalwa kwaye uxele i-id yesicelo.
504 Ewe. Yithumele ne-stream isetwe ku-true: umda wexesha usebenza kwiimpendulo ezingekho kwi-stream.

Iluphu yokuphinda elandela le theyibhile:

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)

Iimpazamo ngaphakathi kwe-stream

I-stream inesimo 200 ukusuka kwibhayithi yayo yokuqala. Ukusilela emva koko kufika njengesiganeko ngaphakathi kwe-stream: i-chunk enelungu le-error kwi-/v1/chat/completions, isiganeko se-error kwi-/v1/messages, isiganeko se-response.failed okanye se-error kwi-/v1/responses. Iziganeko zokuvala ze-stream zisalandela. Thatha impendulo enjalo njengengaphumelelanga kwaye uthumele isicelo kwakhona, njengakwisimo se-5xx.

Incoko ende kunefestile yomxholo yemodeli ixelwa ngale ndlela, ngohlobo invalid_request_error nekhowudi context_length_exceeded. Finyeza incoko phambi kokuba uyithumele kwakhona.

Ii-frame ezichanekileyo zichazwe nge-streaming. Umsinga

Ii-id zezicelo

Impendulo nganye, kubandakanywa iimpazamo, inayo i-header ye-x-request-id. Lixabiso olithumele kwi-header yakho ye-x-request-id, okanye oonobumba abayi-12 ze-hexadecimal xa ungathumelanga nanye. Yigcine kwi-log, uyicaphule xa ucela uncedo ngesicelo.