ADR-0012 — Le moteur passe à l'AI SDK 7
Le moteur de génération passe à l’AI SDK 7 derrière l’AI Gateway.
Statut
Proposé · 2026-09-27
Remplace ou amende : Rien. Précise la ligne IA de la pile : le moteur était sur la v6.
Origine : ADR 0002 du dépôt applicatif Orbit, renumérotée 0012 à l’intégration dans cette série (une seule série d’ADR vit désormais ici).
Statut dans Orbit (2026-10) : en vigueur. Décision reprise de l'ancien dépôt Studio ; le moteur cité est
packages/engine(@orbit/engine) de ce dépôt.
Répond au constat G2-19 de l'audit de la phase 3 (« Décider l'AI SDK 7 »). Sources lues le 2026-09-27 : le guide de migration v7 (
ai-sdk.dev/docs/migration-guides/migration-guide-7-0), la référenceexperimental_generateVideo, la documentation vidéo, attribution et rapports de l'AI Gateway (vercel.com/docs/ai-gateway), et les types installés deai@7.0.116et@ai-sdk/gateway@4.0.94.
Contexte
Le moteur (packages/engine) est le seul paquet du dépôt qui importe l'AI SDK,
et il ne l'importe qu'à un endroit, src/generation/providers.ts, paresseusement.
Le cockpit transplanté de la plateforme ne l'importe jamais : il appelle les
fonctions serveur de apps/web/src/generation/.
Le dépôt était sur ai@6.0.292. C'est la dernière version de la ligne v6
(étiquette npm ai-v6) ; latest est 7.0.116. Trois besoins du studio ne
sont servis que par la v7 :
- La vidéo asynchrone. La Gateway recommande, pour les fonctions à durée
bornée, de démarrer une vidéo puis d'être prévenu ou d'interroger son état
(
poll,webhook,doStart/doStatusdu modèle vidéo). En v6,experimental_generateVideon'a nipollniwebhook, et le modèle vidéo de@ai-sdk/gateway@3n'a pas dedoStart. Le lot 4 (vidéo asynchrone, Seedance, Kling) en dépend. - La lecture par appel. La v7 range les métadonnées du dernier pas sous
finalStepet celles d'une image souscalls: c'est là que se lisent le coût et l'id de génération de la Gateway (G2-05). - Le coût de la migration croît avec chaque moteur porté. Aujourd'hui, quatre appels ; après Seedance, Kling, GPT « précis » et les références, une dizaine.
Décision
packages/enginedépend deaiépinglé à7.0.116et de@ai-sdk/gatewayépinglé à4.0.94, la version queai@7.0.116fixe lui-même. Épingler les deux garde le fournisseur de la Gateway que le moteur importe (le transport espion des tests, le lot 4) identique à celui queaiutilise pour les chaînes de modèle. Une montée de version est une PR qui change les deux ensemble.- zod reste en
3.25.76: la plage de pairs deai@7accepte^3.25.76 || ^4.1.8. - Les modèles restent des chaînes routées par la Gateway (
STUDIO_MODELS,prices.ts), jamais une instance de fournisseur, jamais une clé de fournisseur. Le fournisseur par défaut global du SDK (globalThis.AI_SDK_DEFAULT_PROVIDER) n'est pas posé en production : il sert aux tests pour placer un transport espion sous ces mêmes chaînes.
Les quatre appels migrés
| Appel | v6 | v7 |
|---|---|---|
Image Nano Banana (generateText) | route image essayée d'abord, ratio en prose, result.providerMetadata | une seule route (IMAGE_ROUTES), ratio dans providerOptions.google.imageConfig, result.finalStep.providerMetadata |
Image par la route image (generateImage, GPT « précis ») | result.providerMetadata | result.calls[0].providerMetadata (le champ global est déprécié) |
Picto (generateText) | system | instructions (system est déprécié), result.finalStep.providerMetadata |
Vidéo et lipsync (experimental_generateVideo) | appel synchrone | même appel synchrone (sans poll ni webhook, la v7 garde doGenerate) ; poll et webhook sont disponibles pour le lot 4 |
Chaque appel reçoit ses options d'un seul constructeur,
packages/engine/src/generation/call-options.ts : clé d'idempotence,
attribution, maxRetries explicite, budget d'annulation, utilisateur et
étiquettes de la Gateway. Le choix de ces valeurs est expliqué dans
Architecture de l’application §7.1.
Conséquences
- Positives : la vidéo asynchrone devient possible sans code de transport maison ; le coût mesuré par la Gateway est lisible là où la v7 le range ; les appels suivent la documentation actuelle au lieu de chemins dépréciés.
- Coût : une dépendance de plus (
@ai-sdk/gateway), épinglée. Les API vidéo restentexperimental_en v7 : leur forme peut encore bouger, et la montée de version se fait donc à la main, avec la suiteproviders.transport.test.tscomme garde. - Rien ne change pour le cockpit : les fonctions serveur gardent leurs types.
Vérification
pnpm checkau vert surai@7.0.116.providers.transport.test.tsprouve, requête par requête et sans appel payant, ce que chaque appel envoie à la Gateway.live.test.tsreste opt-in (STUDIO_LIVE_E2E=1,LIVE_USD_BUDGET) et dit, pour chaque cas, si la Gateway a rendu un coût.