Construyendo una cola de trabajos de vídeo con IA en TypeScript
La generación de vídeo con IA no es una solicitud HTTP estándar. Un usuario envía un prompt y una configuración. El resultado tarda minutos en llegar.
Tu backend debe gestionar varios pasos:
- Validar la entrada.
- Crear un registro de trabajo.
- Enviar el trabajo a un proveedor.
- Realizar polling para obtener resultados.
- Gestionar fallos.
- Mostrar el estado al usuario.
Deberías utilizar una cola y una capa de adaptación. Esto evita que el código específico de un proveedor rompa toda tu aplicación.
Define un tipo de trabajo central para que actúe como el contrato de tu producto.
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;
};
Utiliza una interfaz para tus proveedores. Esto mantiene limpia la lógica de tu worker.
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;
}
Sigue estas mejores prácticas para tu flujo de trabajo:
Realiza primero comprobaciones económicas. Valida los prompts y las duraciones antes de llamar a APIs costosas.
Utiliza una estrategia de polling. Implementa un bucle con retrasos incrementales.
Gestiona los retrasos. Si un trabajo tarda demasiado, cámbialo al estado "delayed". Utiliza un worker separado para revisar los trabajos retrasados más tarde.
Normaliza los errores. Nunca muestres errores brutos del proveedor a tus usuarios. Mapea los errores técnicos a mensajes legibles para humanos.
Ejemplos de mensajes para el usuario:
- "queued": Tu vídeo está esperando para comenzar.
- "running": Tu vídeo se está generando.
- "delayed": Esto está tardando más de lo habitual.
- "moderation_rejected": Esta solicitud no pudo ser procesada.
Trata el vídeo con IA como un sistema de trabajos. Una cola estable y una taxonomía de errores clara hacen que tu producto sea más fácil de mantener y escalar.
Fuente: https://dev.to/miao_cunhui_587ccddb6acc1/building-an-ai-video-job-queue-in-typescript-1349