Construire une file d'attente de tâches vidéo IA en TypeScript
La génération de vidéos par IA n'est pas une requête HTTP standard. Un utilisateur envoie un prompt et des paramètres. Le résultat met plusieurs minutes à arriver.
Votre backend doit gérer plusieurs étapes :
- Valider l'entrée.
- Créer un enregistrement de tâche.
- Soumettre la tâche à un fournisseur.
- Effectuer un polling pour obtenir les résultats.
- Gérer les échecs.
- Afficher le statut à l'utilisateur.
Vous devriez utiliser une file d'attente et une couche d'adaptation (adapter layer). Cela empêche le code spécifique à un fournisseur de casser l'ensemble de votre application.
Définissez un type de tâche central pour servir de contrat produit.
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;
};
Utilisez une interface pour vos fournisseurs. Cela permet de garder votre logique de worker propre.
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;
}
Suivez ces bonnes pratiques pour votre flux de travail :
Effectuez d'abord des vérifications peu coûteuses. Validez les prompts et les durées avant d'appeler des API coûteuses.
Utilisez une stratégie de polling. Implémentez une boucle avec des délais croissants.
Gérez les délais. Si une tâche prend trop de temps, passez-la au statut « delayed ». Utilisez un worker séparé pour vérifier les tâches différées plus tard.
Normalisez les erreurs. Ne montrez jamais les erreurs brutes du fournisseur à vos utilisateurs. Mappez les erreurs techniques vers des messages lisibles par l'humain.
Exemples de messages utilisateur :
"queued": Votre vidéo est en attente de démarrage."running": Votre vidéo est en cours de génération."delayed": Cela prend plus de temps que d'habitude."moderation_rejected": Cette requête n'a pas pu être traitée.
Traitez la vidéo IA comme un système de tâches. Une file d'attente stable et une taxonomie d'erreurs claire rendent votre produit plus facile à maintenir et à faire évoluer.
Source: https://dev.to/miao_cunhui_587ccddb6acc1/building-an-ai-video-job-queue-in-typescript-1349