Создание очереди задач для генерации ИИ-видео на TypeScript

Генерация ИИ-видео — это не стандартный HTTP-запрос. Пользователь отправляет промпт и настройки, а результат приходит спустя несколько минут.

Ваш бэкенд должен обрабатывать множество задач: валидировать входные данные, создавать задачи, взаимодействовать с провайдерами, опрашивать их на предмет готовности результата и обрабатывать ошибки.

Надежный рабочий процесс состоит из шести этапов:

  • Валидация промпта и настроек.
  • Проверка загруженных ассетов.
  • Создание записи о задаче в вашей базе данных.
  • Отправка задачи провайдеру.
  • Опрос провайдера до тех пор, пока видео не будет готово.
  • Форматирование результата для вашего UI.

Не позволяйте API провайдеров управлять всем вашим приложением. Используйте слой адаптеров, чтобы сохранить стабильность системы. Это позволит вам переключаться между провайдерами без переписывания основной логики.

Создайте централизованный тип задачи (job type), который будет служить контрактом вашего продукта. Каждый провайдер должен преобразовывать свои данные в этот формат.

Определите интерфейс VideoProvider с тремя методами:

  • submit: отправка задачи провайдеру.
  • poll: проверка завершения задачи.
  • normalizeError: преобразование ошибок провайдера в ваши собственные коды ошибок.

Это изолирует различия между провайдерами от вашей логики биллинга и пользовательского интерфейса.

Всегда сначала выполняйте «дешевые» проверки. Валидируйте промпты и длительность видео до того, как тратить деньги на вызовы API.

При создании воркера используйте стратегию опроса с увеличивающимися интервалами задержки. Если задача выполняется слишком долго, переведите её в статус delayed. Не позволяйте задачам бесконечно находиться в состоянии running. Используйте отдельный процесс для последующей проверки таких отложенных задач.

Ваш интерфейс никогда не должен показывать «сырые» ошибки провайдера. Сопоставляйте ваши внутренние коды ошибок с понятными сообщениями для пользователей:

  • queued: Ваше видео ожидает начала генерации.
  • running: Ваше видео генерируется.
  • delayed: Это занимает больше времени, чем обычно.
  • moderation_rejected: Попробуйте изменить промпт или ассеты.
  • provider_timeout: Провайдер не вернул результат вовремя.

Понятные сообщения уменьшают количество обращений в поддержку и помогают пользователям понять, что произошло.

Относитесь к генерации ИИ-видео как к системе задач. Стабильная очередь и грамотная таксономия ошибок сделают ваш продукт более простым в обслуживании.

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

Optional learning community: https://t.me/GyaanSetuAi