අන්තර්ගතයට යන්න
දෝෂ

දෝෂ

අසාර්ථක වන ඉල්ලීමක් HTTP status code එකක් සහ දෝෂ වර්ගයක් හා පණිවිඩයක් සහිත JSON body එකක් ආපසු දෙයි. මෙම පිටුවේ සෑම status එකක්ම ලැයිස්තුගත කර, සෑම API format එකකම දෝෂ body එක පෙන්වා, නැවත යැවීමට වටින දෝෂ මොනවාදැයි කියයි.

SDKs status code එක සහ body එකේ fields රැගෙන යන error object එකක් raise කරයි. මෙම ඉල්ලීම නොපවතින 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

එය 400 status එක සහ මෙම body එක ආපසු දෙයි:

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

දෝෂ body එක

Body දෙකක් ඇත. /v1/messages පිළිතුරු දෙන්නේ Anthropic format එකෙනි; අනෙක් සෑම endpoint එකක්ම පිළිතුරු දෙන්නේ OpenAI format එකෙනි. දෙකෙහිම විස්තර error.type සහ error.message හි ඇත, එබැවින් එක reader එකකින් සියලු endpoints සඳහා සේවය කළ හැක.

401 OpenAI format
{
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key",
    "code": "invalid_api_key",
    "param": null
  }
}
401 Anthropic format
{
  "type": "error",
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key"
  }
}
Field වර්ගය විස්තරය
error.type string දෝෂයේ වර්ගය. පහත Error types බලන්න.
error.message string පුද්ගලයෙකු සඳහා වාක්‍යයක්. පහත වගුවල ඇති පෙළ <id>, <n> හෝ … ලෙස පෙන්වන විචල්‍ය කොටස් හැර ස්ථාවරය.
error.code string | null OpenAI format එකේ සමහර දෝෂවල ඇත: 401 සමඟ invalid_api_key, 413 සමඟ request_too_large, සංවාදයක් ඉතා දිගු වූ විට context_length_exceeded, අන් අවස්ථාවල null හෝ නොමැත. පළමුව status එක සහ error.type අනුව තීරණය කර, code අමතර දෙයක් ලෙස සලකන්න.
error.param null code ඇති එම දෝෂවලම ඇත. සෑම විටම null.
type string Anthropic format එකේ පමණි. සෑම විටම error.

දෝෂ වර්ග

වර්ගය Statuses විස්තරය
invalid_request_error 400, 413, 415, 422 ඉල්ලීමම වැරදිය: field එකක්, body එක, model id එක හෝ model එක නොපිළිගන්නා input එකක්. නැවත යැවීමට පෙර ඉල්ලීම වෙනස් කරන්න.
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 codes

තත්ත්වය වර්ගය පණිවිඩය කවදාද
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 tiers: ඉල්ලීමේ user පෙළක් නැත.
400 invalid_request_error <id> does not accept image input රූප ආදානය නැති, අපගේ සේවාදායකවල ධාවනය වන open-weight model එකකට රූපයක් යවා ඇත.
400 invalid_request_error audio and video input are not supported by any hosted model අපගේ සේවාදායකවල ධාවනය වන open-weight model එකකට audio හෝ video කොටසක් යවා ඇත.
400 invalid_request_error <id> does not accept response_format ව්‍යුහගත output නැති, අපගේ සේවාදායකවල ධාවනය වන open-weight model එකකින් එය ඉල්ලා ඇත.
400 invalid_request_error <id> does not accept response_format json_schema; use json_object json_object පමණක් පිළිගන්නා, අපගේ සේවාදායකවල ධාවනය වන open-weight model එකකට JSON schema එකක් යවා ඇත.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high Reasoning effort එක ලැයිස්තුගත අගයන්ගෙන් එකක් නොවේ. අපගේ සේවාදායකවල ධාවනය වන open-weight models.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <id> අපගේ සේවාදායකවල ධාවනය වන open-weight models වලින් පිටත model එකක් සඳහා token ගණන් කිරීම ඉල්ලා ඇත.
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` Content-Type header එක නැත, නැතහොත් එය application/json නොවේ.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages වැනි අවශ්‍ය field එකක් නැත, නැතහොත් field එකක JSON type එක වැරදිය.
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 /v1/chat/completions සහ /v1/messages හි shannon-coder-1: වත්මන් පැය 4 කවුළුව සඳහා ඔබේ සැලසුමේ Shannon Coder calls භාවිතා කර අවසන්.
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 පවුල සහ අපගේ සේවාදායකවල ධාවනය වන 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 මෙම මොහොතේ මෙම model එක සඳහා token ගණන් කිරීම ලබා ගත නොහැක.
504 api_error upstream timed out අපගේ සේවාදායකවල ධාවනය වන open-weight model එකක් stream නොකළ ඉල්ලීමක කාල සීමාවට වඩා වැඩි කාලයක් ගත කළේය.

පරීක්ෂා ක්‍රියාත්මක වන්නේ මෙම පිළිවෙලටයි: API key, ඉල්ලීමේ body, model id, flood protection, ශේෂය. එබැවින් වැරදි key එකක් සහ වැරදි body එකක් ඇති ඉල්ලීමකට 401 ලැබේ. 4xx status එකකින් ප්‍රතික්ෂේප වන ඉල්ලීමකට අය නොකෙරේ.

ශේෂය සහ ඉල්ලීම් ගණන සීමා කිරීම (flood protection)

සෑම ඉල්ලීමකටම එක සමානව සේවය කෙරේ: rate tiers නැත සහ වෙනම API quota නැත. තවමත් 429 පිළිතුරු දිය හැකි දේ දෙකකි, දෙකම rate_limit_error type එක සමඟ. පණිවිඩය මගින් ඒවා වෙන්කර හඳුනාගත හැක.

ශේෂය

ඔබේ ශේෂය යනු 00:00 UTC ට යළි සකසන අද දිනයේ සැලසුම් ප්‍රමාණයත්, ඉන්පසු ඔබ මිලදී ගත් credit ත් ය. Chat සහ API එකම ශේෂයෙන් ගනී.

සෑම ඉල්ලීමක්ම මුලින්ම එහි output සීමාව වෙන් කර තබයි: max_tokens, නැතහොත් /v1/responses හි max_output_tokens, ඔබ කිසිවක් නොයවන විට 4,096. පිළිතුර සම්පූර්ණ වූ විට, වෙන් කළ ප්‍රමාණය ඉල්ලීම භාවිතා කළ ප්‍රමාණයෙන් ප්‍රතිස්ථාපනය වේ. එම ප්‍රමාණය ඉතිරි ශේෂයට නොගැළපේ නම්, model එක ආරම්භ වීමට පෙර ඉල්ලීමට Quota exceeded ලැබේ.

එකම වේලාවේ ධාවනය වන ඉල්ලීම් සෑම එකක්ම තමන්ගේම ප්‍රමාණය වෙන් කරයි. එබැවින් ඉහළ max_tokens සහිත සමාන්තර ඉල්ලීම් බොහොමයක්, සෑම පිළිතුරක්ම කෙටි වුවත්, ටික වේලාවකට ශේෂය සම්පූර්ණයෙන් භාවිතා කළ හැක. අඩු max_tokens අඩුවෙන් වෙන් කරයි.

Flood protection

Flood protection මගින් ගිණුමකට විනාඩියකට ඉල්ලීම් 120ක් ඉඩ දෙයි. එය /v1/chat/completions, /v1/responses සහ /v1/messages එකට ගෙන ගණන් කරන්නේ key එක නොව ගිණුමයි. විනාඩිය ආරම්භ වන්නේ ඔබේ පළමු ඉල්ලීමෙනි.

එම විනාඩිය තුළ ඉල්ලීම් අංක 121 Too many requests. Retry in <n>s. ආපසු දෙන අතර කිසිවක් අය නොකරයි. ප්‍රතික්ෂේප කළ ඉල්ලීම් ද ගණන් ගැනේ, එබැවින් රැඳී නොසිට නැවත යවන client එකක් විනාඩිය අවසන් වන තුරු ප්‍රතික්ෂේප වෙමින් පවතී. පණිවිඩයේ ඇති තත්පර <n> රැඳී සිටින්න.

සමාන්තරව යවන ඉල්ලීම් සමාන්තර වීම නිසා ප්‍රතික්ෂේප නොකෙරේ. ඒවා පෝලිමේ රැඳී සිට පිළිවෙලින් පිළිතුරු ලබයි.

GET /v1/models සහ token ගණන් කිරීමේ endpoints ගණන් නොගනී.

සීමා සහ ශේෂය ගැන තවත්, සහ ඔබේම ශේෂය හා භාවිතය බලන්නේ කොතැනද: සීමා සහ ශේෂය යතුරු සහ භාවිතය

නැවත උත්සාහ කළ යුතු දේ

එම ඉල්ලීමටම සාර්ථක විය හැකි විට පමණක් ඉල්ලීමක් නැවත යවන්න. OpenAI සහ Anthropic SDKs දැනටමත් 429 සහ 5xx පිළිතුරු තනිවම දෙවරක් නැවත උත්සාහ කරයි; එය වෙනස් කිරීමට max_retries (JavaScript හි maxRetries) සකසන්න.

දෝෂය නැවත යවන්නද? කෙසේද
400, 404, 405, 413, 415, 422 නැත. මුලින් ඉල්ලීම නිවැරදි කරන්න. පණිවිඩය වැරදි field එක, model එක හෝ input එක නම් කරයි.
401 නැත. වලංගු key එකක් භාවිතා කරන්න. Keys & usage පිටුවේ key එක සාදන්න හෝ ප්‍රතිස්ථාපනය කරන්න.
429 Too many requests ඔව්, රැඳී සිටි පසු. පණිවිඩයේ ඇති තත්පර ගණන රැඳී සිට, එම ඉල්ලීමම යවන්න.
429 Quota exceeded එලෙසම නොවේ. max_tokens අඩු කරන්න, 00:00 UTC ට දෛනික යළි සැකසීම තෙක් රැඳී සිටින්න, නැතහොත් credit එකතු කරන්න.
429 Shannon Coder call quota reached ඔව්, ඊළඟ කවුළුවේදී. කවුළු 00:00 UTC සිට පැය 4කට වරක් ආරම්භ වේ. වෙනත් model එකක් වහාම පිළිතුරු දෙයි.
429 … temporarily busy ඔව්. තත්පර කිහිපයක් රැඳී සිටින්න, ඉන්පසු සෑම නැවත උත්සාහයකටම වැඩි කාලයක්.
500, 502, 503 ඔව්. තත්පර 1ක් රැඳී සිටින්න, ඉන්පසු 2, 4 සහ 8. උත්සාහ කිහිපයකින් පසු නතර කර ඉල්ලීම් id එක වාර්තා කරන්න.
504 ඔව්. එය stream true ලෙස සකසා යවන්න: කාල සීමාව බලපාන්නේ stream නොකළ පිළිතුරුවලටය.

මෙම වගුව අනුගමනය කරන retry 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 එකකට එහි පළමු byte එකේ සිටම 200 status එක ඇත. ඉන්පසු සිදුවන අසාර්ථකත්වයක් stream එක තුළ event එකක් ලෙස පැමිණේ: /v1/chat/completions හි error member එකක් සහිත chunk එකක්, /v1/messages හි error event එකක්, /v1/responses හි response.failed හෝ error event එකක්. Stream එකේ අවසන් events තවමත් ඊට පසුව පැමිණේ. එවැනි පිළිතුරක් අසාර්ථක ලෙස සලකා, 5xx status එකක් මෙන් ඉල්ලීම නැවත යවන්න.

Model එකේ context window එකට වඩා දිගු සංවාදයක් මෙලෙස invalid_request_error type එක සහ context_length_exceeded code එක සමඟ වාර්තා කෙරේ. නැවත යැවීමට පෙර සංවාදය කෙටි කරන්න.

නිවැරදි frames streaming සමඟ විස්තර කර ඇත. ස්ට්‍රීමිං

ඉල්ලීම් ids

දෝෂ ඇතුළුව සෑම පිළිතුරකම x-request-id header එකක් ඇත. එය ඔබ ඔබේම x-request-id header එකේ යැවූ අගය, නැතහොත් ඔබ කිසිවක් නොයැවූ විට hexadecimal අක්ෂර 12ක් වේ. එය log කර, ඉල්ලීමක් සම්බන්ධයෙන් උදව් ඉල්ලන විට සඳහන් කරන්න.