# שגיאות

> פורמט השגיאות, קודי הסטטוס ואילו שגיאות כדאי לנסות שוב.


השגיאות מגיעות בפורמט של ה-endpoint שאליו נשלחה הקריאה.

פורמטים של OpenAI:

```json
{"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:

```json
{"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`, עם אותה הודעה. כשההערכה לבדה גבוהה בהרבה מהמגבלה, הבקשה נעצרת לפני שהיא מגיעה למודל:

```text
this request has about N tokens and MODEL accepts M; shorten it or compact the conversation
```

אחרת המודל מסרב לה, בדרך כלל כי הפרומפט יחד עם מגבלת הפלט לא נכנסים, וההודעה היא:

```text
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, הוא אף פעם לא משמיט או משכתב את ההודעות שלך, ולכן הלקוח צריך להחזיק את השיחה בתוך המגבלה. יש להסיר את ההודעות הישנות ביותר או להחליף אותן בסיכום, להשאיר כל קריאת כלי יחד עם התוצאות שלה, ולשלוח את הבקשה שוב. [סוכן הטרמינל](/he/cli/agent#סשנים-ארוכים) עושה את זה לבד.

## ניסיונות חוזרים בטוחים

בבקשות שאינן בסטרימינג שולחים כותרת `Idempotency-Key`. ניסיון חוזר עם אותו מפתח בתוך 24 שעות מחזיר את התגובה הראשונה, עם `x-notholy-idempotent-replay: true`, ולא מחויב שוב. רק תגובות מוצלחות מוחזרות כך. התגובה נשמרת בזיכרון של השרת שענה, אף פעם לא בדיסק, ולכן ניסיון חוזר אחרי הפעלה מחדש או כזה שמגיע לשרת אחר רץ שוב ומחויב.

```bash test
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.

## הבא

- [מגבלות ומקביליות](/he/guides/limits)
