رہنما
خرابیاں، حدود اور دوبارہ کوشش
خرابی کے جوابات اور ریٹ لمٹ ہیڈرز پڑھیں، محفوظ طریقے سے دوبارہ کوشش کریں، اور عام ناکامیوں کی تشخیص کریں۔
ہر Felo API ایک JSON ایرر باڈی واپس کرتا ہے جس میں مستحکم ایرر کوڈ اور ایک request ID شامل ہوتا ہے۔ پہلے HTTP اسٹیٹس پڑھیں، پھر کوڈ، پھر پیغام۔
ایرر انویلپ
موجودہ پروڈکشن جوابات HTTP اسٹیٹس کو status کے طور پر استعمال کرتے ہیں:
{
"status": 401,
"code": "UNAUTHORIZED",
"message": "Invalid API Key",
"request_id": "202610221444486982113280416060637185"
}| فیلڈ | مطلب |
|---|---|
status | HTTP اسٹیٹس کوڈ، جو باڈی میں دہرایا جاتا ہے |
code | مشین کے پڑھنے کے قابل ایرر کوڈ |
message | انسان کے پڑھنے کے قابل وضاحت |
request_id | اِس درخواست کا مبہم شناخت کنندہ؛ معاونت کی درخواستوں میں شامل کریں |
کچھ پرانی endpoint مثالیں status: "error" اور مختلف کوڈ سٹرنگ استعمال کرتی ہیں۔ فیصلہ HTTP اسٹیٹس اور code کی بنیاد پر کریں، message کے الفاظ کی بنیاد پر نہیں۔
عام کوڈز
| HTTP | کوڈ | اِس کا مطلب | کیا کریں |
|---|---|---|---|
| 400 | endpoint کے مخصوص ویلیڈیشن کوڈ | کوئی پیرامیٹر غائب یا غلط ہے | درخواست درست کریں؛ بغیر تبدیلی دوبارہ کوشش نہ کریں |
| 401 | UNAUTHORIZED | API کلید غائب، غلط، میعاد ختم شدہ یا منسوخ | Authorization: Bearer $FELO_API_KEY بھیجیں؛ منسوخ ہو تو کلید تبدیل کریں |
| 402 | INSUFFICIENT_CREDITS | کافی سروس کریڈٹ نہیں | Console Billing میں ٹاپ اپ کریں، پھر دوبارہ کوشش کریں |
| 404 | endpoint کے مخصوص | نامعلوم ماڈل، ٹاسک یا روٹ | ماڈل ID یا ٹاسک ID اور endpoint کا راستہ چیک کریں |
| 429 | RATE_LIMITED | ریٹ کی حد سے تجاوز ہوا | Retry-After کا انتظار کریں، پھر دوبارہ کوشش کریں |
| 5xx | CHAT_FAILED، *_FAILED، SERVICE_UNAVAILABLE | اپ اسٹریم یا سروس کی ناکامی | بیک آف کے ساتھ دوبارہ کوشش کریں؛ برقرار رہے تو معاونت سے رابطہ کریں |
Endpoint ریفرنسز اُس endpoint کے مخصوص کوڈز کی فہرست دیتے ہیں۔ Chat API کے ایررز یا جس endpoint کو آپ کال کر رہے ہیں اُس کے ریفرنس سے آغاز کریں۔
ماڈل جنریشن endpoints
POST /api/v1/images/generations اور POST /api/v1/videos/generations اوپر والے انویلپ کے بجائے OpenAI انویلپ میں endpoint سطح کے ایررز واپس کرتے ہیں:
{
"error": {
"message": "Model kind does not match this generation endpoint",
"type": "invalid_request_error",
"param": null,
"code": "model_kind_mismatch"
}
}request ID باڈی میں نہیں، X-Request-Id response ہیڈر میں ہوتا ہے۔ مسترد شدہ درخواست کوئی ٹاسک نہیں بناتی۔ ٹاسک بن جانے کے بعد زیادہ تر ناکامیاں HTTP ایرر کے بجائے 200 جواب میں آخری ٹاسک اسٹیٹس کے طور پر آتی ہیں: status میں failed یا interrupted چیک کریں، پھر error.message پڑھیں۔ تصویر جنریشن اور async ٹاسکس دیکھیں۔
request IDs
Felo ایرر باڈیز میں request_id شامل ہوتا ہے۔ اِسے endpoint، HTTP اسٹیٹس، ایرر کوڈ، ماڈل ID اور ٹاسک ID کے ساتھ لاگ کریں۔ مکمل API کلید کبھی لاگ نہ کریں۔
Model API ایک اختیاری X-Request-Id درخواست ہیڈر بھی قبول کرتا ہے۔ جب آپ ایک بھیجتے ہیں تو تشخیص کے لیے یہ واپس دہرایا جاتا ہے، جس سے آپ اپنے لاگز کو کسی درخواست سے منسلک کر سکتے ہیں۔ اگر آپ نہیں بھیجتے تو واپس شدہ request_id استعمال کریں۔
ریٹ کی حدود
/v2/chat واحد Felo endpoint ہے جس پر دستاویزی طور پر نافذ ریٹ کی حدود ہیں:
- فی API کلید، 1 منٹ کی ونڈو۔
- فی صارف، 1 منٹ کی ونڈو۔
- فی صارف، 1 گھنٹے کی ونڈو۔
جن صارفین کے پاس موثر بامعاوضہ Felo سبسکرپشن ہے، بشمول انٹرپرائز سبسکرپشنز، وہ مستثنیٰ ہیں اور اُنہیں کوئی X-RateLimit-* ہیڈر نہیں ملتا۔ اگر سبسکرپشن کی حالت کی تصدیق نہ ہو سکے تو حدود پھر بھی لاگو ہوتی ہیں۔
| ہیڈر | مطلب |
|---|---|
X-RateLimit-Limit | فی الحال نافذ سب سے سخت جہت کی حد |
X-RateLimit-Remaining | تینوں جہتوں میں کم سے کم باقی کوٹہ |
X-RateLimit-Reset | موجودہ ونڈو کے ری سیٹ ہونے کا Unix ٹائم اسٹیمپ سیکنڈز میں |
Retry-After | 429 پر، سیکنڈز میں تجویز کردہ تاخیر |
دیگر /v2/** endpoints پر فی الحال کوئی نافذ ریٹ کی حد نہیں۔ Model API درخواستیں پھر بھی اپ اسٹریم فراہم کنندہ کی طرف سے محدود ہو سکتی ہیں، جو 429 کی صورت میں ظاہر ہو سکتی ہیں۔
عددی حدود ہارڈ کوڈ نہ کریں۔ ہر جواب کے ہیڈرز پڑھیں۔
دوبارہ کوشش کی پالیسی
| صورت حال | دوبارہ کوشش؟ |
|---|---|
| 400، 401، 402، 404 | نہیں۔ پہلے درخواست، کلید یا بیلنس درست کریں۔ |
| 429 | ہاں، Retry-After یا X-RateLimit-Reset کے بعد۔ |
| 5xx، ٹائم آؤٹس، کنکشن ری سیٹس | ہاں، exponential backoff اور jitter کے ساتھ۔ |
| جواب کے درمیان اسٹریمنگ کنکشن ٹوٹ جانا | دوبارہ کوشش صرف اُس صورت میں جب آپ کی ایپلیکیشن ڈپلیکیٹ جنریشن برداشت کر سکے۔ |
تجویز کردہ لوپ:
- صرف idempotent یا دہرانے کے لیے محفوظ درخواستوں پر دوبارہ کوشش کریں۔
- exponential backoff استعمال کریں: تقریباً 1 سیکنڈ سے شروع کریں، دوگنا کرتے جائیں، 30 سیکنڈ پر حد رکھیں۔
- بے ترتیب jitter شامل کریں تاکہ کلائنٹس بیک وقت دوبارہ کوشش نہ کریں۔
- چند کوششوں کے بعد رک جائیں اور ایرر سامنے رکھیں۔
- 429 پر اپنے شیڈول کے بجائے
Retry-Afterکی پاسداری کریں۔
ڈیبگنگ کی ترتیب
- چیک کریں کہ کلید موجود ہے اور منسوخ نہیں ہوئی۔
- تصدیق کی توثیق کے لیے اُسی کلید سے
GET /api/v1/modelsکال کریں۔ - ہدف endpoint کو سب سے چھوٹی درست درخواست بھیجیں۔
- اسٹریمنگ، ٹولز یا بڑے اِن پٹس ایک وقت میں ایک شامل کریں۔
- async کام کے لیے دوبارہ جمع کرانے سے پہلے ٹاسک کی حالت چیک کریں۔