গাইড
ত্রুটি, সীমা ও পুনরায় চেষ্টা
ত্রুটির প্রতিক্রিয়া ও রেট-লিমিট হেডার পড়ুন, নিরাপদে আবার চেষ্টা করুন এবং সাধারণ সমস্যা চিহ্নিত করুন।
প্রতিটি Felo API একটি স্থিতিশীল error code ও একটি request ID সহ JSON error body ফেরত দেয়। প্রথমে HTTP স্ট্যাটাস, তারপর code, তারপর message পড়ুন।
Error envelope
বর্তমান প্রোডাকশন রেসপন্স status হিসেবে HTTP স্ট্যাটাস ব্যবহার করে:
{
"status": 401,
"code": "UNAUTHORIZED",
"message": "Invalid API Key",
"request_id": "202610221444486982113280416060637185"
}| ফিল্ড | অর্থ |
|---|---|
status | HTTP স্ট্যাটাস কোড, body-তে পুনরাবৃত্ত |
code | মেশিন-পাঠযোগ্য error code |
message | মানুষ-পাঠযোগ্য ব্যাখ্যা |
request_id | এই অনুরোধের অস্বচ্ছ শনাক্তকারী; সহায়তা অনুরোধে এটি অন্তর্ভুক্ত করুন |
কিছু পুরোনো endpoint উদাহরণ status: "error" ও ভিন্ন code স্ট্রিং ব্যবহার করে। message-এর সঠিক শব্দবিন্যাসের বদলে HTTP স্ট্যাটাস ও code-এর ভিত্তিতে শাখা তৈরি করুন।
সাধারণ কোড
| HTTP | কোড | এর অর্থ | কী করবেন |
|---|---|---|---|
| 400 | Endpoint-নির্দিষ্ট ভ্যালিডেশন কোড | একটি প্যারামিটার অনুপস্থিত বা অবৈধ | অনুরোধ ঠিক করুন; অপরিবর্তিত অবস্থায় রিট্রাই করবেন না |
| 401 | UNAUTHORIZED | API key অনুপস্থিত, অবৈধ, মেয়াদোত্তীর্ণ বা প্রত্যাহৃত | Authorization: Bearer $FELO_API_KEY পাঠান; প্রত্যাহৃত হলে key রোটেট করুন |
| 402 | INSUFFICIENT_CREDITS | যথেষ্ট পরিষেবা ক্রেডিট নেই | Console Billing-এ টপ আপ করুন, তারপর রিট্রাই করুন |
| 404 | Endpoint-নির্দিষ্ট | অজানা মডেল, টাস্ক বা রুট | মডেল ID বা টাস্ক ID এবং endpoint path দেখুন |
| 429 | RATE_LIMITED | একটি রেট সীমা অতিক্রম হয়েছে | Retry-After-এর জন্য অপেক্ষা করুন, তারপর রিট্রাই করুন |
| 5xx | CHAT_FAILED, *_FAILED, SERVICE_UNAVAILABLE | আপস্ট্রিম বা সার্ভিস ব্যর্থতা | ব্যাকঅফসহ রিট্রাই করুন; স্থায়ী হলে সহায়তার সাথে যোগাযোগ করুন |
Endpoint রেফারেন্স সেই endpoint-এর নির্দিষ্ট কোড তালিকাভুক্ত করে। Chat API ত্রুটি বা আপনি যে endpoint কল করছেন তার রেফারেন্স দিয়ে শুরু করুন।
মডেল জেনারেশন endpoint
POST /api/v1/images/generations ও POST /api/v1/videos/generations উপরের envelope-এর বদলে OpenAI envelope-এ endpoint-স্তরের ত্রুটি ফেরত দেয়:
{
"error": {
"message": "Model kind does not match this generation endpoint",
"type": "invalid_request_error",
"param": null,
"code": "model_kind_mismatch"
}
}request ID body-তে নয়, X-Request-Id রেসপন্স header-এ থাকে। প্রত্যাখ্যাত অনুরোধ কোনো টাস্ক তৈরি করে না। টাস্ক তৈরি হয়ে গেলে বেশিরভাগ ব্যর্থতা HTTP ত্রুটির বদলে 200 রেসপন্সে টার্মিনাল টাস্ক স্ট্যাটাস হিসেবে আসে: failed বা interrupted-এর জন্য status দেখুন, তারপর error.message পড়ুন। Image Generation ও Async Tasks দেখুন।
Request ID
Felo error body-তে request_id থাকে। এটি endpoint, HTTP স্ট্যাটাস, error code, মডেল ID ও টাস্ক ID-সহ লগ করুন। সম্পূর্ণ API key কখনো লগ করবেন না।
Model API একটি ঐচ্ছিক X-Request-Id অনুরোধ header-ও গ্রহণ করে। আপনি একটি পাঠালে ডায়াগনস্টিকসের জন্য তা ফেরত পাঠানো হয়, যা আপনার নিজের লগকে একটি অনুরোধের সাথে সম্পর্কিত করতে দেয়। আপনি না পাঠালে ফেরত আসা request_id ব্যবহার করুন।
রেট সীমা
/v2/chat হলো নথিভুক্ত কার্যকর রেট সীমাযুক্ত একমাত্র Felo endpoint:
- প্রতি API key, 1 মিনিটের উইন্ডো।
- প্রতি ব্যবহারকারী, 1 মিনিটের উইন্ডো।
- প্রতি ব্যবহারকারী, 1 ঘণ্টার উইন্ডো।
কার্যকর পেইড Felo সাবস্ক্রিপশন, এন্টারপ্রাইজ সাবস্ক্রিপশনসহ, থাকা ব্যবহারকারীরা ব্যতিক্রম এবং কোনো X-RateLimit-* header পান না। সাবস্ক্রিপশন অবস্থা যাচাই করা না গেলে সীমা প্রযোজ্য থাকে।
| Header | অর্থ |
|---|---|
X-RateLimit-Limit | বর্তমানে কার্যকর সবচেয়ে কঠোর মাত্রার সীমা |
X-RateLimit-Remaining | তিনটি মাত্রা জুড়ে ন্যূনতম অবশিষ্ট কোটা |
X-RateLimit-Reset | বর্তমান উইন্ডো রিসেট হওয়ার Unix টাইমস্ট্যাম্প সেকেন্ডে |
Retry-After | 429-এ, সেকেন্ডে প্রস্তাবিত বিলম্ব |
অন্যান্য /v2/** endpoint-এ বর্তমানে কোনো কার্যকর রেট সীমা নেই। Model API অনুরোধ এখনো আপস্ট্রিম প্রোভাইডার দ্বারা সীমিত হতে পারে, যা 429 হিসেবে দেখা দিতে পারে।
সাংখ্যিক সীমা হার্ডকোড করবেন না। প্রতিটি রেসপন্সের header পড়ুন।
রিট্রাই নীতি
| পরিস্থিতি | রিট্রাই? |
|---|---|
| 400, 401, 402, 404 | না। আগে অনুরোধ, key বা ব্যালেন্স ঠিক করুন। |
| 429 | হ্যাঁ, Retry-After বা X-RateLimit-Reset-এর পরে। |
| 5xx, টাইমআউট, সংযোগ রিসেট | হ্যাঁ, এক্সপোনেনশিয়াল ব্যাকঅফ ও jitter সহ। |
| রেসপন্সের মাঝপথে স্ট্রিমিং সংযোগ বিচ্ছিন্ন | কেবল তখনই রিট্রাই করুন যদি আপনার অ্যাপ্লিকেশন ডুপ্লিকেট জেনারেশন সহ্য করতে পারে। |
প্রস্তাবিত লুপ:
- কেবল idempotent বা পুনরাবৃত্তি-নিরাপদ অনুরোধ রিট্রাই করুন।
- এক্সপোনেনশিয়াল ব্যাকঅফ ব্যবহার করুন: প্রায় 1 সেকেন্ড দিয়ে শুরু করুন, দ্বিগুণ করুন, 30 সেকেন্ডে সীমাবদ্ধ রাখুন।
- র্যান্ডম jitter যোগ করুন যাতে ক্লায়েন্টরা একসাথে রিট্রাই না করে।
- অল্প সংখ্যক চেষ্টার পরে থামুন এবং ত্রুটি প্রকাশ করুন।
- 429-এ নিজের সময়সূচির বদলে
Retry-Afterমানুন।
ডিবাগিং ক্রম
- key উপস্থিত ও প্রত্যাহারকৃত নয় তা দেখুন।
- প্রমাণীকরণ নিশ্চিত করতে একই key দিয়ে
GET /api/v1/modelsকল করুন। - লক্ষ্য endpoint-এ ক্ষুদ্রতম বৈধ অনুরোধ পাঠান।
- একবারে একটি করে স্ট্রিমিং, tools বা বড় input যোগ করুন।
- অ্যাসিঙ্ক কাজের জন্য আবার সাবমিট করার আগে টাস্ক স্ট্যাটাস দেখুন।