Fara í efni
Villumeðhöndlun

Villumeðhöndlun

Beiðni sem mistekst skilar HTTP-stöðukóða og JSON-meginmáli með villugerð og skilaboðum. Þessi síða telur upp hverja stöðu, sýnir villumeginmál hvers API-sniðs og segir hvaða villur er þess virði að senda aftur.

SDK kasta villuhlut sem ber stöðukóðann og reiti meginmálsins. Þessi beiðni nefnir líkan sem er ekki til:

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

Hún skilar stöðunni 400 og þessu meginmáli:

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

Meginmál villu

Meginmálin eru tvö. /v1/messages svarar á Anthropic-sniði; allir aðrir endapunktar svara á OpenAI-sniði. Í báðum eru upplýsingarnar í error.type og error.message, svo einn lesari dugir fyrir alla endapunkta.

401 OpenAI-snið
{
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key",
    "code": "invalid_api_key",
    "param": null
  }
}
401 Anthropic-snið
{
  "type": "error",
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key"
  }
}
Reitur Gerð Lýsing
error.type string Gerð villunnar. Sjá Villugerðir hér á eftir.
error.message string Setning fyrir manneskju. Textarnir í töflunum hér á eftir eru stöðugir að breytilegum hlutum undanskildum, sem sýndir eru sem <id>, <n> eða ….
error.code string | null Til staðar á sumum villum OpenAI-sniðsins: invalid_api_key með 401, request_too_large með 413, context_length_exceeded þegar samtal er of langt, annars null eða fjarverandi. Ákveddu fyrst út frá stöðunni og error.type og líttu á code sem viðbót.
error.param null Til staðar á sömu villum og code. Alltaf null.
type string Aðeins Anthropic-snið. Alltaf error.

Villugerðir

Gerð Stöður Lýsing
invalid_request_error 400, 413, 415, 422 Beiðnin sjálf er röng: reitur, meginmál, líkanauðkenni eða inntak sem líkanið tekur ekki við. Breyttu beiðninni áður en þú sendir aftur.
authentication_error 401 API-lykil vantar, hann er óþekktur eða afturkallaður.
not_found_error 404 Slóðin er ekki til.
rate_limit_error 429 Staðan dugir ekki fyrir beiðninni, flóðvörn stöðvaði hana, eða líkanið er upptekið. Skilaboðin segja hvað.
api_error 500, 502, 503, 504 Beiðnin var í lagi og bilunin er okkar megin. Sendu hana aftur.
server_error 500 Beiðnin var í lagi og bilunin er okkar megin. Sendu hana aftur.

Stöðukóðar

Staða Gerð Skilaboð Hvenær
400 invalid_request_error Failed to parse the request body as JSON: … Meginmálið er ekki gilt JSON.
400 invalid_request_error unknown model: <id> model er ekki útgefið auðkenni. Á /v1/responses einnig þegar model vantar.
400 invalid_request_error No user message provided Shannon-þrep: beiðnin geymir engan notandatexta.
400 invalid_request_error <id> does not accept image input Mynd var send til hýsts líkans með opnum þyngdum án myndainntaks.
400 invalid_request_error audio and video input are not supported by any hosted model Hljóð- eða myndskeiðshluti var sendur til hýsts líkans með opnum þyngdum.
400 invalid_request_error <id> does not accept response_format Skipulagt úttak var beðið um af hýstu líkani með opnum þyngdum sem hefur það ekki.
400 invalid_request_error <id> does not accept response_format json_schema; use json_object JSON-skema var sent til hýsts líkans með opnum þyngdum sem tekur aðeins við json_object.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high Rökhugsunarátakið er ekki eitt af gildunum á listanum. Hýst líkön með opnum þyngdum.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <id> Beðið var um táknatalningu fyrir líkan utan hýstra líkana með opnum þyngdum.
401 authentication_error Missing authentication Enginn API-lykill var sendur.
401 authentication_error Invalid API key Lykillinn er óþekktur, var skipt út fyrir nýrri lykil eða var afturkallaður.
404 not_found_error Not Found Slóðin er ekki til, til dæmis /v1/embeddings.
405 api_error Method Not Allowed Slóðin er til en ekki með þessari HTTP-aðferð.
413 invalid_request_error Failed to buffer the request body: … Beiðnameginmálið er stærra en 32 MiB.
415 invalid_request_error Expected request with `Content-Type: application/json` Content-Type haus vantar eða er ekki application/json.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Nauðsynlegan reit vantar, svo sem messages, eða reitur hefur rangt JSON-gagnatag.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan Úttaksmörk beiðninnar eru stærri en það sem eftir er af stöðunni þinni.
429 rate_limit_error Too many requests. Retry in <n>s. Flóðvörn: fleiri en 120 beiðnir á einni mínútu á reikningnum þínum. <n> er fjöldi sekúndna þar til mínútan endar.
429 rate_limit_error Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan shannon-coder-1 á /v1/chat/completions og /v1/messages: Shannon Coder köll áskriftarinnar þinnar fyrir núverandi 4 klukkustunda glugga eru uppurin.
429 rate_limit_error Shannon routes are temporarily busy. Please retry. Líkanið er upptekið á þessari stundu.
500 server_error The model backend failed to answer. Please retry. Líkanið skilaði ekki svari.
500 server_error An internal error occurred. Please retry. Innri bilun meðan beiðnin var undirbúin.
502 api_error The model backend failed to answer. Please retry. Líkanið skilaði ekki svari. Shannon 3 fjölskyldan og hýst líkön með opnum þyngdum.
503 api_error Could not verify your quota right now. Please retry. Ekki tókst að lesa stöðuna þína á þessari stundu.
503 api_error token counting is temporarily unavailable for this model Táknatalning er ekki í boði fyrir þetta líkan á þessari stundu.
504 api_error upstream timed out Hýst líkan með opnum þyngdum var lengur en tímamörk beiðni sem er ekki streymd.

Athuganir keyra í þessari röð: API-lykill, beiðnameginmál, líkanauðkenni, flóðvörn, staða. Beiðni með röngum lykli og röngu meginmáli skilar því 401. Beiðni sem er hafnað með 4xx stöðu er ekki gjaldfærð.

Staða og flóðvörn

Hver beiðni er afgreidd jafnt: það eru engin hraðaþrep og enginn sérstakur API-kvóti. Tvennt getur þó svarað 429, bæði með gerðinni rate_limit_error. Skilaboðin greina þau að.

Staða

Staðan þín er dagleg úthlutun áskriftarinnar, sem endurstillist kl. 00:00 UTC, og á eftir henni keypt inneign. Spjall og API draga af sömu stöðu.

Hver beiðni tekur fyrst frá úttaksmörk sín: max_tokens, eða max_output_tokens á /v1/responses, 4,096 þegar þú sendir hvorugt. Þegar svarið er fullbúið kemur það sem beiðnin notaði í stað frátekna magnsins. Ef magnið rúmast ekki innan stöðunnar sem eftir er skilar beiðnin Quota exceeded áður en líkanið byrjar.

Beiðnir sem keyra á sama tíma taka hver frá sitt magn. Margar samhliða beiðnir með hátt max_tokens geta því tæmt stöðuna um stund, jafnvel þótt hvert svar sé stutt. Lægra max_tokens tekur minna frá.

Flóðvörn

Flóðvörn leyfir 120 beiðnir á mínútu á reikning. Hún telur reikninginn, ekki lykilinn, yfir /v1/chat/completions, /v1/responses og /v1/messages saman. Mínútan hefst með fyrstu beiðninni þinni.

Beiðni númer 121 innan þeirrar mínútu skilar Too many requests. Retry in <n>s. og kostar ekkert. Beiðnir sem er hafnað teljast líka, svo biðlari sem sendir aftur án þess að bíða er áfram hafnað þar til mínútan er liðin. Bíddu þær <n> sekúndur sem koma fram í skilaboðunum.

Beiðnum sem eru sendar samhliða er ekki hafnað fyrir að vera samhliða. Þær bíða í röð og er svarað hverri á eftir annarri.

GET /v1/models og talningarendapunktar tákna eru ekki taldir.

Meira um mörk og stöðu, og hvar þú sérð þína eigin stöðu og notkun: Mörk og staða Lyklar og notkun

Hvað á að endurreyna

Sendu beiðni aftur aðeins þegar sama beiðni getur tekist. OpenAI og Anthropic SDK endurreyna nú þegar 429 og 5xx svör tvisvar af sjálfu sér; stilltu max_retries (maxRetries í JavaScript) til að breyta því.

Villa Senda aftur? Hvernig
400, 404, 405, 413, 415, 422 Nei. Leiðréttu beiðnina fyrst. Skilaboðin nefna reitinn, líkanið eða inntakið sem er rangt.
401 Nei. Notaðu gildan lykil. Búðu til eða skiptu um lykil á síðunni Lyklar og notkun.
429 Too many requests Já, eftir biðina. Bíddu þann sekúndufjölda sem er í skilaboðunum og sendu síðan sömu beiðni.
429 Quota exceeded Ekki eins og hún er. Lækkaðu max_tokens, bíddu eftir daglegri endurstillingu kl. 00:00 UTC, eða bættu við inneign.
429 Shannon Coder call quota reached Já, í næsta glugga. Gluggarnir hefjast á 4 klukkustunda fresti frá 00:00 UTC. Annað líkan svarar strax.
429 … temporarily busy Já. Bíddu í nokkrar sekúndur, síðan lengur við hverja frekari tilraun.
500, 502, 503 Já. Bíddu 1 sekúndu, síðan 2, 4 og 8. Hættu eftir nokkrar tilraunir og tilkynntu beiðnaauðkennið.
504 Já. Sendu hana með stream stillt á true: tímamörkin gilda um svör sem eru ekki streymd.

Endurtilraunalykkja sem fylgir þessari töflu:

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)

Villur inni í streymi

Straumur hefur stöðuna 200 frá fyrsta bæti. Bilun eftir það berst sem atburður inni í straumnum: bútur með error meðlim á /v1/chat/completions, error atburður á /v1/messages, response.failed eða error atburður á /v1/responses. Lokaatburðir straumsins fylgja samt. Líttu á slíkt svar sem misheppnað og sendu beiðnina aftur, eins og fyrir 5xx stöðu.

Samtal sem er lengra en samhengisgluggi líkansins er tilkynnt á þennan hátt, með gerðinni invalid_request_error og kóðanum context_length_exceeded. Styttu samtalið áður en þú sendir aftur.

Nákvæmu rammarnir eru lýstir með streymi. Streymi

Beiðnaauðkenni

Hvert svar, villur meðtaldar, hefur x-request-id haus. Hann er gildið sem þú sendir í þínum eigin x-request-id haus, eða 12 sextándakerfisstafir þegar þú sendir ekkert. Skráðu hann og nefndu hann þegar þú biður um hjálp með beiðni.