Laravel AI SDK 1.0 adopte Jev et les validations humaines
Laravel AI SDK 1.0 sort de bêta avec le modèle Jev de TypeSafe pour les classifications rapides et économiques.
La version ajoute aussi le streaming Vercel Chat et AG-UI, ainsi que l'approbation humaine des appels sensibles. Laravel 13.33 apporte le cache mémoïsé avec tags, l'attribut Eloquent #[Refreshes], les casts nullable et plusieurs outils de migration, de test et de gestion des workers.
Laravel AI SDK atteint la version 1.0.0 après plusieurs mois de bêta. Le package officiel unifie OpenAI, Anthropic, Gemini et d'autres fournisseurs via une seule API: `composer require laravel/ai`.
composer require laravel/aiLa classification avec le modèle Jev de TypeSafe est la vedette. Jev fournit des décisions rapides et peu coûteuses: oui/non ou choix multiples. Un ticket de support reçoit la marque `is_urgent` et s'achemine vers `billing`, `technical` ou `sales`. Les questions binaires isolées usent `Str::of($message)->decide('Is this spam?');`. TypeSafe et OpenRouter fonctionnent aujourd'hui; d'autres fournisseurs adopteront la même interface.
Le streaming parle directement les protocoles Vercel Chat et AG-UI. Une route avec `Vercel::chat($request)`, `withMessages()` et `stream()` charge l'historique, le sauvegarde et traite les approbations d'outils en attente. Les clients AG-UI comme CopilotKit basculent vers `usingAgentUserInteractionProtocol()`.
Les outils sensibles exigent une approbation humaine. Une classe `DeleteFile` implémente `Approvable` et `Tool` avec `InteractsWithApprovals`. Approuver, rejeter avec une raison que le modèle voit, ou modifier les arguments avant exécution.
Les autres additions 1.0: le middleware tourne à chaque étape de génération (non une seule fois); `ToolSearch` charge à la demande les outils rarement utilisés sur OpenAI et Anthropic; `CodeExecution` exécute du code dans les environnements d'Anthropic, OpenAI, Azure, Gemini et xAI. L'historique se range dans une colonne `steps` unique—les apps interrogeant les anciennes colonnes nécessitent une migration.
Laravel Boost lisse la mise à jour: `composer require laravel/boost --dev`, puis `php artisan boost:install`, ensuite `/upgrade-ai-sdk-v1` dans Claude Code ou Cursor.
Laravel 13.33 apporte des petites retouches pratiques. `Cache::memo()` accepte maintenant `tags`, les lectures mémoïsées durant une requête restent étiquetées: `Cache::memo()->tags(['permissions'])->get(...)`. Les vérifications répétées de droits ou paramètres évitent des appels Redis supplémentaires.
L'attribut `#[Refreshes]` gère les colonnes calculées par la base. Marquer `#[Refreshes('net_salary')]` sur un modèle où `net_salary` provient de `base_salary + allowance - deduction` via expression stockée. Après création ou mise à jour, Laravel recharge cette seule colonne dans l'objet modèle. Plusieurs colonnes: `#[Refreshes('net_salary', 'tax_status')]`. Chaque sauvegarde coûte une petite requête (`select net_salary from employees where id = ? limit 1`). Pour les besoins rares, le `refresh()` manuel reste préférable.
`AsCollection::nullable()` et `AsArrayObject::nullable()` enregistrent maintenant le NULL SQL réel au lieu de la chaîne "null", donc `whereNull()` les trouve. Les modifieurs `inplace()` et `lock()` demandent `ALGORITHM=INPLACE` et `LOCK=NONE` sur les migrations d'index et clés étrangères de grandes tables MySQL. Les attributs Form Request comme `#[StopOnFirstFailure]` héritent des classes parentes. `Worker::$killOnTimeout = false` permet à un job expiré de lever une exception et de nettoyer sans tuer le processus worker. `mockArtisan()` et `realArtisan()` séparent les exécutions simulées des réelles sans basculer `$mockConsoleOutput`.
Tribune des lecteurs
Pas encore de contributions — lance le débat.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.