ساخت یک صف پردازش ویدیو با هوش مصنوعی در TypeScript

تولید ویدیو با هوش مصنوعی یک درخواست HTTP استاندارد نیست. کاربر یک پرامپت (prompt) و تنظیمات را ارسال می‌کند و رسیدن نتیجه چندین دقیقه طول می‌کشد.

بک‌اند شما باید چندین مرحله را مدیریت کند:

  • اعتبارسنجی ورودی.
  • ایجاد یک رکورد برای کار (job).
  • ارسال کار به یک ارائه‌دهنده (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 logic) شما را تمیز نگه می‌دارد.

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;
}

برای گردش کار (workflow) خود، این بهترین روش‌ها را دنبال کنید:

۱. ابتدا بررسی‌های کم‌هزینه را انجام دهید. قبل از فراخوانی APIهای گران‌قیمت، پرامپت‌ها و مدت‌زمان‌ها را اعتبارسنجی کنید.

۲. از یک استراتژی polling استفاده کنید. یک حلقه با تأخیرهای افزایشی پیاده‌سازی کنید.

۳. تأخیرها را مدیریت کنید. اگر یک کار بیش از حد طول کشید، وضعیت آن را به "delayed" تغییر دهید. از یک ورکر مجزا برای بررسی کارهای معوق (delayed) در زمان‌های بعدی استفاده کنید.

۴. خطاها را نرمال‌سازی کنید. هرگز خطاهای خامِ ارائه‌دهنده را به کاربران خود نشان ندهید. خطاهای فنی را به پیام‌های قابل فهم برای انسان نگاشت (map) کنید.

نمونه پیام‌های کاربر:

  • "queued": ویدیوی شما در انتظار شروع است.
  • "running": ویدیوی شما در حال تولید است.
  • "delayed": این فرآیند بیش از حد معمول طول می‌کشد.
  • "moderation_rejected": این درخواست قابل پردازش نبود.

با ویدیوی هوش مصنوعی مانند یک سیستم مدیریت کار (job system) برخورد کنید. یک صف پایدار و طبقه‌بندی شفاف از خطاها، نگهداری و مقیاس‌پذیری محصول شما را آسان‌تر می‌کند.

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