Workflow SDK 5: uzun AI işleri için açık bir iptal sözleşmesi gerekiyor
Uzun AI işlerinde sorun sadece beklemek değildir. Asıl sorun iptalden sonra neyin çalışmaya devam ettiğini açıklayamamaktır. Model çağrısı sürebilir, upload timeout sonrası bitebilir, retry kota sonrası daha fazla maliyet yaratabilir.
Vercel 16 Haziran 2026’da Workflow SDK 5 beta’nın workflow ve step sınırları arasında AbortController ve AbortSignal desteklediğini duyurdu. Daha uzun sandbox süreleriyle birlikte mesaj net: agent işleri daha uzun koşar, ama daha iyi durmalıdır.
Ne değişti
Workflow AbortController oluşturur, signal’ı step’lere geçirir ve timeout, race, hook veya kota kuralı ile abort() çağırır. Doküman signal’ın suspension, deterministic replay ve ayrı invocation boyunca durable olduğunu söyler.
İptal cooperative’tir: step signal’ı fetch/API’ye vermeli, throwIfAborted çağırmalı veya aborted kontrol etmelidir.
Neden önemli
OCR, rapor, browser automation, multi-model agent ve test pipeline uzun runtime ister. İptal sözleşmesi yoksa token, API, kilitli kaynak ve belirsiz durum maliyeti artar.
Toplulukta production-ready ve cleanup soruları operasyonel boşluğu gösteriyor.
Operasyon etkisi
Timeout ürün politikası olur. Paralel işler kaybedenleri iptal eder. Abort error retry edilmediğinde olay analizi netleşir.
Checklist
User, timeout, admin, kota, parent request nedenlerini ayırın.
Her pahalı step’e signal verin.
run.cancel() ile AbortSignal farkını koruyun.
cancelled_by_user, timed_out, quota_exceeded saklayın.
Harici cleanup test edin.
Riskler
SDK 5 beta/pre-release; küçük başlayın ve rollback tutun.
Signal uzak side effect’i geri almaz ve signal’ı görmeyen kodu durdurmaz.
Şimdi
İptal sınırlarını önce çizin: maliyet, dış state değişimi ve idempotent olmayan işlem.
30 dakikalık kontrol
✓ İptal nedenleri isimlendirildi
✓ Pahalı adımlar signal alıyor veya kontrol ediyor
✓ Abort ve retry çakışmıyor
✓ Dış etkilerde idempotency key var
✓ Gözlemlenebilirlik cancelled ve failed ayırıyor
const controller = new AbortController();
const result = await Promise.race([
expensiveStep(controller.signal),
sleep("30s").then(() => null),
]);
if (result === null) controller.abort();
Kaynaklar
- Vercel Changelog: Workflow SDK now supports inflight cancellation
- Workflow SDK v5 docs: Cancellation
- MDN: AbortController
- MDN: AbortSignal.any()
- Vercel Changelog: Vercel Sandbox can now run for up to 24 hours
- Reddit r/vercel: Is Workflow Development Kit production ready?
- Reddit r/vercel: Workflow devkit cleanup/cancel discussion
- Reddit r/vercel: 30 minute Functions and 24 hour Sandbox