Створення черги завдань для AI-відео на TypeScript
Генерація AI-відео — це не стандартний HTTP-запит. Користувач надсилає промпт і налаштування. Отримання результату займає кілька хвилин.
Ваш бекенд має виконувати кілька кроків:
- Валідація вхідних даних.
- Створення запису про завдання.
- Надсилання завдання провайдеру.
- Опитування для отримання результатів.
- Обробка помилок.
- Відображення статусу користувачеві.
Вам слід використовувати чергу та шар адаптерів. Це запобігає ситуації, коли код, специфічний для конкретного провайдера, ламає весь ваш застосунок.
Визначте основний тип завдання, який слугуватиме контрактом вашого продукту.
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": Цей запит не вдалося обробити.
Розглядайте генерацію AI-відео як систему завдань. Стабільна черга та чітка таксономія помилок полегшують підтримку та масштабування вашого продукту.
Source: https://dev.to/miao_cunhui_587ccddb6acc1/building-an-ai-video-job-queue-in-typescript-1349