בניית תור משימות (Job Queue) לווידאו מבוסס AI ב-TypeScript

יצירת וידאו באמצעות AI אינה בקשת HTTP סטנדרטית. משתמש שולח הנחיה (prompt) והגדרות, והתוצאה לוקחת דקות עד שהיא מגיעה.

ה-backend שלך חייב לטפל במספר שלבים:

  • אימות קלט.
  • יצירת רשומת משימה (job record).
  • שליחת המשימה לספק (provider).
  • ביצוע polling לקבלת תוצאות.
  • טיפול בכשלים.
  • הצגת סטטוס למשתמש.

כדאי להשתמש בתור (queue) ובשכבת מתאם (adapter layer). זה מונע מקוד ספציפי לספק לשבור את האפליקציה כולה.

הגדר סוג משימה (job type) ליבה שישמש כחוזה המוצר שלך.

type JobStatus = "queued" | "validating" | "running" | "delayed" | "succeeded" | "failed";

type VideoJob = {
  id: string;
  userId: string;
  model: string;
  prompt: string;
  aspectRatio: "16:9" | "9:16" | "1:1";
  durationSeconds: number;
  status: JobStatus;
  providerTaskId?: string;
  outputUrl?: string;
  errorCode?: VideoJobErrorCode;
};

השתמש ב-interface עבור הספקים שלך. זה שומר על לוגיקת ה-worker שלך נקייה.

interface VideoProvider {
  submit(job: VideoJob): Promise<{ providerTaskId: string }>;
  poll(providerTaskId: string): Promise<
    | { status: "running" }
    | { status: "succeeded"; outputUrl: string }
    | { status: "failed"; error: unknown }
  >;
  normalizeError(error: unknown): VideoJobErrorCode;
}

פעל לפי שיטות העבודה המומלצות (best practices) הבאות עבור תהליך העבודה שלך:

  1. בצע בדיקות "זולות" תחילה. אמת הנחיות (prompts) ומשכי זמן לפני קריאה ל-APIs יקרים.

  2. השתמש באסטרטגיית polling. ממש לולאה עם השהיות הולכות וגדלות.

  3. טפל בעיכובים. אם משימה לוקחת זמן רב מדי, העבר אותה לסטטוס "delayed". השתמש ב-worker נפרד כדי לבדוק משימות שנדחו מאוחר יותר.

  4. נרמל שגיאות (Normalize errors). לעולם אל תציג למשתמשים שגיאות גולמיות מהספק. מיפוי שגיאות טכניות להודעות קריאות לבני אדם.

דוגמאות להודעות למשתמש:

  • "queued": הווידאו שלך ממתין להתחלה.
  • "running": הווידאו שלך נמצא בתהליך יצירה.
  • "delayed": זה לוקח יותר זמן מהרגיל.
  • "moderation_rejected": לא ניתן היה לעבד בקשה זו.

התייחס לווידאו מבוסס AI כמערכת משימות (job system). תור יציב וטקסונומיית שגיאות ברורה יהפכו את המוצר שלך לקל יותר לתחזוקה ולהרחבה (scale).

Source: https://dev.to/miao_cunhui_587ccddb6acc1/building-an-ai-video-job-queue-in-typescript-1349