Exemples optionnels

Flux de génération d’image à cinq crédits

Suivez une tâche payante asynchrone à travers auth, droits, crédits idempotents, worker durable, stockage privé et compensation.

Vérifié avec le commit b16b416.

La génération d’image est l’exemple minimal d’un flux payant de forme production. Le fournisseur local génère un SVG sans appeler de modèle commercial ; la valeur est la chaîne autour. Chaque requête acceptée coûte exactement cinq crédits mutualisés.

ENABLE_DEMO_FEATURES=true
ENABLE_IMAGE_GENERATION_MOCK=true
IMAGE_GENERATION_MOCK_FAILURES=0

Lancez pnpm dev:all, connectez-vous avec le compte démo et ouvrez /fr/tasks/image-generation. L’UI garde une clé idempotente et interroge l’état tenant-scoped.

  1. L’API vérifie origine, limite, auth, tasks.image_generation et quota mensuel.
  2. (user_uuid, type, idempotency_key) identifie la tâche ; une empreinte refuse un autre prompt avec la même clé.
  3. task_image:<task uuid> identifie la dépense de cinq crédits ; les rejeux concurrents retournent le débit existant.
  4. task_image_generation:<task uuid> déduplique le job et répare une panne entre tâche, dépense et distribution.
  5. Le worker appelle le fournisseur avec un UUID stable, écrit et vérifie un objet Garage/S3 privé, puis active le fichier.
  6. La lecture signe une URL courte après résolution du fichier dans l’organisation.
pending_payment → queued → running → succeeded
                           ↘ refunding → failed

Le fournisseur a cinq essais et le job huit, réservant trois essais à la compensation. L’échec terminal passe en refunding, écrit un remboursement déterministe, puis seulement en failed. Le rejeu ne double ni fournisseur ni remboursement.

Utilisez IMAGE_GENERATION_MOCK_FAILURES=5 pour tester l’échec. La base réelle prouve une dépense et un remboursement ; Playwright prouve rejeu, variation exacte de cinq crédits, worker, Garage et téléchargement signé.

Implémentez le fournisseur réel dans src/services/ai/image.ts en conservant la clé idempotente, AbortSignal et les contrats de tâche, crédit, job, stockage et erreur. Les identifiants et types du SDK restent dans l’adaptateur.

Remplacer l’adaptateur ne suffit pas à activer la génération en production. La page, la route API et le service de tâches vérifient isImageGenerationMockEnabled(), toujours false en production. Remplacez ces contrôles d’admission de démonstration par une configuration explicite de la fonction de production, en conservant les vérifications d’origine, authentification, droits, quotas et crédits.

Le type GeneratedImage actuel accepte uniquement image/svg+xml, l’extension svg et le fournisseur mock. Définissez et validez les types de sortie, extensions, identité du fournisseur et métadonnées de fichier autorisés avant d’accepter ses octets. Testez l’admission en production, les reprises, la livraison privée et la compensation.

Liens : Registre de crédits, Stockage privé, Jobs durables, Tests et CI.