מדריכים
שגיאות
פורמט השגיאות, קודי הסטטוס ואילו שגיאות כדאי לנסות שוב.
השגיאות מגיעות בפורמט של ה-endpoint שאליו נשלחה הקריאה.
פורמטים של OpenAI:
{"error": {"message": "not enough credits for this request. Add credits in the console", "type": "insufficient_quota", "code": "insufficient_credits", "param": null, "request_id": "req_..."}}Messages:
{"type": "error", "error": {"type": "rate_limit_error", "message": "too many requests per minute for this key"}, "request_id": "req_..."}| סטטוס | קוד | לנסות שוב? | מה לעשות |
|---|---|---|---|
| 400 | invalid_request, unsupported_parameter | לא | לתקן את גוף הבקשה |
| 400 | context_length_exceeded | אחרי קיצור | פרטים באורך הקשר |
| 401 | invalid_api_key | לא | לבדוק את המפתח |
| 402 | insufficient_credits, key_budget_exceeded | לא | להוסיף קרדיטים או להעלות את התקציב של המפתח |
| 403 | key_not_allowed, account_suspended | לא | לבדוק את המודלים וכתובות ה-IP שהמפתח מורשה להם, או לפנות לתמיכה |
| 403 | consent_required | לא | ההסכמה של יוצר המפתח לעיבוד במדינות שותפות נדחתה או נמשכה. אפשר לאשר אותה בקונסולה |
| 404 | model_not_found, not_found | לא | לבדוק את המזהה |
| 413 | request_too_large | לא | לשלוח פחות |
| 429 | rate_limit_exceeded, concurrency_limit_exceeded, capacity_busy | כן | לחכות את מספר השניות שבכותרת retry-after |
| 500 | internal_error | כן, עם backoff | אם זה חוזר, לדווח על הערך של x-request-id |
| 502, 504 | upstream_error, upstream_timeout | כן, עם backoff | |
| 503 | model_unavailable | כן | לנסות שוב עם backoff (retry-after מוגדר בזמן שהשירות עולה מחדש) או להשתמש במודל אחר |
retry-after הוא מספר שלם של שניות, לכל היותר 60.
בקשה שנכשלת לפני שהתשובה מתחילה לא מחויבת, והיא מופיעה בפעילות עם הסטטוס וקוד השגיאה (עד 30 בקשות שנכשלו למפתח בדקה). אם תשובה נקטעת באמצע, משלמים על הטוקנים שכבר נוצרו.
אורך הקשר
בקשה שלא נכנסת למודל מחזירה 400. בפורמטים של OpenAI הקוד הוא context_length_exceeded. ב-Messages הסוג הוא invalid_request_error, עם אותה הודעה. כשההערכה לבדה גבוהה בהרבה מהמגבלה, הבקשה נעצרת לפני שהיא מגיעה למודל:
this request has about N tokens and MODEL accepts M; shorten it or compact the conversationאחרת המודל מסרב לה, בדרך כלל כי הפרומפט יחד עם מגבלת הפלט לא נכנסים, וההודעה היא:
this request is too large for MODEL, which accepts M tokens including the answer; shorten it or compact the conversationשני המקרים לא מחויבים. N הוא הערכה. המגבלה של כל מודל מופיעה בשדה context_length בתשובה של GET /v1/models.
ה-API לא דוחס שיחות. כמו API אחרים שתואמים ל-OpenAI ול-Anthropic, הוא אף פעם לא משמיט או משכתב את ההודעות שלך, ולכן הלקוח צריך להחזיק את השיחה בתוך המגבלה. יש להסיר את ההודעות הישנות ביותר או להחליף אותן בסיכום, להשאיר כל קריאת כלי יחד עם התוצאות שלה, ולשלוח את הבקשה שוב. סוכן הטרמינל עושה את זה לבד.
ניסיונות חוזרים בטוחים
בבקשות שאינן בסטרימינג שולחים כותרת Idempotency-Key. ניסיון חוזר עם אותו מפתח בתוך 24 שעות מחזיר את התגובה הראשונה, עם x-notholy-idempotent-replay: true, ולא מחויב שוב. רק תגובות מוצלחות מוחזרות כך. התגובה נשמרת בזיכרון של השרת שענה, אף פעם לא בדיסק, ולכן ניסיון חוזר אחרי הפעלה מחדש או כזה שמגיע לשרת אחר רץ שוב ומחויב.
curl https://api.notholy.com/v1/chat/completions \
-H "Authorization: Bearer $NOTHOLY_API_KEY" \
-H "Idempotency-Key: report-42-summary" \
-H "Content-Type: application/json" \
-d '{"model": "notholy-specter", "messages": [{"role": "user", "content": "One-line summary of an open redirect."}]}'ה-SDKs הרשמיים כבר מנסים שוב שגיאות 429 ו-5xx עם backoff.