ຂ້າມໄປຫາເນື້ອຫາ
ການຈັດການຂໍ້ຜິດພາດ

ການຈັດການຂໍ້ຜິດພາດ

ຄຳຮ້ອງຂໍທີ່ລົ້ມເຫຼວຈະສົ່ງ HTTP status code ແລະ body JSON ທີ່ມີປະເພດຂໍ້ຜິດພາດ ແລະ ຂໍ້ຄວາມກັບຄືນ. ໜ້ານີ້ລາຍຊື່ທຸກ status, ສະແດງ body ຂໍ້ຜິດພາດຂອງແຕ່ລະຮູບແບບ API ແລະ ບອກວ່າຂໍ້ຜິດພາດໃດຄຸ້ມຄ່າທີ່ຈະສົ່ງອີກ.

SDK ຍົກ object ຂໍ້ຜິດພາດທີ່ມີ status code ແລະ ຟີລດ໌ຂອງ body. ຄຳຮ້ອງຂໍນີ້ລະບຸ model ທີ່ບໍ່ມີຢູ່:

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

ມັນສົ່ງ status 400 ແລະ body ນີ້ກັບຄືນ:

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

Error 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: invalid_api_key ກັບ 401, request_too_large ກັບ 413, context_length_exceeded ເມື່ອການສົນທະນາຍາວເກີນໄປ, ນອກນັ້ນເປັນ null ຫຼື ບໍ່ມີ. ໃຫ້ຕັດສິນຈາກ status ແລະ error.type ກ່ອນ ແລ້ວຖື code ເປັນຂໍ້ມູນເພີ່ມເຕີມ.
error.param null ມີໃນຂໍ້ຜິດພາດດຽວກັນກັບ code. ເປັນ null ສະເໝີ.
type string ສະເພາະຮູບແບບ Anthropic. ເປັນ error ສະເໝີ.

ປະເພດຂໍ້ຜິດພາດ

ປະເພດ Status ຄຳອະທິບາຍ
invalid_request_error 400, 413, 415, 422 ຄຳຮ້ອງຂໍເອງຜິດ: ຟີລດ໌, body, id ຂອງ model ຫຼື input ທີ່ model ບໍ່ຮັບ. ແກ້ໄຂຄຳຮ້ອງຂໍກ່ອນສົ່ງອີກ.
authentication_error 401 API key ຂາດ, ບໍ່ຮູ້ຈັກ ຫຼື ຖືກຖອນແລ້ວ.
not_found_error 404 ບໍ່ມີ path ນີ້.
rate_limit_error 429 ຍອດເງິນ ບໍ່ພໍສຳລັບຄຳຮ້ອງຂໍ, flood protection ຢຸດມັນ, ຫຼື model ກຳລັງຍຸ່ງ. ຂໍ້ຄວາມບອກວ່າອັນໃດ.
api_error 500, 502, 503, 504 ຄຳຮ້ອງຂໍບໍ່ມີບັນຫາ ແລະ ຄວາມລົ້ມເຫຼວຢູ່ຝັ່ງຂອງພວກເຮົາ. ສົ່ງມັນອີກ.
server_error 500 ຄຳຮ້ອງຂໍບໍ່ມີບັນຫາ ແລະ ຄວາມລົ້ມເຫຼວຢູ່ຝັ່ງຂອງພວກເຮົາ. ສົ່ງມັນອີກ.

Status code

ສະຖານະ ປະເພດ ຂໍ້ຄວາມ ເມື່ອໃດ
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: ຄຳຮ້ອງຂໍບໍ່ມີຂໍ້ຄວາມຂອງ user.
400 invalid_request_error <id> does not accept image input ສົ່ງຮູບພາບໄປຫາ hosted open-weight model ທີ່ບໍ່ຮັບ input ຮູບພາບ.
400 invalid_request_error audio and video input are not supported by any hosted model ສົ່ງສ່ວນສຽງ ຫຼື ວິດີໂອໄປຫາ hosted open-weight model.
400 invalid_request_error <id> does not accept response_format ຂໍ structured output ຈາກ hosted open-weight model ທີ່ບໍ່ຮອງຮັບຄຸນສົມບັດນີ້.
400 invalid_request_error <id> does not accept response_format json_schema; use json_object ສົ່ງ JSON schema ໄປຫາ hosted open-weight model ທີ່ຮັບສະເພາະ json_object.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high ລະດັບການຄິດຫາເຫດຜົນ (reasoning effort) ບໍ່ແມ່ນໜຶ່ງໃນຄ່າທີ່ລະບຸໄວ້. ໃຊ້ກັບ hosted open-weight models.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <id> ຂໍການນັບ tokens ສຳລັບ model ທີ່ຢູ່ນອກ hosted open-weight models.
401 authentication_error Missing authentication ບໍ່ໄດ້ສົ່ງ API key.
401 authentication_error Invalid API key key ບໍ່ຮູ້ຈັກ, ຖືກແທນທີ່ດ້ວຍອັນໃໝ່ກວ່າ, ຫຼື ຖືກຖອນແລ້ວ.
404 not_found_error Not Found ບໍ່ມີ path ນີ້, ຕົວຢ່າງ /v1/embeddings.
405 api_error Method Not Allowed path ມີຢູ່ ແຕ່ບໍ່ໃຊ້ກັບ 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` header 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 ຂີດຈຳກັດ output ຂອງຄຳຮ້ອງຂໍໃຫຍ່ກວ່າສິ່ງທີ່ເຫຼືອຢູ່ໃນ ຍອດເງິນ ຂອງທ່ານ.
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 shannon-coder-1 ໃນ /v1/chat/completions ແລະ /v1/messages: ການເອີ້ນ Shannon Coder ຂອງແຜນທ່ານສຳລັບ window 4 ຊົ່ວໂມງປັດຈຸບັນຖືກໃຊ້ໝົດ.
429 rate_limit_error Shannon routes are temporarily busy. Please retry. model ກຳລັງຍຸ່ງໃນເວລານີ້.
500 server_error The model backend failed to answer. Please retry. model ບໍ່ໄດ້ສ້າງຄຳຕອບ.
500 server_error An internal error occurred. Please retry. ຄວາມລົ້ມເຫຼວພາຍໃນຕອນກຽມຄຳຮ້ອງຂໍ.
502 api_error The model backend failed to answer. Please retry. model ບໍ່ໄດ້ສ້າງຄຳຕອບ. ຕະກູນ Shannon 3 ແລະ hosted open-weight models.
503 api_error Could not verify your quota right now. Please retry. ອ່ານ ຍອດເງິນ ຂອງທ່ານບໍ່ໄດ້ໃນເວລານີ້.
503 api_error token counting is temporarily unavailable for this model ການນັບ tokens ບໍ່ສາມາດໃຊ້ໄດ້ກັບ model ນີ້ໃນເວລານີ້.
504 api_error upstream timed out hosted open-weight model ໃຊ້ເວລາດົນກວ່າຂີດຈຳກັດເວລາຂອງຄຳຮ້ອງຂໍທີ່ບໍ່ແມ່ນ stream.

ການກວດສອບເຮັດຕາມລຳດັບນີ້: API key, body ຂອງຄຳຮ້ອງຂໍ, id ຂອງ model, flood protection, ຍອດເງິນ. ດັ່ງນັ້ນຄຳຮ້ອງຂໍທີ່ມີ key ຜິດ ແລະ body ຜິດຈະສົ່ງ 401. ຄຳຮ້ອງຂໍທີ່ຖືກປະຕິເສດດ້ວຍ status 4xx ບໍ່ຖືກຄິດເງິນ.

ຍອດເງິນ ແລະ ການປ້ອງກັນຄຳຮ້ອງຂໍຖ້ວມ (flood protection)

ທຸກຄຳຮ້ອງຂໍໄດ້ຮັບການບໍລິການເທົ່າທຽມກັນ: ບໍ່ມີລະດັບ rate ແລະ ບໍ່ມີໂຄວຕາ API ແຍກຕ່າງຫາກ. ແຕ່ມີສອງຢ່າງທີ່ຍັງຕອບ 429 ໄດ້, ທັງສອງມີປະເພດ rate_limit_error. ຂໍ້ຄວາມບອກໃຫ້ແຍກຄວາມແຕກຕ່າງ.

ຍອດເງິນ

ຍອດເງິນ ຂອງທ່ານແມ່ນໂຄວຕາປະຈຳວັນຂອງແຜນໃນມື້ນີ້ ເຊິ່ງຣີເຊັດເວລາ 00:00 UTC, ແລະ ຫຼັງຈາກນັ້ນແມ່ນ ເຄຣດິດ ທີ່ທ່ານຊື້. Chat ແລະ API ຫັກຈາກ ຍອດເງິນ ດຽວກັນ.

ແຕ່ລະຄຳຮ້ອງຂໍຈະກັນຂີດຈຳກັດ output ຂອງມັນກ່ອນ: max_tokens, ຫຼື max_output_tokens ໃນ /v1/responses, ແລະ 4,096 ເມື່ອທ່ານບໍ່ສົ່ງທັງສອງ. ເມື່ອຄຳຕອບສົມບູນ, ຈຳນວນທີ່ກັນໄວ້ຈະຖືກແທນທີ່ດ້ວຍຈຳນວນທີ່ຄຳຮ້ອງຂໍໃຊ້ຈິງ. ຖ້າຈຳນວນນັ້ນບໍ່ພໍດີກັບ ຍອດເງິນ ທີ່ເຫຼືອ, ຄຳຮ້ອງຂໍຈະສົ່ງ Quota exceeded ກັບຄືນກ່ອນທີ່ model ຈະເລີ່ມ.

ຄຳຮ້ອງຂໍທີ່ເຮັດວຽກພ້ອມກັນແຕ່ລະອັນກັນຈຳນວນຂອງຕົນເອງ. ດັ່ງນັ້ນຄຳຮ້ອງຂໍຂະໜານຫຼາຍອັນທີ່ມີ max_tokens ສູງອາດໃຊ້ ຍອດເງິນ ໝົດຊົ່ວຄາວ, ເຖິງແມ່ນຄຳຕອບແຕ່ລະອັນຈະສັ້ນ. max_tokens ທີ່ຕ່ຳກວ່າຈະກັນໄວ້ໜ້ອຍກວ່າ.

Flood protection

Flood protection ອະນຸຍາດ 120 ຄຳຮ້ອງຂໍຕໍ່ນາທີຕໍ່ບັນຊີ. ມັນນັບຕາມບັນຊີ, ບໍ່ແມ່ນຕາມ key, ລວມ /v1/chat/completions, /v1/responses ແລະ /v1/messages. ນາທີເລີ່ມຕັ້ງແຕ່ຄຳຮ້ອງຂໍທຳອິດຂອງທ່ານ.

ຄຳຮ້ອງຂໍທີ 121 ພາຍໃນນາທີນັ້ນຈະສົ່ງ Too many requests. Retry in <n>s. ກັບຄືນ ແລະ ບໍ່ເສຍຫຍັງ. ຄຳຮ້ອງຂໍທີ່ຖືກປະຕິເສດກໍຖືກນັບເຊັ່ນກັນ, ດັ່ງນັ້ນ client ທີ່ສົ່ງອີກໂດຍບໍ່ລໍຖ້າຈະຖືກປະຕິເສດຕໍ່ໄປຈົນກວ່ານາທີຈະຈົບ. ໃຫ້ລໍຖ້າ <n> ວິນາທີຕາມຂໍ້ຄວາມ.

ຄຳຮ້ອງຂໍທີ່ສົ່ງພ້ອມກັນບໍ່ຖືກປະຕິເສດຍ້ອນສົ່ງພ້ອມກັນ. ພວກມັນລໍຖ້າໃນຄິວ ແລະ ຖືກຕອບຕາມລຳດັບ.

GET /v1/models ແລະ endpoint ນັບ tokens ບໍ່ຖືກນັບ.

ຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບຂີດຈຳກັດ ແລະ ຍອດເງິນ, ແລະ ບ່ອນເບິ່ງ ຍອດເງິນ ແລະ ການນຳໃຊ້ຂອງທ່ານເອງ: ຂີດຈຳກັດ ແລະ ຍອດເງິນ Keys & usage

ສິ່ງທີ່ຄວນລອງໃໝ່

ສົ່ງຄຳຮ້ອງຂໍອີກສະເພາະເມື່ອຄຳຮ້ອງຂໍດຽວກັນສາມາດສຳເລັດໄດ້. SDK ຂອງ OpenAI ແລະ Anthropic ລອງໃໝ່ຄຳຕອບ 429 ແລະ 5xx ສອງເທື່ອດ້ວຍຕົວເອງຢູ່ແລ້ວ; ຕັ້ງ max_retries (maxRetries ໃນ JavaScript) ເພື່ອປ່ຽນ.

ຂໍ້ຜິດພາດ ສົ່ງອີກບໍ? ວິທີ
400, 404, 405, 413, 415, 422 ບໍ່. ແກ້ໄຂຄຳຮ້ອງຂໍກ່ອນ. ຂໍ້ຄວາມບອກຊື່ຟີລດ໌, model ຫຼື input ທີ່ຜິດ.
401 ບໍ່. ໃຊ້ key ທີ່ຖືກຕ້ອງ. ສ້າງ ຫຼື ປ່ຽນ key ໃນໜ້າ Keys & usage.
429 Too many requests ໄດ້, ຫຼັງຈາກລໍຖ້າ. ລໍຖ້າຕາມຈຳນວນວິນາທີໃນຂໍ້ຄວາມ, ແລ້ວສົ່ງຄຳຮ້ອງຂໍດຽວກັນ.
429 Quota exceeded ບໍ່ແມ່ນຕາມທີ່ເປັນຢູ່. ຫຼຸດ max_tokens, ລໍຖ້າການຣີເຊັດປະຈຳວັນເວລາ 00:00 UTC, ຫຼື ເຕີມ ເຄຣດິດ.
429 Shannon Coder call quota reached ໄດ້, ໃນ window ຖັດໄປ. window ເລີ່ມທຸກ 4 ຊົ່ວໂມງຈາກ 00:00 UTC. model ອື່ນຕອບໄດ້ທັນທີ.
429 … temporarily busy ໄດ້. ລໍຖ້າສອງສາມວິນາທີ, ແລ້ວດົນຂຶ້ນໃນແຕ່ລະຄັ້ງຖັດໄປ.
500, 502, 503 ໄດ້. ລໍຖ້າ 1 ວິນາທີ, ແລ້ວ 2, 4 ແລະ 8. ຢຸດຫຼັງສອງສາມຄັ້ງ ແລະ ລາຍງານ request id.
504 ໄດ້. ສົ່ງມັນດ້ວຍ stream ທີ່ຕັ້ງເປັນ true: ຂີດຈຳກັດເວລາໃຊ້ກັບຄຳຕອບທີ່ບໍ່ແມ່ນ stream.

loop ລອງໃໝ່ທີ່ເຮັດຕາມຕາຕະລາງນີ້:

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 ມີ status 200 ຕັ້ງແຕ່ byte ທຳອິດ. ຄວາມລົ້ມເຫຼວຫຼັງຈາກນັ້ນຈະມາເປັນ event ພາຍໃນ stream: chunk ທີ່ມີສະມາຊິກ error ໃນ /v1/chat/completions, event error ໃນ /v1/messages, event response.failed ຫຼື error ໃນ /v1/responses. event ປິດຂອງ stream ຍັງຕາມມາ. ໃຫ້ຖືວ່າຄຳຕອບແບບນັ້ນລົ້ມເຫຼວ ແລະ ສົ່ງຄຳຮ້ອງຂໍອີກ, ຄືກັບ status 5xx.

ການສົນທະນາທີ່ຍາວກວ່າ context window ຂອງ model ຖືກລາຍງານແບບນີ້, ດ້ວຍປະເພດ invalid_request_error ແລະ code context_length_exceeded. ເຮັດໃຫ້ການສົນທະນາສັ້ນລົງກ່ອນສົ່ງອີກ.

frame ທີ່ແນ່ນອນຖືກອະທິບາຍໄວ້ກັບ streaming. ສະຕຣີມມິ້ງ

Request id

ທຸກຄຳຕອບ, ລວມທັງຂໍ້ຜິດພາດ, ມີ header x-request-id. ມັນແມ່ນຄ່າທີ່ທ່ານສົ່ງໃນ header x-request-id ຂອງທ່ານເອງ, ຫຼື ຕົວອັກສອນເລກຖານສິບຫົກ 12 ຕົວເມື່ອທ່ານບໍ່ໄດ້ສົ່ງ. ບັນທຶກມັນໄວ້ ແລະ ອ້າງອີງເມື່ອທ່ານຂໍຄວາມຊ່ວຍເຫຼືອກ່ຽວກັບຄຳຮ້ອງຂໍ.