TypeScript में एक AI वीडियो जॉब क्यू (Queue) बनाना

AI वीडियो जनरेशन कोई मानक HTTP रिक्वेस्ट नहीं है। एक यूजर प्रॉम्प्ट और सेटिंग्स भेजता है। परिणाम आने में मिनटों का समय लगता है।

आपके बैकएंड को कई चरणों को संभालना होगा:

  • इनपुट को वैलिडेट करना।
  • जॉब रिकॉर्ड बनाना।
  • जॉब को प्रोवाइडर के पास सबमिट करना।
  • परिणामों के लिए पोलिंग (polling) करना।
  • विफलताओं (failures) को संभालना।
  • यूजर को स्टेटस दिखाना।

आपको एक क्यू (queue) और एक एडॉप्टर लेयर (adapter layer) का उपयोग करना चाहिए। यह प्रोवाइडर-विशिष्ट कोड को आपके पूरे ऐप को खराब करने से रोकता है।

अपने प्रोडक्ट कॉन्ट्रैक्ट के रूप में कार्य करने के लिए एक कोर जॉब टाइप (core 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) का उपयोग करें। यह आपके वर्कर लॉजिक को साफ रखता है।

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. पहले सस्ते चेक (cheap checks) करें। महंगे APIs को कॉल करने से पहले प्रॉम्प्ट और ड्यूरेशन को वैलिडेट करें।

  2. पोलिंग स्ट्रैटेजी (polling strategy) का उपयोग करें। बढ़ते हुए डिले (delays) के साथ एक लूप लागू करें।

  3. डिले (delays) को संभालें। यदि किसी जॉब में बहुत अधिक समय लगता है, तो उसे "delayed" स्टेटस में ले जाएं। बाद में डिले हुए जॉब्स की जांच करने के लिए एक अलग वर्कर का उपयोग करें।

  4. एरर्स को नॉर्मलाइज़ (normalize) करें। अपने यूजर्स को कभी भी रॉ (raw) प्रोवाइडर एरर्स न दिखाएं। तकनीकी एरर्स को मानव-पठनीय (human-readable) संदेशों में मैप करें।

उदाहरण यूजर संदेश:

  • "queued": आपका वीडियो शुरू होने का इंतज़ार कर रहा है।
  • "running": आपका वीडियो जनरेट किया जा रहा है।
  • "delayed": इसमें सामान्य से अधिक समय लग रहा है।
  • "moderation_rejected": इस रिक्वेस्ट को प्रोसेस नहीं किया जा सका।

AI वीडियो को एक जॉब सिस्टम की तरह मानें। एक स्थिर क्यू (queue) और स्पष्ट एरर टैक्सोनॉमी (error taxonomy) आपके प्रोडक्ट को मेंटेन और स्केल करना आसान बनाती है।

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