Workflow SDK 5 : les longs jobs IA ont besoin d’un contrat d’annulation

Tech

Un job IA long devient risqué quand l’équipe ne sait plus ce qui continue après l’annulation. L’utilisateur ferme la demande, le modèle tourne encore; le timeout gagne, mais un upload finit; une limite de quota se déclenche, puis un retry coûte davantage.

Le 16 juin 2026, Vercel a annoncé que Workflow SDK 5 beta supporte AbortController et AbortSignal à travers les frontières workflow/step. Avec des sandboxes pouvant durer 24 heures, les workflows durables doivent aussi savoir s’arrêter précisément.

Schéma montrant un signal AbortController transmis à des étapes Workflow SDK puis déclenché par timeout, annulation utilisateur ou limite de quota
Le vrai changement est un contrat d’exploitation: quelle étape reçoit le signal, comment elle s’arrête et quelle trace elle laisse.

Ce qui change

Un workflow crée un AbortController, transmet son signal aux steps et appelle abort() après un timeout, une course, un hook ou une règle de quota. Le signal est durable à travers suspensions, replays déterministes et invocations séparées.

L’annulation est coopérative: le step doit passer le signal à fetch, appeler signal.throwIfAborted(), vérifier signal.aborted ou écouter l’événement.

Pourquoi c’est important

Les workflows OCR, rapports, agents multi-modèles, automatisation navigateur et tests longs bénéficient de fenêtres plus larges. Sans contrat d’annulation, on obtient des coûts, des ressources bloquées et des états flous.

Les discussions communautaires sur production-ready et cleanup confirment que le sujet est l’exploitation.

Impact

Les timeouts deviennent des règles produit. Les tâches parallèles peuvent stopper les perdants. Les erreurs d’abort évitent les retries inutiles et clarifient les incidents.

Checklist

Définir utilisateur, timeout, admin, quota, parent request.

Propager le signal dans chaque step coûteux.

Séparer run.cancel() et AbortSignal.

Stocker cancelled_by_user, timed_out, quota_exceeded.

Tester les effets partiels externes.

Risques

SDK 5 est beta/pre-release: commencer petit, verrouiller les versions, prévoir rollback.

AbortSignal n’annule pas magiquement les side effects distants.

Action

Cartographiez les étapes qui coûtent, mutent l’extérieur ou ne doivent pas être rejouées avant d’adopter l’API.

Vérification en 30 minutes

Les raisons d’annulation sont nommées

Chaque étape coûteuse reçoit ou vérifie un signal

Abort et retry sont cohérents

Les effets externes ont des clés d’idempotence

L’observabilité distingue cancelled et failed

const controller = new AbortController();
const result = await Promise.race([
  expensiveStep(controller.signal),
  sleep("30s").then(() => null),
]);
if (result === null) controller.abort();

Sources et références