Агуулга руу алгасах
Алдаа боловсруулах

Алдаа боловсруулах

Амжилтгүй хүсэлт HTTP статус код, мөн алдааны төрөл ба мессежтэй JSON body буцаана. Энэ хуудас бүх статусыг жагсааж, API формат бүрийн алдааны body-г үзүүлж, ямар алдааг дахин илгээх нь утгатайг хэлнэ.

SDK-ууд статус код ба body-ийн талбаруудыг агуулсан алдааны объект үүсгэнэ. Энэ хүсэлт байхгүй загварыг нэрлэсэн:

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 статус ба дараах body буцаана:

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

Алдааны body

Хоёр төрлийн body байна. /v1/messages Anthropic форматаар хариулна; бусад бүх endpoint OpenAI форматаар хариулна. Хоёуланд нь дэлгэрэнгүй нь error.type ба error.message дотор байдаг тул нэг уншигч бүх endpoint-д хүрнэ.

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 Хүсэлт өөрөө буруу: талбар, body, загварын id эсвэл загварын авдаггүй оролт. Дахин илгээхээсээ өмнө хүсэлтээ өөрчилнө үү.
authentication_error 401 API түлхүүр байхгүй, үл мэдэгдэх эсвэл хүчингүй болгосон.
not_found_error 404 Зам байхгүй.
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: … Body нь хүчинтэй 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 Зураг оролт авдаггүй hosted open-weight загварт зураг илгээсэн.
400 invalid_request_error audio and video input are not supported by any hosted model Hosted open-weight загварт аудио эсвэл видео хэсэг илгээсэн.
400 invalid_request_error <id> does not accept response_format Бүтэцтэй гаралтыг дэмждэггүй hosted open-weight загвараас хүссэн.
400 invalid_request_error <id> does not accept response_format json_schema; use json_object Зөвхөн json_object авдаг hosted open-weight загварт JSON schema илгээсэн.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high Reasoning effort нь жагсаасан утгуудын нэг биш. Hosted open-weight загварууд.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <id> Hosted open-weight загвараас бусад загварт токен тоолохыг хүссэн.
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 method-оор биш.
413 invalid_request_error Failed to buffer the request body: … Хүсэлтийн body 32 MiB-ээс том.
415 invalid_request_error Expected request with `Content-Type: application/json` Content-Type header байхгүй эсвэл 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 гэр бүл ба hosted open-weight загварууд.
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 Hosted open-weight загвар stream хийгээгүй хүсэлтийн хугацааны хязгаараас удсан.

Шалгалт дараах дарааллаар явна: API түлхүүр, хүсэлтийн body, загварын id, flood protection, үлдэгдэл. Иймд буруу түлхүүр ба буруу body-тэй хүсэлт 401 буцаана. 4xx статусаар татгалзсан хүсэлтэд үнэ гарахгүй.

Үлдэгдэл ба flood protection

Хүсэлт бүрт тэгш үйлчилнэ: түвшний хязгаар байхгүй, тусдаа API квот байхгүй. Гэхдээ хоёр зүйл 429 хариулж болно, хоёулаа rate_limit_error төрөлтэй. Мессеж нь аль нь болохыг ялгана.

Үлдэгдэл

Таны үлдэгдэл нь 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 болон токен тоолох endpoint-ууд тоологдохгүй.

Хязгаар ба үлдэгдлийн тухай нэмэлт, мөн өөрийн үлдэгдэл ба хэрэглээг хаанаас харах: Хязгаар ба үлдэгдэл Түлхүүр ба хэрэглээ

Юуг дахин оролдох

Ижил хүсэлт амжилттай болох боломжтой үед л дахин илгээнэ үү. 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 болгож илгээнэ үү: хугацааны хязгаар stream хийгээгүй хариунд үйлчилнэ.

Энэ хүснэгтийг дагасан дахин оролдох давталт:

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)

Stream доторх алдаа

Stream эхний байтаасаа 200 статустай. Үүний дараах алдаа stream доторх event хэлбэрээр ирнэ: /v1/chat/completions дээр error гишүүнтэй chunk, /v1/messages дээр error event, /v1/responses дээр response.failed эсвэл error event. Stream-ийн хаалтын event-үүд мөн л дагана. Ийм хариуг амжилтгүй гэж үзэж, 5xx статусын нэгэн адил хүсэлтийг дахин илгээнэ үү.

Загварын контекст цонхоос урт харилцан яриаг ийм байдлаар мэдээлдэг, invalid_request_error төрөл ба context_length_exceeded кодтой. Дахин илгээхээсээ өмнө харилцан яриаг богиносгоно уу.

Яг frame-үүдийг streaming хэсэгт тайлбарласан. Дамжуулалт

Хүсэлтийн id

Хариу бүр, алдаа ч гэсэн x-request-id header-тэй. Энэ нь таны өөрийн x-request-id header-ээр илгээсэн утга, эсвэл илгээгээгүй бол 12 арван зургаатын тэмдэгт. Үүнийг бүртгэж, хүсэлтийн талаар тусламж асуухдаа дурдаарай.