ਗਲਤੀਆਂ
ਜੋ ਰਿਕੁਐਸਟ ਅਸਫਲ ਹੁੰਦੀ ਹੈ, ਉਹ ਇੱਕ HTTP ਸਟੇਟਸ ਕੋਡ ਅਤੇ ਗਲਤੀ ਦੀ ਕਿਸਮ ਤੇ ਸੁਨੇਹੇ ਵਾਲੀ JSON body ਵਾਪਸ ਕਰਦੀ ਹੈ। ਇਹ ਪੰਨਾ ਹਰ ਸਟੇਟਸ ਸੂਚੀਬੱਧ ਕਰਦਾ ਹੈ, ਹਰ API ਫਾਰਮੈਟ ਦੀ ਗਲਤੀ body ਦਿਖਾਉਂਦਾ ਹੈ ਅਤੇ ਦੱਸਦਾ ਹੈ ਕਿ ਕਿਹੜੀਆਂ ਗਲਤੀਆਂ ਵਿੱਚ ਦੁਬਾਰਾ ਭੇਜਣਾ ਠੀਕ ਹੈ।
SDK ਇੱਕ ਗਲਤੀ object ਉਠਾਉਂਦੇ ਹਨ ਜਿਸ ਵਿੱਚ ਸਟੇਟਸ ਕੋਡ ਅਤੇ 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 import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
try {
await client.chat.completions.create({
model: "no-such-model",
messages: [{ role: "user", content: "Hello" }],
});
} catch (error) {
if (!(error instanceof OpenAI.APIError)) throw error;
console.log(error.status); // 400
console.log(error.type); // invalid_request_error
console.log(error.error.message); // unknown model: no-such-model
} curl -i https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "no-such-model",
"messages": [{"role": "user", "content": "Hello"}]
}' ਇਹ ਸਟੇਟਸ 400 ਅਤੇ ਇਹ body ਵਾਪਸ ਕਰਦੀ ਹੈ:
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} ਗਲਤੀ ਦੀ body
ਦੋ bodies ਹਨ। /v1/messages Anthropic ਫਾਰਮੈਟ ਵਿੱਚ ਜਵਾਬ ਦਿੰਦਾ ਹੈ; ਹਰ ਹੋਰ endpoint OpenAI ਫਾਰਮੈਟ ਵਿੱਚ ਜਵਾਬ ਦਿੰਦਾ ਹੈ। ਦੋਵਾਂ ਵਿੱਚ ਵੇਰਵੇ error.type ਅਤੇ error.message ਵਿੱਚ ਹੁੰਦੇ ਹਨ, ਇਸ ਲਈ ਇੱਕ ਹੀ ਰੀਡਰ ਸਾਰੇ endpoints ਲਈ ਕੰਮ ਕਰਦਾ ਹੈ।
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"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 key ਗੈਰਹਾਜ਼ਰ, ਅਣਜਾਣ ਜਾਂ ਰੱਦ ਕੀਤੀ ਹੋਈ ਹੈ। |
not_found_error | 404 | path ਮੌਜੂਦ ਨਹੀਂ ਹੈ। |
rate_limit_error | 429 | ਬੈਲੇਂਸ ਰਿਕੁਐਸਟ ਨੂੰ ਪੂਰਾ ਨਹੀਂ ਕਰਦਾ, ਫਲੱਡ ਪ੍ਰੋਟੈਕਸ਼ਨ ਨੇ ਇਸ ਨੂੰ ਰੋਕਿਆ, ਜਾਂ ਮਾਡਲ ਰੁੱਝਿਆ ਹੋਇਆ ਹੈ। ਸੁਨੇਹਾ ਦੱਸਦਾ ਹੈ ਕਿ ਕਿਹੜਾ। |
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 ਟੀਅਰ: ਰਿਕੁਐਸਟ ਵਿੱਚ user ਟੈਕਸਟ ਨਹੀਂ ਹੈ। |
400 | invalid_request_error | <id> does not accept image input | ਇਮੇਜ ਇਨਪੁਟ ਤੋਂ ਬਿਨਾਂ ਹੋਸਟ ਕੀਤੇ open-weight ਮਾਡਲ ਨੂੰ ਇੱਕ ਇਮੇਜ ਭੇਜੀ ਗਈ। |
400 | invalid_request_error | audio and video input are not supported by any hosted model | ਹੋਸਟ ਕੀਤੇ open-weight ਮਾਡਲ ਨੂੰ ਇੱਕ ਆਡੀਓ ਜਾਂ ਵੀਡੀਓ part ਭੇਜਿਆ ਗਿਆ। |
400 | invalid_request_error | <id> does not accept response_format | ਹੋਸਟ ਕੀਤੇ open-weight ਮਾਡਲ ਤੋਂ ਸੰਗਠਿਤ ਆਉਟਪੁੱਟ ਮੰਗੀ ਗਈ ਜਿਸ ਕੋਲ ਇਹ ਨਹੀਂ ਹੈ। |
400 | invalid_request_error | <id> does not accept response_format json_schema; use json_object | ਸਿਰਫ਼ json_object ਲੈਣ ਵਾਲੇ ਹੋਸਟ ਕੀਤੇ open-weight ਮਾਡਲ ਨੂੰ ਇੱਕ JSON schema ਭੇਜੀ ਗਈ। |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | ਰੀਜ਼ਨਿੰਗ effort ਸੂਚੀਬੱਧ ਮੁੱਲਾਂ ਵਿੱਚੋਂ ਕੋਈ ਨਹੀਂ ਹੈ। ਹੋਸਟ ਕੀਤੇ open-weight ਮਾਡਲ। |
400 | invalid_request_error | count_tokens is available for the hosted open models; unknown model: <id> | ਹੋਸਟ ਕੀਤੇ open-weight ਮਾਡਲਾਂ ਤੋਂ ਬਾਹਰ ਦੇ ਮਾਡਲ ਲਈ 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 ਹੈਡਰ ਗੈਰਹਾਜ਼ਰ ਹੈ ਜਾਂ 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. | ਫਲੱਡ ਪ੍ਰੋਟੈਕਸ਼ਨ: ਤੁਹਾਡੇ ਖਾਤੇ ਉੱਤੇ ਇੱਕ ਮਿੰਟ ਵਿੱਚ 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 ਪਰਿਵਾਰ ਅਤੇ ਹੋਸਟ ਕੀਤੇ 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 | ਇਸ ਸਮੇਂ ਇਸ ਮਾਡਲ ਲਈ token ਗਿਣਤੀ ਉਪਲਬਧ ਨਹੀਂ ਹੈ। |
504 | api_error | upstream timed out | ਹੋਸਟ ਕੀਤੇ open-weight ਮਾਡਲ ਨੇ stream ਨਾ ਹੋਣ ਵਾਲੀ ਰਿਕੁਐਸਟ ਦੀ ਸਮਾਂ ਸੀਮਾ ਤੋਂ ਵੱਧ ਸਮਾਂ ਲਿਆ। |
ਜਾਂਚਾਂ ਇਸ ਕ੍ਰਮ ਵਿੱਚ ਚੱਲਦੀਆਂ ਹਨ: API key, ਰਿਕੁਐਸਟ body, ਮਾਡਲ id, ਫਲੱਡ ਪ੍ਰੋਟੈਕਸ਼ਨ, ਬੈਲੇਂਸ। ਇਸ ਲਈ ਗਲਤ key ਅਤੇ ਗਲਤ body ਵਾਲੀ ਰਿਕੁਐਸਟ 401 ਵਾਪਸ ਕਰਦੀ ਹੈ। ਜੋ ਰਿਕੁਐਸਟ 4xx ਸਟੇਟਸ ਨਾਲ ਰੱਦ ਹੁੰਦੀ ਹੈ, ਉਸ ਦਾ ਕੋਈ ਚਾਰਜ ਨਹੀਂ ਲੱਗਦਾ।
ਬੈਲੇਂਸ ਅਤੇ ਫਲੱਡ ਪ੍ਰੋਟੈਕਸ਼ਨ
ਹਰ ਰਿਕੁਐਸਟ ਨੂੰ ਬਰਾਬਰ ਸੇਵਾ ਮਿਲਦੀ ਹੈ: ਕੋਈ ਰੇਟ ਟੀਅਰ ਨਹੀਂ ਅਤੇ ਕੋਈ ਵੱਖਰਾ API ਕੋਟਾ ਨਹੀਂ। ਫਿਰ ਵੀ ਦੋ ਚੀਜ਼ਾਂ 429 ਨਾਲ ਜਵਾਬ ਦੇ ਸਕਦੀਆਂ ਹਨ, ਦੋਵੇਂ ਕਿਸਮ rate_limit_error ਨਾਲ। ਸੁਨੇਹਾ ਦੋਵਾਂ ਵਿੱਚ ਫ਼ਰਕ ਦੱਸਦਾ ਹੈ।
ਬੈਲੇਂਸ
ਤੁਹਾਡਾ ਬੈਲੇਂਸ ਅੱਜ ਦਾ ਪਲਾਨ ਦਾ ਰੋਜ਼ਾਨਾ ਹਿੱਸਾ ਹੈ, ਜੋ 00:00 UTC ਉੱਤੇ ਮੁੜ ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਉਸ ਤੋਂ ਬਾਅਦ ਤੁਹਾਡਾ ਖਰੀਦਿਆ ਕ੍ਰੈਡਿਟ। ਚੈਟ ਅਤੇ API ਇੱਕੋ ਬੈਲੇਂਸ ਵਿੱਚੋਂ ਖਰਚ ਕਰਦੇ ਹਨ।
ਹਰ ਰਿਕੁਐਸਟ ਪਹਿਲਾਂ ਆਪਣੀ ਆਉਟਪੁੱਟ ਸੀਮਾ ਵੱਖ ਰੱਖਦੀ ਹੈ: max_tokens, ਜਾਂ /v1/responses ਉੱਤੇ max_output_tokens, ਅਤੇ ਜੇ ਤੁਸੀਂ ਕੋਈ ਵੀ ਨਾ ਭੇਜੋ ਤਾਂ 4,096। ਜਵਾਬ ਪੂਰਾ ਹੋਣ ਉੱਤੇ, ਵੱਖ ਰੱਖੀ ਰਕਮ ਉਸ ਨਾਲ ਬਦਲ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ ਜੋ ਰਿਕੁਐਸਟ ਨੇ ਵਰਤਿਆ। ਜੇ ਰਕਮ ਬਾਕੀ ਬੈਲੇਂਸ ਵਿੱਚ ਨਾ ਸਮਾਏ, ਤਾਂ ਮਾਡਲ ਦੇ ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਰਿਕੁਐਸਟ Quota exceeded ਵਾਪਸ ਕਰਦੀ ਹੈ।
ਜੋ ਰਿਕੁਐਸਟਾਂ ਇੱਕੋ ਸਮੇਂ ਚੱਲਦੀਆਂ ਹਨ, ਉਹ ਹਰ ਇੱਕ ਆਪਣੀ ਰਕਮ ਵੱਖ ਰੱਖਦੀ ਹੈ। ਇਸ ਲਈ ਉੱਚੇ max_tokens ਵਾਲੀਆਂ ਕਈ ਸਮਾਂਤਰ ਰਿਕੁਐਸਟਾਂ ਕੁਝ ਪਲ ਲਈ ਬੈਲੇਂਸ ਨੂੰ ਪੂਰਾ ਵਰਤ ਸਕਦੀਆਂ ਹਨ, ਭਾਵੇਂ ਹਰ ਜਵਾਬ ਛੋਟਾ ਹੋਵੇ। ਛੋਟਾ max_tokens ਘੱਟ ਵੱਖ ਰੱਖਦਾ ਹੈ।
ਫਲੱਡ ਪ੍ਰੋਟੈਕਸ਼ਨ
ਫਲੱਡ ਪ੍ਰੋਟੈਕਸ਼ਨ ਪ੍ਰਤੀ ਖਾਤਾ ਪ੍ਰਤੀ ਮਿੰਟ 120 ਰਿਕੁਐਸਟਾਂ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦੀ ਹੈ। ਇਹ /v1/chat/completions, /v1/responses ਅਤੇ /v1/messages ਨੂੰ ਇਕੱਠੇ ਗਿਣ ਕੇ ਖਾਤੇ ਨੂੰ ਗਿਣਦੀ ਹੈ, key ਨੂੰ ਨਹੀਂ। ਮਿੰਟ ਤੁਹਾਡੀ ਪਹਿਲੀ ਰਿਕੁਐਸਟ ਨਾਲ ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ।
ਉਸ ਮਿੰਟ ਦੇ ਅੰਦਰ ਰਿਕੁਐਸਟ ਨੰਬਰ 121 Too many requests. Retry in <n>s. ਵਾਪਸ ਕਰਦੀ ਹੈ ਅਤੇ ਇਸ ਦੀ ਕੋਈ ਲਾਗਤ ਨਹੀਂ ਹੁੰਦੀ। ਰੱਦ ਕੀਤੀਆਂ ਰਿਕੁਐਸਟਾਂ ਵੀ ਗਿਣੀਆਂ ਜਾਂਦੀਆਂ ਹਨ, ਇਸ ਲਈ ਜੋ ਕਲਾਇੰਟ ਉਡੀਕ ਕੀਤੇ ਬਿਨਾਂ ਦੁਬਾਰਾ ਭੇਜਦਾ ਹੈ, ਉਹ ਮਿੰਟ ਖਤਮ ਹੋਣ ਤੱਕ ਰੱਦ ਹੁੰਦਾ ਰਹਿੰਦਾ ਹੈ। ਸੁਨੇਹੇ ਵਿੱਚ ਦਿੱਤੇ <n> ਸਕਿੰਟ ਉਡੀਕ ਕਰੋ।
ਸਮਾਂਤਰ ਭੇਜੀਆਂ ਰਿਕੁਐਸਟਾਂ ਨੂੰ ਸਮਾਂਤਰ ਹੋਣ ਕਰਕੇ ਰੱਦ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ। ਉਹ ਕਤਾਰ ਵਿੱਚ ਉਡੀਕ ਕਰਦੀਆਂ ਹਨ ਅਤੇ ਵਾਰੀ ਨਾਲ ਜਵਾਬ ਪਾਉਂਦੀਆਂ ਹਨ।
GET /v1/models ਅਤੇ token ਗਿਣਤੀ ਵਾਲੇ endpoints ਨਹੀਂ ਗਿਣੇ ਜਾਂਦੇ।
ਸੀਮਾਵਾਂ ਅਤੇ ਬੈਲੇਂਸ ਬਾਰੇ ਹੋਰ, ਅਤੇ ਆਪਣਾ ਬੈਲੇਂਸ ਅਤੇ ਵਰਤੋਂ ਕਿੱਥੇ ਵੇਖਣੇ ਹਨ: ਸੀਮਾਵਾਂ ਅਤੇ ਬੈਲੇਂਸ Keys ਅਤੇ ਵਰਤੋਂ
ਕੀ ਦੁਬਾਰਾ ਅਜ਼ਮਾਉਣਾ ਹੈ
ਰਿਕੁਐਸਟ ਸਿਰਫ਼ ਉਦੋਂ ਦੁਬਾਰਾ ਭੇਜੋ ਜਦੋਂ ਉਹੀ ਰਿਕੁਐਸਟ ਸਫਲ ਹੋ ਸਕਦੀ ਹੋਵੇ। OpenAI ਅਤੇ Anthropic SDK ਪਹਿਲਾਂ ਹੀ 429 ਅਤੇ 5xx ਜਵਾਬਾਂ ਨੂੰ ਆਪਣੇ-ਆਪ ਦੋ ਵਾਰ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਨ; ਇਸ ਨੂੰ ਬਦਲਣ ਲਈ max_retries (JavaScript ਵਿੱਚ maxRetries) ਸੈੱਟ ਕਰੋ।
| ਗਲਤੀ | ਦੁਬਾਰਾ ਭੇਜੀਏ? | ਕਿਵੇਂ |
|---|---|---|
400, 404, 405, 413, 415, 422 | ਨਹੀਂ। ਪਹਿਲਾਂ ਰਿਕੁਐਸਟ ਨੂੰ ਠੀਕ ਕਰੋ। | ਸੁਨੇਹਾ ਉਸ ਫੀਲਡ, ਮਾਡਲ ਜਾਂ ਇਨਪੁਟ ਦਾ ਨਾਂ ਦੱਸਦਾ ਹੈ ਜੋ ਗਲਤ ਹੈ। |
401 | ਨਹੀਂ। ਜਾਇਜ਼ key ਵਰਤੋ। | Keys & usage ਪੰਨੇ ਉੱਤੇ key ਬਣਾਓ ਜਾਂ ਬਦਲੋ। |
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) import OpenAI from "openai";
// maxRetries: 0 — this loop does the retrying, the SDK does not add its own.
const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://api.shannon-ai.com/v1", maxRetries: 0 });
const sleep = (seconds) => new Promise((resolve) => setTimeout(resolve, seconds * 1000));
async function createWithRetry(request, attempts = 5) {
for (let attempt = 0; attempt < attempts; attempt++) {
try {
return await client.chat.completions.create(request);
} catch (error) {
const text = String(error.message);
const flood = text.match(/Retry in (\d+)s/);
if (error.status === 429 && flood) {
await sleep(Number(flood[1])); // flood protection: wait out the minute
} else if (error.status === 429 && text.includes("temporarily busy")) {
await sleep(2 ** attempt);
} else if (error.status >= 500 || error instanceof OpenAI.APIConnectionError) {
await sleep(2 ** attempt); // 1, 2, 4, 8 seconds
} else {
throw error; // wrong request, wrong key or balance
}
}
}
throw new Error("the request failed after all attempts");
}
const response = await createWithRetry({
model: "shannon-3",
messages: [{ role: "user", content: "Hello" }],
});
console.log(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 ਦੇ ਬੰਦ ਕਰਨ ਵਾਲੇ events ਫਿਰ ਵੀ ਪਿੱਛੇ ਆਉਂਦੇ ਹਨ। ਅਜਿਹੇ ਜਵਾਬ ਨੂੰ ਅਸਫਲ ਮੰਨੋ ਅਤੇ ਰਿਕੁਐਸਟ ਦੁਬਾਰਾ ਭੇਜੋ, ਜਿਵੇਂ 5xx ਸਟੇਟਸ ਲਈ।
ਜੋ ਗੱਲਬਾਤ ਮਾਡਲ ਦੀ ਕਾਂਟੈਕਸਟ ਵਿੰਡੋ ਤੋਂ ਲੰਮੀ ਹੋਵੇ, ਉਹ ਇਸੇ ਤਰ੍ਹਾਂ ਦੱਸੀ ਜਾਂਦੀ ਹੈ, ਕਿਸਮ invalid_request_error ਅਤੇ ਕੋਡ context_length_exceeded ਨਾਲ। ਦੁਬਾਰਾ ਭੇਜਣ ਤੋਂ ਪਹਿਲਾਂ ਗੱਲਬਾਤ ਨੂੰ ਛੋਟਾ ਕਰੋ।
ਸਹੀ frames ਦਾ ਵੇਰਵਾ ਸਟ੍ਰੀਮਿੰਗ ਦੇ ਨਾਲ ਦਿੱਤਾ ਗਿਆ ਹੈ। ਸਟ੍ਰੀਮਿੰਗ
ਰਿਕੁਐਸਟ ids
ਹਰ ਜਵਾਬ, ਗਲਤੀਆਂ ਸਮੇਤ, ਵਿੱਚ ਇੱਕ x-request-id ਹੈਡਰ ਹੁੰਦਾ ਹੈ। ਇਹ ਉਹ ਮੁੱਲ ਹੈ ਜੋ ਤੁਸੀਂ ਆਪਣੇ x-request-id ਹੈਡਰ ਵਿੱਚ ਭੇਜਿਆ, ਜਾਂ ਕੁਝ ਨਾ ਭੇਜਣ ਉੱਤੇ 12 ਹੈਕਸਾਡੈਸੀਮਲ ਅੱਖਰ। ਇਸ ਨੂੰ ਲੌਗ ਕਰੋ, ਅਤੇ ਕਿਸੇ ਰਿਕੁਐਸਟ ਬਾਰੇ ਮਦਦ ਮੰਗਦੇ ਸਮੇਂ ਇਸ ਦਾ ਹਵਾਲਾ ਦਿਓ।