הרצות
בדיקת המצב של הרצת תהליך ב-REST API של Nodaro רכיב אחר רכיב, התוצאה של כל רכיב, ההרצות הקודמות של תהליך וביטול הרצה.
רשומת הרצה מייצגת הרצה אחת של תהליך שלם. היא מתעדת את הסטטוס של ההרצה, כמה רכיבים כבר הסתיימו, כמה קרדיטים הוצאו ואת המצב והתוצאה של כל רכיב, והיא מקבצת את המשימות שההרצה יצרה, אחת לכל רכיב AI. הנתיב POST /v1/workflows/:id/run מחזיר executionId, ובעזרת נקודות הקצה של רשומות ההרצה אפשר לבדוק את המצב של ההרצה הזו עד שהיא מסתיימת.
נקודות קצה
| שיטה | נתיב | מה היא עושה |
|---|---|---|
GET | /v1/workflow-executions/:id | הרצה אחת: הסטטוס שלה, ספירת הרכיבים, הקרדיטים והמצב של כל רכיב. |
GET | /v1/workflow-executions/:id/stream | אותה הרצה, כזרם של אירועי שרת (SSE). |
GET | /v1/workflows/:id/executions | ההרצות של תהליך אחד, בעמודים. |
POST | /v1/workflow-executions/:id/cancel | ביטול הרצה, מיד או אחרי שהרכיבים שרצים מסתיימים. |
GET | /v1/api/status/:execId | מסלול אסימוני ה-API: הסטטוס של הרצה, ספירת הרכיבים והקרדיטים שהוצאו. |
GET | /v1/api/result/:execId | מסלול אסימוני ה-API: הפלטים של הרצה שהסתיימה. |
שתי נקודות הקצה האחרונות שייכות להרצות שמתחילות עם POST /v1/api/run. הן מתוארות בדף ה-API תהליכים, בסעיף הרצת תהליך עם ערכי קלט חדשים.
קריאת הרצה
curl -s https://app.nodaro.ai/v1/workflow-executions/3f9e2b1a-7c6d-4e5f-8a9b-0c1d2e3f4a5b \
-H "Authorization: Bearer $NODARO_API_KEY"const { data } = await client.executions.get(executionId)
console.log(data.status, `${data.completedNodes}/${data.totalNodes}`)nodaro executions get 3f9e2b1a-7c6d-4e5f-8a9b-0c1d2e3f4a5b --json{
"data": {
"id": "3f9e2b1a-7c6d-4e5f-8a9b-0c1d2e3f4a5b",
"workflowId": "8c2d7f1e-3a4b-4c5d-9e6f-7a8b9c0d1e2f",
"status": "running",
"triggerType": "manual",
"totalNodes": 4,
"completedNodes": 2,
"failedNodes": 0,
"totalCreditsUsed": 45,
"errorMessage": null,
"nodeStates": {
"text-prompt-1": { "status": "completed", "output": { "text": "a knight on a hill at dawn" } },
"generate-image-1": { "status": "completed", "output": { "imageUrl": "https://…/knight.png" } },
"generate-video-1": { "status": "running" },
"add-captions-1": { "status": "pending" }
},
"completedAt": null
}
}| שדה | משמעות |
|---|---|
status | הסטטוס של ההרצה. ראו את הטבלה שלמטה. |
triggerType | מה התחיל את ההרצה, כגון manual, webhook, schedule, app_run או single-node. |
totalNodes, completedNodes, failedNodes | ספירת הרכיבים. הציגו את ההתקדמות כ-completedNodes / totalNodes. |
totalCreditsUsed | הקרדיטים שההרצה הוציאה עד כה. הסכום כולל את השלבים שהחיוב שלהם נסגר במשימה של כל רכיב, גם של רכיב שנכשל. שלב שהחיוב שלו נסגר אחרי שהרכיב שלו הסתיים נספר כשההרצה מסתיימת. |
errorMessage | הסבר מילולי למה ההרצה נכשלה או נעצרה. |
nodeStates | המצב של כל רכיב, כשהמפתח הוא מזהה הרכיב. |
completedAt | מתי ההרצה הסתיימה, או null. |
גם המזהה של משימה עצמאית של רכיב יחיד עובד כאן: השרת עונה באותו מבנה ומתאר את הרכיב האחד הזה. על מזהה שלא קיים או שלא שייך לכם, התגובה היא 404.
סטטוסים של הרצה
| סטטוס | סופי | משמעות |
|---|---|---|
pending | לא | ההרצה ממתינה בתור. |
running | לא | רכיבים רצים. |
stopping | לא | ביטלתם עם after_current: הרכיבים שרצים מסתיימים, ואז ההרצה נעצרת. |
completed | כן | ההרצה הסתיימה. |
failed | כן | ההרצה נכשלה. השדה errorMessage מסביר למה. |
cancelled | כן | ההרצה בוטלה. |
timed_out | כן | ההרצה חרגה מהזמן. |
discarded | כן | ביטלתם עם discard: המשימות שרצו הסתיימו בלי לעדכן את הקנבס. |
מצבי הרכיבים
לכל ערך ב-nodeStates יש status: pending, running, completed, failed או skipped. ברכיב שנכשל יש גם error. המצב של רכיב שדולג כי שום דבר לא הגיע לקלט שלו בהרצה הזו הוא { "status": "skipped", "skipReason": "empty_input" }. ברכיב שדולג בגלל מסלול לא פעיל של רכיב נתב אין skipReason. ראו בדף ה-API הרצות שלא מוצאות שום דבר חדש.
התוצאה של רכיב שהסתיים נמצאת ב-output. המפתחות נקבעים לפי הפלט של הרכיב: חפשו url, imageUrl, videoUrl, audioUrl, resultUrl או text, בסדר הזה.
גם ברכיב שנכשל יכול להיות output, כשההרצה שמרה תוצאה מובנית. כרגע זה קורה ברכיבים שבונים סצנות תלת־ממד: סצנה שהבדיקה החזותית שלה נכשלה גם אחרי כל התיקונים עדיין מפרסמת טיוטה, והרכיב נכשל כשהטיוטה הזו נמצאת ב-output.plan. מכאן נובעים שני כללים:
- בדקו אם השדה קיים, לא את הסטטוס. לרכיב בסטטוס
pendingאוrunningאף פעם איןoutput, וסוגי רכיבים אחרים עשויים לשמור תוצאות בעתיד. - גם כש-
outputקיים, זו לא הצלחה. הרכיב נכשל; הוא רק שמר משהו.
ה-SDK מייצא את הפונקציה nodeStateMayCarryOutput(status), שמחזירה true בסטטוסים completed ו-failed, ואת אותו זוג גם כקבוע OUTPUT_BEARING_NODE_STATUSES.
המתנה לסיום הרצה
בדקו את הסטטוס כל 2–5 שניות, עד שהוא סופי:
const { executionId } = await client.workflows.run(workflowId)
const final = ['completed', 'failed', 'cancelled', 'timed_out', 'discarded']
while (true) {
const { data } = await client.executions.get(executionId)
console.log(`${data.completedNodes}/${data.totalNodes} nodes done`)
if (final.includes(data.status)) {
if (data.status !== 'completed') throw new Error(`Run ${data.status}: ${data.errorMessage ?? 'no message'}`)
console.log(`Done. Used ${data.totalCreditsUsed} credits.`)
break
}
await new Promise((r) => setTimeout(r, 2_000))
}while true; do
STATUS=$(curl -s -H "Authorization: Bearer $NODARO_API_KEY" \
"https://app.nodaro.ai/v1/workflow-executions/$EXEC" | jq -r .data.status)
echo "Status: $STATUS"
case "$STATUS" in completed|failed|cancelled|timed_out|discarded) break;; esac
sleep 3
donenodaro executions get 3f9e2b1a-7c6d-4e5f-8a9b-0c1d2e3f4a5b --watchעם --watch, ה-CLI בודק את הסטטוס עד שההרצה מסתיימת, ויוצא עם קוד היציאה 0 כשההרצה מצליחה, 2 כשההרצה נכשלה ו-130 כשהיא בוטלה. עם --json, ה-CLI מדפיס את המטען ויוצא כרגיל, ולכן בדקו את .status בעצמכם.
הנתיב GET /v1/workflow-executions/:id/stream שולח את אותו מצב של ההרצה כאירועי שרת (SSE) כל עוד ההרצה בעיצומה, וחלים עליו אותם כללים לגבי ה-output של הרכיבים כמו על הקריאה שלמעלה. ברוב האינטגרציות, תשאול הוא הבחירה הפשוטה יותר.
רשימת ההרצות של תהליך
הנתיב GET /v1/workflows/:id/executions מחזיר את ההרצות של תהליך בעמודים, בצורה { data, nextCursor }. ברשימה מופיעות, לצד ההרצות המלאות של התהליך, גם המשימות העצמאיות של רכיב יחיד בתהליך הזה.
| פרמטר שאילתה | משמעות |
|---|---|
limit | גודל העמוד. |
cursor | הערך nextCursor מהעמוד הקודם. |
status | סטטוסים מופרדים בפסיקים, למשל pending,running. |
source | הערך editor לא כולל הרצות שאפליקציות, Webhooks ותזמונים התחילו. הערך all כולל אותן. |
curl -s "https://app.nodaro.ai/v1/workflows/$WORKFLOW_ID/executions?limit=20&status=completed" \
-H "Authorization: Bearer $NODARO_API_KEY"const { data, nextCursor } = await client.executions.listForWorkflow(workflowId, {
limit: 20,
status: 'completed',
})ביטול הרצה
הנתיב POST /v1/workflow-executions/:id/cancel עוצר הרצה. השדה האופציונלי mode בגוף הבקשה קובע מה קורה לרכיבים שכבר רצים:
mode | מה קורה | סטטוס סופי |
|---|---|---|
| אין | ההרצה נעצרת מיד. המשימות שרצות מבוטלות, והקרדיטים המשוריינים שלהן מוחזרים. | cancelled |
after_current | הרכיבים שרצים מסתיימים, והתוצאות שלהם מופיעות על הקנבס ובספרייה שלכם. אחר כך ההרצה נעצרת. | stopping, ואחריו סטטוס סופי |
discard | שום רכיב חדש לא מתחיל. אי אפשר לעצור אצל המודל משימות שכבר רצות, ולכן הן מסתיימות ונשמרות בספרייה שלכם, אבל התוצאות שלהן לא נכתבות על הקנבס. הקרדיטים לא מוחזרים, כי המשימות האלה הושלמו. | discarded |
התגובה היא { "success": true }.
curl -s -X POST https://app.nodaro.ai/v1/workflow-executions/$EXEC/cancel \
-H "Authorization: Bearer $NODARO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode": "after_current"}'await client.executions.cancel(executionId) // now
await client.executions.cancel(executionId, { mode: 'after_current' }) // after running nodes
await client.executions.cancel(executionId, { mode: 'discard' }) // stop schedulingnodaro executions cancel 3f9e2b1a-7c6d-4e5f-8a9b-0c1d2e3f4a5b # now
nodaro executions cancel 3f9e2b1a-7c6d-4e5f-8a9b-0c1d2e3f4a5b --mode stopping # after running nodesכדי לעצור יצירה אחת ולא הרצה שלמה, בטלו את המשימה שלה: ראו בדף ה-API משימות.
הרצות ומשימות
כל רכיב AI בהרצה יוצר משימה, והתוצאה של כל רכיב מופיעה ב-nodeStates כשהמשימה שלו מסתיימת. בדקו את רשומת ההרצה כדי לדעת מה המצב של ההרצה כולה. בדקו משימה כדי לקבל את הפרטים של יצירה אחת: ה-error_hint שלה, ה-credit_status שלה, או כל מה שנשלח למודל ב-input_data.
הרצות שטריגר מתחיל, כגון קריאה לרכיב טריגר Webhook או הרצה שרכיב טריגר מתוזמן מתחיל, מקבלות גם הן רשומת הרצה, עם triggerType שערכו webhook או schedule. ראו את דף ה-API Webhooks.
שאלות נפוצות
מה ההבדל בין רשומת הרצה למשימה?
רשומת הרצה מייצגת הרצה אחת של תהליך שלם. היא מתעדת את המצב של כל רכיב ומקבצת את המשימות שההרצה יצרה, אחת לכל רכיב AI. משימה היא יצירה אחת, כגון תמונה אחת או רינדור אחד של סרטון.
איך מקבלים את הסטטוס של הרצת תהליך?
בדקו את הסטטוס כל 2–5 שניות עם הנתיב GET /v1/workflow-executions/:id. נקודת הקצה מחזירה את הסטטוס של ההרצה, כמה רכיבים הסתיימו וכמה נכשלו, כמה קרדיטים הוצאו עד כה ואת המצב של כל רכיב. הפסיקו כשהסטטוס הוא completed, failed, cancelled, timed_out או discarded.
איך מבטלים הרצת תהליך?
כדי לבטל הרצה, שלחו בקשה לנתיב POST /v1/workflow-executions/:id/cancel. בלי השדה mode, הבקשה מבטלת את ההרצה מיד, והקרדיטים המשוריינים מוחזרים. כש-mode הוא after_current, הרכיבים שרצים מסתיימים קודם. כש-mode הוא discard, המשימות שרצות מסתיימות, אבל רכיבים חדשים לא מתחילים.
איפה נמצאת התוצאה של רכיב ברשומת ההרצה?
ברשומת ההרצה, כל רכיב מופיע בשדה nodeStates, תחת המזהה שלו. התוצאה של רכיב שהסתיים נמצאת בשדה output, למשל output.imageUrl, output.videoUrl, output.audioUrl או output.text.
האם אפשר לקבל את רשימת ההרצות הקודמות של תהליך?
כן. הנתיב GET /v1/workflows/:id/executions מחזיר את ההרצות של התהליך בעמודים, ואפשר לסנן אותן לפי סטטוס ולפי המקום שממנו הן התחילו.
דפים קשורים
תהליכים
משימות
ה-API של Webhooks
הרצת תהליכים
שגיאות
עודכן לאחרונה