שגיאות
לכל שגיאה ב-REST API של Nodaro יש סטטוס HTTP וקוד קבוע במעטפת אחת. מה כל קוד אומר, אחרי אילו שגיאות לנסות שוב ואיך משימה שנכשלה מסבירה למה.
לכל שגיאה ב-API של Nodaro יש סטטוס HTTP ומעטפת JSON אחת עם code קבוע, כך שהלקוח שלכם יכול לפעול לפי הקוד במקום לנתח הודעות. יש שני סוגי כשל: שגיאת בקשה, כשהקריאה עצמה נדחית ושום דבר לא מתחיל, וכשל משימה, כשיצירה שכבר התחילה נכשלת מאוחר יותר, והמשימה מציינת את הסיבה.
מעטפת השגיאה
{ "error": { "code": "rate_limited", "message": "Too many requests. Max 30 per minute." } }- השדה
codeהוא מזהה קבוע. פעלו לפיו. - השדה
messageהוא טקסט לבני אדם. הוא יכול להשתנות, ולכן לעולם אל תבנו בדיקות על הטקסט שלו. - חלק מהשגיאות מוסיפות שדות, שמפורטים ליד כל קוד בהמשך. רוב השדות נמצאים בתוך
error; השגיאהalready_runningמציבה אתexecutionIdלצדerror, ובדיקת מכסה שנכשלה לפני ההרצה שמה אתrequiredואתremainingברמה העליונה.
נקודת הקצה של אסימוני OAuth היא היוצאת מן הכלל היחידה: היא עונה בפורמט של OAuth, למשל { "error": "invalid_grant", "error_description": "…" }. ראו את הדף אפליקציות OAuth.
אחרי אילו שגיאות לנסות שוב
| סטטוס | מה לעשות |
|---|---|
5xx | בדרך כלל זמנית. נסו שוב, והאריכו את ההמתנה אקספוננציאלית לפני כל ניסיון. |
429 | המתינו ונסו שוב, והאריכו את ההמתנה לפני כל ניסיון: למשל 5 שניות, אחר כך 10 ואחר כך 20. כשיש כותרת Retry-After, פעלו לפיה. |
402 | הוסיפו קרדיטים, או בקשו תקציב ממנהל סביבת העבודה, ואז נסו שוב. |
4xx אחר | תקנו קודם את הבקשה. אותה בקשה תיכשל שוב. |
שלוש שגיאות שרת דורשות תשומת לב:
- ניסיון חוזר אחרי
503 price_not_configuredלא יצליח: למודל אין מחיר בפריסה הזו עד שמנהל השרת יקבע לו מחיר. - השגיאה
503 provider_unavailableבנתיב האסינכרוני של הקריאה ל-LLM עם פלט מובנה היא שגיאה קבועה בהתקנה ששולחת את הקריאות שלה למודלי שפה ל-nodaro.ai. - בפרסום לרשתות חברתיות,
503 publish_retryableפירושו ששום דבר לא פורסם, ואפשר לשלוח את אותה בקשה שוב בבטחה, אבל500 publish_failedפירושו שהתוצאה לא ידועה, ושליחה חוזרת עלולה לפרסם פעמיים.
קודי שגיאה
400 Bad Request
| קוד | משמעות |
|---|---|
validation_error | גוף בקשה פגום, UUID שגוי, שדה לא תקין או cursor פגום. עם reason: "llm_model_unpriced": מודל LLM שעדיין אין לו מחיר. ראו את הסעיף מודל שעדיין אין לו מחיר. |
limit_reached | כבר יש לכם 10 אסימוני API, פעילים או לא. מחקו אחד קודם. |
invalid_workflow | ערך ב-workflowIds של אסימון הוא לא תהליך במרחב האישי שלכם. |
token_workspace_mismatch | אסימון שמשויך לסביבת עבודה אחת נשלח עם כותרת X-Nodaro-Workspace שמציינת סביבה אחרת. |
locked_field | הרצה ניסתה לשנות לאן רכיב שפונה לשירות חיצוני שולח נתונים, או מאיפה הוא מביא אותם. ראו בדף ה-API מה הרצה לא יכולה לשנות. |
image_required | POST /v1/generate-video בלי פריים פתיחה, במודל שלא יכול ליצור וידאו מטקסט. ההודעה מציינת אם ייחוסים יעבדו במקום זאת. |
sequence_execution_required | ההרצה כוללת רכיבים של הפקת Studio, שצריך ליצור דרך ה-API של הפקות Studio. |
not_workspace_scoped | שיניתם את visibility בתהליך שלא נמצא בסביבת עבודה. |
advanced_mode_unsupported | advancedMode: true במודל שאי אפשר להריץ ישירות אצל הספק שלו. |
advanced_mode_unavailable | advancedMode: true כשהספק של המודל עצמו לא יכול לקבל בקשות. לא נגבים קרדיטים. כבו את המצב המתקדם כדי להריץ את המודל. אותו קוד יכול להגיע גם כ-502 באמצע קריאה. במקרה כזה הקרדיטים מוחזרים, אלא אם הספק חייב על הניסיון. |
quote_unsupported | POST /v1/quote לסוג רכיב שהפלטפורמה לא יכולה לתת לו אומדן מחיר. ההודעה מפרטת את הסוגים שאפשר לקבל להם אומדן. ראו בדף ה-API אומדני מחיר להרצה. |
continuation_subset_required | continueFromExecutionId בלי nodeIds או continueMode. ראו בדף ה-API המשך הרצה. |
continuation_workflow_mismatch | ההרצה שמצוינת ב-continueFromExecutionId הריצה תהליך אחר. |
continuation_version_mismatch | ההרצה שמצוינת ב-continueFromExecutionId הריצה גרסת אפליקציה שפורסמה של התהליך. |
render_final_node_not_found | renderFinal.renderNodeId לא מציין אף רכיב של התהליך. |
render_final_not_a_render | renderFinal.renderNodeId מציין רכיב שהוא לא רינדור של רכיב החלת רשימת עריכה. |
401 Unauthorized
| קוד | משמעות |
|---|---|
unauthorized | האסימון חסר, לא תקין, פג תוקפו או בוטל. |
402 Payment Required
הקודים האלה מגיעים מ-Nodaro Cloud ומפריסות שיש בהן חיוב.
| קוד | שדות נוספים | משמעות |
|---|---|---|
insufficient_credits | required, balance | לחשבון נגמרו הקרדיטים. בפריסה עם חשבון חיוב אחד, פירוש השגיאה הוא שמאגר הקרדיטים של הפריסה ריק: השגיאה כוללת אז את required, אבל אף פעם לא את balance, ורק חשבון החיוב יכול להוסיף קרדיטים. |
insufficient_app_credits | הרצה של אפליקציה שפורסמה: לחשבון נגמרו הקרדיטים. | |
budget_exceeded | עבודה שסביבת עבודה משלמת עליה: התקציב של סביבת העבודה לא מכסה את ההרצה. בקשו תוספת ממנהל סביבת העבודה. | |
member_cap_exceeded | עבודה שסביבת עבודה משלמת עליה: הגעתם לתקרת ההוצאה האישית שלכם בסביבת העבודה הזו. | |
user_allowance_exceeded | required, remaining | פריסה עם חשבון חיוב אחד שאוכפת מכסה לכל משתמש: המכסה שלכם לא מספיקה להרצה. רק חשבון החיוב יכול להגדיל אותה. |
instance_cap_reached | אסימון OAuth של התקנה מחוברת באירוח עצמי: ההתקנה הוציאה את כל התקרה החודשית שלה בחשבון שחיבר אותה. הגדילו את התקרה או הסירו אותה תחת מופעים מחוברים. |
403 Forbidden
| קוד | שדות נוספים | משמעות |
|---|---|---|
forbidden | האסימון מוגבל לתהליכים מסוימים והבקשה מחוצה להם, או שהנתיב דורש סשן מחובר. ראו בדף ה-API הגבלת אסימון לתהליכים מסוימים ונתיבים שדורשים סשן מחובר. | |
access_blocked | ב-Nodaro Cloud ובמהדורת Business, מנהל מערכת חסם את החשבון. כל פרטי הגישה של החשבון נדחים: הסשן, אסימוני ה-API ואסימוני ה-OAuth. התזמונים והטריגרים שלו נעצרים, והאפליקציות שהוא פרסם מחזירות 404 not_found. אם אתם חושבים שזו טעות, פנו לתמיכה. | |
insufficient_scope | missingScope | לאסימון OAuth אין הרשאה שהנתיב דורש. שלחו את המשתמש שוב דרך מסך ההסכמה, עם ההרשאה הרחבה יותר. |
in_app_only | הנתיב קיים רק בשביל אפליקציית הווב של Nodaro, כמו ה-Copilot. | |
node_not_available | הפריסה הזו לא מציעה לחשבון שלכם את הרכיב, או את האפשרות שבחרתם בו. ההודעה מציינת מה לא זמין. לא נגבים קרדיטים. | |
model_not_available | ה-provider ששלחתם מציין מודל שהפריסה הזו לא מציעה. בחרו מודל אחר. לא נגבים קרדיטים. | |
model_disabled | ב-Nodaro Cloud בלבד. מנהל כיבה את המודל הזה. לא משוריינים ולא נגבים קרדיטים. קניית קרדיטים לא תעזור: בחרו מודל אחר, או נסו שוב כשהמודל יופעל מחדש. | |
edition_required | required_edition | הנתיב דורש מהדורה גבוהה יותר: להסתעפות של פייפליין cloud, ולניהול אסימוני API business. |
not_a_member | הכותרת X-Nodaro-Workspace מציינת סביבת עבודה שאתם לא חברים פעילים בה. | |
member_suspended | החברות שלכם בסביבת העבודה מושעית. | |
personal_space_disabled | הארגון שלכם מאפשר לכם ליצור עבודה רק בתוך סביבת עבודה. שלחו את כותרת סביבת העבודה. | |
project_create_not_allowed | רק המנהלים של סביבת העבודה יכולים ליצור פרויקטים. | |
workspace_archived | כתיבה לסביבת עבודה שבארכיון, כגון שיתוף תהליך. יצירת עבודה שם נדחית במקום זאת עם 409. | |
not_permitted | אין לכם הרשאה להעביר את התהליך, או להעביר אותו לשם. | |
sso_required | הפריסה מגבילה את ההתחברות לספק הזהות שלה, והחשבון של הסשן הזה לא נוצר דרכו. אסימונים לא מושפעים. | |
subscription_required | חשבון בתשלום לפי שימוש הוציא קרדיטים בעורך בדפדפן. קרדיטי תשלום לפי שימוש עובדים ב-API, ב-SDK, ב-CLI וב-MCP, ולכן קריאות עם אסימון אף פעם לא מקבלות את הקוד הזה. | |
api_tokens_payer_only | בפריסה עם חשבון חיוב אחד, רק החשבון הזה יכול ליצור אסימוני API. | |
payer_balance_jwt_only | בפריסה כזו, חשבון החיוב קרא את היתרה של המאגר עם אסימון. רק הסשן שלו בדפדפן רשאי לעשות זאת. | |
payer_required | משהו שהוא לא הסשן של חשבון החיוב בדפדפן קרא לנתיב חיוב של הפריסה. | |
rights_confirmation_required, rights_authorization_required ושאר הקודים rights_confirmation_* | לייבוא של קישור אין אישור מתאים של זכויות תוכן. לא הורדו קבצים. ראו בדף ה-API זכויות תוכן. | |
import_source_disabled | הפריסה לא מאפשרת ייבוא מהאתר של הקישור. | |
imports_blocked | ייבוא קישורים חסום בחשבון, או שהחשבון סגור, לפי מדיניות המפרים החוזרים של הפריסה. ההודעה מציינת עד מתי. ראו בדף ה-API מפרים חוזרים. |
404 Not Found
| קוד | משמעות |
|---|---|
not_found | המשאב לא קיים, או שאין לכם גישה אליו. שני המקרים מקבלים בכוונה אותה תשובה, כדי שמזהה אף פעם לא יגלה אם משהו קיים. |
workspace_not_found | עבודה שסביבת עבודה משלמת עליה מציינת סביבת עבודה שלא קיימת. |
continuation_not_found | ההרצה שמצוינת ב-continueFromExecutionId לא קיימת או לא שייכת לכם. |
409 Conflict
| קוד | שדות נוספים | משמעות |
|---|---|---|
already_running | executionId | לתהליך כבר יש הרצה פעילה, או שניסיון חוזר של הרצת האפליקציה ממתין. במקום זאת, בדקו את הסטטוס של ההרצה הזו מדי כמה שניות. |
continuation_not_completed | ההרצה שמצוינת ב-continueFromExecutionId עדיין רצה, נכשלה או בוטלה. בלי continueMode אפשר להמשיך רק הרצה שהושלמה. | |
continuation_not_failed | עם "continueMode": "from-failed": ההרצה לא נכשלה. | |
continuation_superseded | executionId, supersededBy | עם "continueMode": "from-failed": הרצת המשך חדשה יותר של ההרצה נכשלה, ולכן המשיכו אותה, או שהרצת ההמשך הזו כבר השלימה את כל מה שנשאר. ראו בדף ה-API המשך הרצה שנכשלה. |
continuation_preview_pending | executionId, renderNodeIds, reviewNodeIds, next | עם "continueMode": "from-failed": הרצת ההמשך החדשה ביותר נעצרה לבדיקה ברכיב תצוגה מקדימה. קודם שלחו את next כגוף הבקשה של הרצה. |
continuation_subset_required | עם "continueMode": "from-failed": לא נשאר מה להמשיך. בניסיון חוזר של הרצת אפליקציה: כל השלבים הושלמו. | |
app_run_version_changed | appVersion, runVersion | ניסיון חוזר של הרצת אפליקציה שנעשתה בגרסה אחרת של האפליקציה. התחילו את ההרצה מההתחלה. |
app_run_version_unavailable | ניסיון חוזר של הרצת אפליקציה שהגרסה שלה כבר לא זמינה. התחילו את ההרצה מההתחלה. | |
workflow_conflict | currentVersion, currentUpdatedAt, currentRecord | התהליך השתנה מאז הגרסה ששלחתם. מזגו את השינויים שלכם לתוך currentRecord ושמרו שוב. |
job_cancelled | בקשת LLM סינכרונית שמחויבת לפי השימוש, שהמשימה שלה בוטלה אחרי שהקרדיטים שלה שוריינו, אבל לפני שהקריאה שלה נשלחה. ראו את הסעיף בקשות LLM שמחויבות לפי השימוש. | |
idempotency_key_reused | — | הרצה של רכיב הידוק פרק או הרצת ההמשך שלה (POST /v1/tighten-episode, POST /v1/tighten-episode/continue): ה-Idempotency-Key כבר שייך לאחת המשימות שלכם מסוג אחר, כגון יצירת תמונה. שום דבר לא נוצר ולא נגבים קרדיטים. שלחו מפתח חדש. מפתח ששייך להרצה של אותו רכיב מחזיר את ההרצה הזו, עם 202 ו-"deduped": true. |
workspace_archived | ניסיתם ליצור עבודה בסביבת עבודה שבארכיון או להעביר אליה עבודה. | |
workspace_has_no_default_project | בקשת יצירה בסביבת עבודה לא ציינה פרויקט, ולסביבת העבודה אין פרויקט ברירת מחדל. ציינו פרויקט. | |
move_blocked | העבודה נוצרה במסגרת מטלה, ואי אפשר להעביר אותה. | |
production_capability_required | שמירה כללית של תהליך השפיעה על הפקת Studio, שדורשת API משלה. | |
retained_image_in_use | מחיקה הייתה מסירה תמונות מוגנות, או שלהפקה עדיין יש משימות שמשתמשות בהן. קודם סיימו או בטלו את המשימות האלה. | |
content_held | הקובץ נשמר כראיה לתלונה, ולכן אי אפשר למחוק אותו כרגע. ראו בדף ה-API תוכן מוגבל. |
413, 422, 429 ו-451
| סטטוס | קוד | משמעות |
|---|---|---|
| 413 | החשבון שלכם חרג ממגבלת האחסון שלו. ה-SDK זורק StorageExceededError. | |
| 422 | job_blocked | מדיניות המשימות של הפריסה דחתה את היצירה לפני שהיא רצה. לא נוצרה משימה ולא נגבו קרדיטים. הציגו למשתמש שלכם את message כמו שהוא, ואל תנסו שוב את אותה בקשה. |
| 422 | upload_blocked | מדיניות ההעלאות של הפריסה דחתה קובץ לפני שהוא נשמר. הציגו את message כמו שהוא. |
| 422 | offsets_not_applied | POST /v1/edit-plan קיבל שדה offsets גולמי. קודם כתבו כל היסט במקור שלו, כ-sources[].offsetMs. ראו את הדף תוכנית עריכה. |
| 422 | master_offset | POST /v1/edit-plan קיבל היסט ששונה מ-0 במקור המאסטר, או במקור שממנו נוצר התמלול. לא נגבים קרדיטים. |
| 429 | rate_limited | מגבלת הקצב שחלה על כל אסימון API אישי. |
| 429 | rate_limit_exceeded | כל מגבלה אחרת: לכל כתובת, לכל נתיב, או מספר ההרצות היומי של אפליקציה שפורסמה. |
| 429 | too_many_downloads | כבר יש לכם 4 ייבואי וידאו שרצים. |
| 451 | content_restricted | ב-GET /v1/download או ב-GET /v1/image-proxy התבקש קובץ ש-Nodaro הגביל. ראו בדף ה-API תוכן מוגבל. |
השגיאות job_blocked ו-upload_blocked מופיעות רק בפריסות שרושמות מדיניות כזו. על קודי 429, ראו את דף ה-API מגבלות קצב.
500 ו-503
| סטטוס | קוד | משמעות |
|---|---|---|
| 500 | internal_error | שגיאת שרת, או כשל של שירות שהשרת תלוי בו. נסו שוב, והאריכו את ההמתנה לפני כל ניסיון. |
| 502 | advanced_mode_unavailable | הספק של המודל עצמו דחה קריאת LLM במצב מתקדם באמצע הקריאה. הקרדיטים המשוריינים מוחזרים, אלא אם הספק חייב על הניסיון. כבו את המצב המתקדם כדי להריץ את המודל. |
| 503 | job_start_failed | בקשת LLM סינכרונית שמחויבת לפי השימוש לא הצליחה לרשום שהקריאה שלה מתחילה. ראו את הסעיף בקשות LLM שמחויבות לפי השימוש. |
| 503 | price_not_configured | למודל המבוקש אין מחיר בפריסה הזו, ולכן השרת מסרב במקום לחייב בטעות. ניסיון חוזר לא יעזור. |
| 503 | rate_limit_unavailable | נתיב שמוציא קרדיטים לא הצליח לבדוק את מגבלת הקצב שלו. נסו שוב מאוחר יותר. |
| 503 | provider_unavailable | הספק של המודל לא זמין. |
| 503 | billing_unavailable | דיווח השימוש לא זמין במופע הזה, או שהחיוב לא זמין לרגע בניסיון חוזר של הרצת אפליקציה בסביבת עבודה. נסו שוב בעוד רגע. |
בקשות LLM שמחויבות לפי השימוש
קריאה למודל שפה מחויבת לפי הטוקנים שהיא משתמשת בהם, ולכן הקרדיטים שלה משוריינים לפני שהקריאה מתחילה. בקשה סינכרונית מהסוג הזה, כגון רכיב יצירת טקסט, אשף הפרומפטים או POST /v1/llm/structured, יכולה להחזיר עוד שני קודים:
409 job_cancelled. המשימה בוטלה אחרי שהקרדיטים שלה שוריינו, אבל לפני שהקריאה שלה נשלחה. הקריאה אף פעם לא נשלחת, והקרדיטים המשוריינים מוחזרים. אל תנסו שוב את הבקשה כמו שהיא: המשימה בוטלה בכוונה.503 job_start_failed. השרת לא הצליח לרשום שהקריאה מתחילה, ולכן הוא לא שלח אותה. הקרדיטים המשוריינים מוחזרים. שלחו את הבקשה שוב.
מודל שעדיין אין לו מחיר
על רכיב LLM משלמים לפי המודל, בתעריף של השירות שמריץ אותו. מודל שאין לו תעריף בשירות הזה לא יכול לרוץ. כל נתיב שהיה מתמחר אותו או מריץ אותו מחזיר 400:
{
"error": {
"code": "validation_error",
"reason": "llm_model_unpriced",
"modelId": "<model>",
"message": "The model \"<model>\" has no price yet, so it cannot be run. Choose another model."
}
}- אומדנים: הנתיבים
POST /v1/credits/estimate-workflow,GET /v1/credits/model-cost,POST /v1/component/estimate-credits,POST /v1/workflows/:id/render-final/estimateונתיב ה-/estimateשל כל רכיב תרחיש שימוש. הנתיבPOST /v1/credits/model-costsעונה במקום זאת לכל מפתח בנפרד: הוא מציין את המפתח ב-errors, עם רשומה ב-errorCodes. - פרסום: הנתיבים
POST /v1/apps/publishו-POST /v1/templates/publishמסרבים לפני שמשהו נכתב. בפרסום מחדש, הגרסה הנוכחית נשארת פעילה. - הרצות: הנתיבים
POST /v1/workflows/:id/run,POST /v1/app/:slug/run,POST /v1/app/:slug/runs/:runId/resume,POST /v1/component/execute,POST /v1/api/run,POST /v1/present/:token/runונתיבי ההרצה וההמשך של כל רכיב תרחיש שימוש. הבדיקה נעשית לפני שההרצה נוצרת, כשערכי הקלט ששלחתם כבר מוחלים. אף רכיב לא רץ, ולכן לא נגבים קרדיטים. כלי ה-MCPrun_app,run_workflowו-run_componentמגיעים לאותם נתיבים. - טריגרים: קריאה ל-Webhook נדחית עם אותו
400. כשטריגר תזמון, טריגר טלגרם או טריגר של תוסף אמורים להתחיל הרצה, מדלגים עליה. כל טריגר משאיר בהיסטוריה של התהליך רשומת הרצה אחת שנכשלה, עםerror_message: "llm_model_unpriced", ופעמים נוספות שהטריגר אמור להתחיל הרצה לא מוסיפות עוד רשומות. - בתוך ההרצה: השרת בודק שוב כשהרצה מתחילה, לפני שרכיב כלשהו רץ. הבדיקה כוללת את תת־התהליכים ואת הרכיבים השמורים שההרצה מריצה. הרצה שנדחית כאן מסתיימת בסטטוס
failed, עם ההודעה שלמעלה כ-error_messageשלה. כשהמודל נמצא בתוך תת־תהליך, נוסף להודעהFound inside Sub-workflow node <id>.(נמצא בתוך רכיב תת־תהליך עם המזהה הזה), וכשהוא נמצא בתוך רכיב שמור, נוסףFound inside Component node <id>.(נמצא בתוך הרכיב השמור עם המזהה הזה).
שני נתיבים לקריאה בלבד עדיין מתארים את התהליך. הנתיב GET /v1/present/:token משמיט את estimatedCost ומחזיר estimatedCostUnpriced: { reason, modelId, message }. הנתיב GET /v1/api/schema משמיט את estimatedCredits ומחזיר estimatedCreditsUnpriced באותו מבנה.
כשמשימה נכשלת מאוחר יותר
גם בקשה שהצליחה יכולה ליצור משימה שנכשלת. במקרה כזה יש במשימה error_message, ובחמישה סוגי כשל גם error_hint מובנה:
- הערך
{ "kind": "safety-block", "class": "copyright" | "likeness" | "safety", "retried": boolean, "suggestedProvider"?: string, "subject"?: "input_video" | "input_image" | "prompt" | "audio" }כשמסנן הבטיחות של מודל חסם את הבקשה. הערךsubject: "input_video"פירושו שהספק דחה את סרטון הקלט של המשימה עצמו, ולכן שלחו קליפ אחר. הערךsubject: "input_image", תמיד עםclass: "copyright", פירושו שהספק דחה את אחת מתמונות הקלט של המשימה, כי ייתכן שהיא מוגנת בזכויות יוצרים: שלחו תמונה אחרת, כי ניסוח מחדש של הפרומפט לא יעזור. הערךsubject: "prompt"פירושו שבהודעה של הספק עצמו מצוין הפרומפט, ולכן שנו את הפרומפט. הערךsubject: "audio"פירושו שההודעה של הספק עצמו מייחסת את הבעיה לאודיו שנוצר, ולא לתמונה. התייחסו ל-subjectשאתם לא מכירים כאילו הוא לא קיים. - הערך
{ "kind": "policy-block", "policyId": string, "reason": string, "hookPoint": "request" | "result" }כשהמדיניות של פריסה דחתה אותה. - הערך
{ "kind": "credits", "code": string }כשהקרדיטים של המשימה נגמרו באמצע, למשלinsufficient_creditsאו מגבלה של סביבת עבודה כגוןbudget_exceeded. - הערך
{ "kind": "input-refused", "subject": "input_video" }כשהספק דחה את סרטון הקלט של המשימה בלי לציין סוג של מדיניות תוכן. לא מוצע מודל אחר. שלחו קליפ אחר. - הערך
{ "kind": "request-refused", "subject"?: "input_video" }כשהספק דחה את הבקשה כפי שנשלחה, וציין בה בעיה: הגדרה, פורמט או גודל של קובץ, או אורך הפרומפט. אותה בקשה תידחה שוב, ולכן שנו את תמונות הקלט, את הסרטון, את הפרומפט או את ההגדרות. הערךsubject: "input_video"מופיע כשההודעה של הספק מציינת את סרטון הקלט כבעיה, למשל את האורך או הגודל שלו, או שלא נמצאה בו דמות, ולכן שלחו קליפ אחר. זו לא חסימה של מדיניות תוכן.
בשלושת הסוגים הראשונים הקרדיטים מוחזרים, והשדה credit_status במשימה מראה זאת. קריאת LLM שמחויבת לפי השימוש ונכשלה היא החריג: על שימוש שהספק חייב עליו משלמים. ראו בדף ה-API למה משימה נכשלה כדי לדעת מה פירוש כל שדה ומתי לנסות מודל אחר.
שגיאות ב-SDK
החבילה @nodaro/sdk זורקת שגיאה עם טיפוס על כל תגובה שנכשלה. תפסו קודם את המחלקה הספציפית ביותר:
| מחלקה | סטטוס | שדות נוספים |
|---|---|---|
UnauthorizedError | 401 | |
ForbiddenError | 403 | missingScope כשהקוד הוא insufficient_scope |
ModelUnavailableError | 403 | תת־מחלקה של ForbiddenError עבור model_not_available ו-model_disabled: המודל נדחה, לא מי שקרא |
NotFoundError | 404 | |
InsufficientCreditsError | 402 | required, available. השדה code הוא קוד ה-402 של הדחייה עצמה. |
CreditCapExceededError | 402 | תת־מחלקה של InsufficientCreditsError עבור budget_exceeded, member_cap_exceeded ו-user_allowance_exceeded: תקרה שמישהו אחר קבע |
StorageExceededError | 413 | reason: הערך storage_limit_exceeded כשהאחסון מלא, והערך file_too_large כשקובץ אחד חורג מהמגבלה |
WorkflowConflictError | 409 | currentVersion, currentUpdatedAt, currentRecord. המחלקה משמשת גם להתנגשות production_busy של Studio. |
AlreadyRunningError | 409 | executionId: ההרצה שכבר מתבצעת, עבור already_running |
AppRunVersionChangedError | 409 | runVersion, appVersion, עבור app_run_version_changed |
RateLimitedError | 429 | |
JobBlockedError | 422 | |
StudioOpError | 4xx | opIndex: איזו פעולה באצווה של Studio נדחתה |
NodaroError | כל סטטוס | מחלקת הבסיס: code, status, message ו-details, השדות האחרים של המעטפת |
import {
NodaroError,
ForbiddenError,
InsufficientCreditsError,
RateLimitedError,
} from '@nodaro/sdk'
try {
await client.workflows.run(workflowId)
} catch (err) {
if (err instanceof InsufficientCreditsError) {
showPaywall({ required: err.required, available: err.available })
} else if (err instanceof ForbiddenError && err.missingScope) {
requestConsent([err.missingScope])
} else if (err instanceof RateLimitedError) {
await new Promise((r) => setTimeout(r, 5_000))
} else if (err instanceof NodaroError) {
console.error(`API error ${err.status} (${err.code}): ${err.message}`)
} else {
throw err // a network failure, not an API error
}
}פונקציות העזר לתשאול מוסיפות שגיאות משלהן, כגון JobFailedError ו-JobTimeoutError. ראו בדף ה-API הרצת רכיב יחיד.
שגיאות ב-CLI
| קוד יציאה | משמעות |
|---|---|
0 | הצלחה. |
1 | שגיאת הרשאה, משאב שלא נמצא, ארגומנט שגוי או שגיאת רשת. |
2 | --watch הסתיים וההרצה נכשלה. |
3 | --watch נעצר כי המשימה ממתינה לבדיקה. זה לא כשל: בדקו שוב מאוחר יותר. |
130 | --watch הסתיים וההרצה בוטלה. |
עם --json, ה-CLI מדפיס את המטען ויוצא כרגיל, במקום להשתמש בקודים 2, 3 ו-130, ולכן בדקו את .status בעצמכם.
שאלות נפוצות
איך נראית שגיאה ב-API של Nodaro?
לכל שגיאה יש סטטוס HTTP, והגוף שלה הוא { "error": { "code": "…", "message": "…" } }. הקוד קבוע, ולכן פעלו לפיו. ההודעה מיועדת לבני אדם ויכולה להשתנות.
אחרי אילו שגיאות ב-API של Nodaro כדאי לנסות שוב?
נסו שוב אחרי שגיאות 5xx ואחרי 429, והאריכו את ההמתנה אקספוננציאלית לפני כל ניסיון, למשל 5, 10 ו-20 שניות. אל תשלחו שוב בקשה שקיבלה שגיאת 4xx בלי לשנות אותה, כי אותה בקשה תיכשל שוב. בין שגיאות השרת, השגיאה 503 price_not_configured היא היוצאת מן הכלל.
מה פירוש 402 insufficient_credits?
בחשבון אין מספיק קרדיטים כדי להתחיל את ההרצה. השגיאה כוללת את השדה required, מספר הקרדיטים שההרצה צריכה, ובדרך כלל גם את השדה balance. הוסיפו קרדיטים ב-Nodaro Cloud, ואז שלחו את הבקשה שוב.
מהו השדה error_hint במשימה שנכשלה?
השדה error_hint הוא סיבה מובנית שמצורפת למשימה שנכשלה, בחמישה סוגי כשל: מסנן הבטיחות של מודל, המדיניות של פריסה, קרדיטים שנגמרו באמצע, סרטון קלט שנדחה ובקשה שהספק דחה כפי שנשלחה. בדקו אותו במקום לנתח את השדה error_message, למשל כדי להציע את המודל המומלץ.
מה פירוש השגיאה llm_model_unpriced?
התהליך או הבקשה מציינים מודל LLM שעדיין אין לו מחיר בשירות שבו הוא אמור לרוץ, ולכן אי אפשר להריץ אותו. התשובה היא 400 validation_error, עם השדה reason בערך llm_model_unpriced ועם השדה modelId. בחרו מודל אחר. לא נגבים קרדיטים.
למה נתיב מחזיר 403 in_app_only?
הנתיב קיים רק בשביל הסשן של אפליקציית הווב של Nodaro, למשל ה-Copilot או פרטי הגישה השמורים לרכיב פלט Webhook. אסימוני API ואסימוני OAuth לא יכולים לקרוא לו. השתמשו במקום זאת בנקודות הקצה של התהליכים, ב-SDK או ב-MCP.
דפים קשורים
משימות
מגבלות קצב
אימות
קרדיטים
SDK ל-TypeScript
עודכן לאחרונה