Создание очереди задач для ИИ-видео на TypeScript
Генерация ИИ-видео — это не стандартный HTTP-запрос. Пользователь отправляет промпт и настройки, а получение результата может занять несколько минут.
Ваш бэкенд должен выполнять несколько этапов:
- Валидация входных данных.
- Создание записи о задаче.
- Отправка задачи провайдеру.
- Опрос (polling) для получения результатов.
- Обработка ошибок.
- Отображение статуса пользователю.
Вам следует использовать очередь и слой адаптеров. Это предотвратит поломку всего приложения из-за специфического кода конкретного провайдера.
Определите основной тип задачи, который будет служить контрактом вашего продукта.
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 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;
}
Следуйте этим рекомендациям при построении рабочего процесса:
Сначала выполняйте «дешевые» проверки. Валидируйте промпты и длительность перед вызовом дорогостоящих API.
Используйте стратегию опроса (polling). Реализуйте цикл с увеличивающимися задержками.
Обрабатывайте задержки. Если задача выполняется слишком долго, переведите её в статус "delayed". Используйте отдельный воркер для последующей проверки задержанных задач.
Нормализуйте ошибки. Никогда не показывайте пользователям «сырые» ошибки провайдера. Преобразуйте технические ошибки в понятные человеку сообщения.
Примеры сообщений для пользователя:
- "queued": Ваше видео ожидает начала генерации.
- "running": Ваше видео генерируется.
- "delayed": Это занимает больше времени, чем обычно.
- "moderation_rejected": Этот запрос не может быть обработан.
Относитесь к генерации ИИ-видео как к системе задач. Стабильная очередь и четкая таксономия ошибок сделают ваш продукт более простым в обслуживании и масштабировании.
Источник: https://dev.to/miao_cunhui_587ccddb6acc1/building-an-ai-video-job-queue-in-typescript-1349