TypeScript માં AI વિડિયો જોબ ક્યુ બનાવવી

AI વિડિયો જનરેશન એ સ્ટાન્ડર્ડ HTTP રિક્વેસ્ટ નથી. વપરાશકર્તા પ્રોમ્પ્ટ અને સેટિંગ્સ મોકલે છે. પરિણામ આવતા મિનિટો લાગે છે.

તમારા બેકએન્ડને આ મુજબના કેટલાક સ્ટેપ્સ હેન્ડલ કરવા જોઈએ:

  • ઇનપુટ વેલિડેટ કરો.
  • જોબ રેકોર્ડ બનાવો.
  • પ્રોવાઈડરને જોબ સબમિટ કરો.
  • પરિણામો માટે પોલિંગ (poll) કરો.
  • નિષ્ફળતાઓને હેન્ડલ કરો.
  • વપરાશકર્તાને સ્ટેટસ બતાવો.

તમારે ક્યુ (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;
}

તમારા વર્કફ્લો માટે આ બેસ્ટ પ્રેક્ટિસિસ અનુસરો:

  1. પહેલા સસ્તા (cheap) ચેક્સ કરો. મોંઘી APIs કોલ કરતા પહેલા પ્રોમ્પ્ટ અને ડ્યુરેશન વેલિડેટ કરો.

  2. પોલિંગ સ્ટ્રેટેજીનો ઉપયોગ કરો. વધતા જતા વિલંબ (delays) સાથે લૂપ અમલમાં મૂકો.

  3. વિલંબને હેન્ડલ કરો. જો કોઈ જોબમાં વધુ સમય લાગે, તો તેને "delayed" સ્ટેટસમાં ખસેડો. વિલંબિત જોબ્સને પછીથી તપાસવા માટે અલગ વર્કરનો ઉપયોગ કરો.

  4. એરર્સને નોર્મલાઈઝ કરો. તમારા વપરાશકર્તાઓને ક્યારેય પ્રોવાઈડરના રો (raw) એરર્સ ન બતાવો. ટેકનિકલ એરર્સને માનવ-વાંચનક્ષમ (human-readable) મેસેજમાં મેપ કરો.

ઉદાહરણ તરીકે વપરાશકર્તાના મેસેજ:

  • "queued": તમારો વિડિયો શરૂ થવાની રાહ જોઈ રહ્યો છે.
  • "running": તમારો વિડિયો જનરેટ થઈ રહ્યો છે.
  • "delayed": આમાં સામાન્ય કરતા વધુ સમય લાગી રહ્યો છે.
  • "moderation_rejected": આ રિક્વેસ્ટ પ્રોસેસ કરી શકાય તેમ નથી.

AI વિડિયોને જોબ સિસ્ટમ તરીકે ગણો. એક સ્ટેબલ ક્યુ અને સ્પષ્ટ એરર ટેક્સનોમી (error taxonomy) તમારા પ્રોડક્ટને મેન્ટેન અને સ્કેલ કરવામાં સરળ બનાવશે.

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