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`.




Commentaires
Pas encore de commentaire — écris le premier.
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.