Laravel AI SDK alcanza versión 1.0.0 tras meses en beta. El paquete oficial unifica OpenAI, Anthropic, Gemini y otros a través de una API: `composer require laravel/ai`.
composer require laravel/aiLa clasificación con el modelo Jev de TypeSafe destaca como novedad principal. Jev entrega decisiones rápidas y baratas: sí/no u opciones múltiples. Un ticket de soporte recibe marca `is_urgent` y encamina a `billing`, `technical` o `sales`. Las preguntas binarias aisladas usan `Str::of($message)->decide('Is this spam?');`. TypeSafe y OpenRouter funcionan hoy; más proveedores seguirán la misma interfaz.
El streaming ahora habla directamente Vercel Chat y AG-UI. Una ruta con `Vercel::chat($request)`, `withMessages()` y `stream()` carga el historial, lo persiste y procesa aprobaciones de herramientas pendientes. Los clientes AG-UI como CopilotKit cambian a `usingAgentUserInteractionProtocol()`.
Las herramientas delicadas requieren visto humano. Una clase `DeleteFile` implementa `Approvable` y `Tool` con `InteractsWithApprovals`. Aprobar, rechazar con razón visible al modelo, o editar argumentos antes de ejecutar.
Otras adiciones 1.0: middleware corre en cada paso de generación (no solo una vez); `ToolSearch` carga bajo demanda herramientas poco usadas en OpenAI y Anthropic; `CodeExecution` ejecuta código en sandboxes de Anthropic, OpenAI, Azure, Gemini y xAI. El historial vive en columna única `steps`—apps que consulten columnas viejas necesitan migración.
Laravel Boost suaviza la actualización: `composer require laravel/boost --dev`, luego `php artisan boost:install`, después ejecutar `/upgrade-ai-sdk-v1` en Claude Code o Cursor.
Laravel 13.33 trae ajustes prácticos menores. `Cache::memo()` ahora acepta `tags`, lecturas memorizadas dentro de una petición permanecen etiquetadas: `Cache::memo()->tags(['permissions'])->get(...)`. Comprobaciones repetidas de permisos o ajustes evitan viajes extras a Redis.
El atributo `#[Refreshes]` maneja columnas calculadas por la base. Marcar `#[Refreshes('net_salary')]` en un modelo donde `net_salary` procede de `base_salary + allowance - deduction` vía expresión almacenada. Tras crear o guardar, Laravel recarga esa columna en el objeto modelo. Múltiples columnas: `#[Refreshes('net_salary', 'tax_status')]`. Cada guardado paga una pequeña consulta (`select net_salary from employees where id = ? limit 1`). Para necesidades ocasionales, el `refresh()` manual sigue siendo mejor.
`AsCollection::nullable()` y `AsArrayObject::nullable()` guardan ahora NULL SQL real en lugar de la cadena "null", así `whereNull()` las encuentra. Los modificadores `inplace()` y `lock()` solicitan `ALGORITHM=INPLACE` y `LOCK=NONE` en migraciones de índices y claves foráneas de tablas grandes MySQL. Los atributos Form Request como `#[StopOnFirstFailure]` heredan de clases padre. `Worker::$killOnTimeout = false` permite a un job vencido lanzar excepción y limpiar sin matar el proceso worker. `mockArtisan()` y `realArtisan()` separan ejecuciones simuladas de reales sin cambiar `$mockConsoleOutput`.




Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
¿No llega nada? Mira en la carpeta de spam — y marca el correo como «No es spam» para que la próxima vez llegue directo.