テキストから動画を生成するタスクの実装例
組織のエンタイトルメント、利用上限、クレジット、冪等性、返却処理を備えた任意のデモを拡張します。
スターターのコミット
2a1a04aと同期済みです。
これは従量制の AI 機能を作るための実装例であり、そのまま販売できる動画製品ではありません。ローカルだけで使える模擬 UI と、テナント分離、エンタイトルメント、月次上限、共有クレジット、冪等性、失敗処理、クレジット返却を提供します。本番環境ではデモ用設定を無視するため、クローンしただけでは動画生成は有効になりません。
実際の生成サービスとの契約を決める
src/services/ai/video.tsのアダプターを置き換え、生成サービス固有のコードをルートには置きません。- 同梱の模擬処理は一つのリクエスト内で完了します。長い処理は永続ジョブにし、外部ジョブ ID を保存し、コールバックを検証し、外部サービスへのリクエストも冪等にします。
- 1秒あたり1クレジット、縦横比の倍率、プランでの利用可否、月間タスク上限、付与クレジットを見直します。これは製品採算の例であり、価格の提案ではありません。
本番準備完了の条件: 本番環境に模擬処理がなく、重複リクエストからはタスクとクレジット消費が一つだけ作られ、残高不足を利用者へ説明でき、外部サービスの失敗に対するクレジット返却は一回だけで、コールバックが組織境界を越えず、UI が queued、running、failed を示すことです。
この画面は任意で有効にする開発用の実装例であり、本番用の AI 生成サービスではありません。デモとテキスト動画の模擬処理を有効にした場合だけ使え、本番環境ではデモ用設定を無視します。実際の生成サービスを使う場合は、src/services/ai/video.ts のアダプターだけを置き換えます。
POST /api/tasks/text-to-video は、同一オリジン、アクセス頻度制限、認証、組織の tasks.text_to_video エンタイトルメント、共有月次上限、クレジットを要求します。ヘッダーまたは本文に Idempotency-Key を渡します。組織のタスクを一度だけ追加し、クレジットと元取引を記録して、生成サービスの成功結果を保存します。失敗時は状態を failed にし、補償する返却行を追加します。
費用は src/config/tasks.ts で定義します。Plus は組織あたり月50タスク・500クレジット、Max はタスク数無制限・2,500クレジット、Free は対象外です。GET /api/tasks/[uuid] は組織の範囲に限定されます。
長時間かかる生成サービスでは、不変条件を保ちながら永続的な非同期実行、外部サービス側の冪等性、コールバック検証、外部 ID の保存を行います。重複実行、残高不足、タイムアウト、コールバックの再処理、クレジット返却の失敗をテストしてください。料金と上限はプランと権限、消費と返却は組織のクレジット台帳、非同期処理は永続ジョブと稼働準備で確認できます。 新しい非同期有料機能は5 クレジット画像生成から始めてください。回復可能な task/spend/job identity、private output、bounded retry、1 回だけの terminal compensation を持つ現在の durable reference です。Text-to-video は小さな synchronous adapter example として残ります。