TypeScriptలో ఒక AI వీడియో జాబ్ క్యూను నిర్మించడం

AI వీడియో జనరేషన్ అనేది ఒక సాధారణ HTTP రిక్వెస్ట్ కాదు. వినియోగదారు ఒక ప్రాంప్ట్ మరియు సెట్టింగ్‌లను పంపుతారు. ఫలితం రావడానికి కొన్ని నిమిషాల సమయం పడుతుంది.

మీ బ్యాకెండ్ ఈ క్రింది దశలను నిర్వహించాలి:

  • ఇన్‌పుట్‌ను ధృవీకరించడం (Validate input).
  • జాబ్ రికార్డ్‌ను సృష్టించడం.
  • జాబ్‌ను ప్రొవైడర్‌కు సమర్పించడం.
  • ఫలితాల కోసం పోలింగ్ (Poll) చేయడం.
  • వైఫల్యాలను నిర్వహించడం.
  • వినియోగదారుకు స్టేటస్‌ను చూపించడం.

మీరు ఒక క్యూ (queue) మరియు అడాప్టర్ లేయర్‌ను ఉపయోగించాలి. ఇది ప్రొవైడర్‌కు సంబంధించిన కోడ్ వల్ల మీ మొత్తం యాప్ పాడవకుండా నిరోధిస్తుంది.

మీ ప్రొడక్ట్ కాంట్రాక్ట్‌గా పనిచేయడానికి ఒక కోర్ జాబ్ టైప్‌ను (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. మొదట తక్కువ ఖర్చుతో కూడిన తనిఖీలు చేయండి. ఖరీదైన APIలను పిలవడానికి ముందే ప్రాంప్ట్‌లు మరియు వ్యవధులను (durations) ధృవీకరించండి.

  2. పోలింగ్ వ్యూహాన్ని (polling strategy) ఉపయోగించండి. పెరుగుతున్న ఆలస్యాలతో (increasing delays) ఒక లూప్‌ను అమలు చేయండి.

  3. ఆలస్యాలను నిర్వహించండి. ఒక జాబ్ తీసుకోవడానికి చాలా సమయం పడితే, దానిని "delayed" స్టేటస్‌కు మార్చండి. ఆలస్యమైన జాబ్‌లను తదుపరి తనిఖీ చేయడానికి ఒక ప్రత్యేక వర్కర్‌ను ఉపయోగించండి.

  4. ఎర్రర్‌లను నార్మలైజ్ చేయండి. ప్రొవైడర్ నుండి వచ్చే ముడి (raw) ఎర్రర్‌లను ఎప్పుడూ మీ వినియోగదారులకు చూపించకండి. సాంకేతిక ఎర్రర్‌లను మనుషులు చదవగలిగే సందేశాలుగా మార్చండి.

ఉదాహరణ వినియోగదారు సందేశాలు:

  • "queued": మీ వీడియో ప్రారంభం కావడానికి వేచి ఉంది.
  • "running": మీ వీడియో జనరేట్ అవుతోంది.
  • "delayed": దీనికి సాధారణం కంటే ఎక్కువ సమయం పడుతోంది.
  • "moderation_rejected": ఈ రిక్వెస్ట్‌ను ప్రాసెస్ చేయలేకపోయాము.

AI వీడియోను ఒక జాబ్ సిస్టమ్‌గా పరిగణించండి. స్థిరమైన క్యూ మరియు స్పష్టమైన ఎర్రర్ టాక్సోనమీ (error taxonomy) మీ ప్రొడక్ట్‌ను నిర్వహించడం మరియు స్కేల్ చేయడం సులభతరం చేస్తాయి.

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