v0.10.0 adds a few headline features across embeddings, conversation handling, and provider support. It also includes a storage change for conversation ownership, so check upgrade notes before moving from 0.9.x.
What's new
- Adds multimodal embeddings support for Gemini and Voyage AI. You can now pass file attachments alongside text to
Embeddings::for(), includingImage,Video, and other non-text inputs. Gemini accepts text, image, audio, document, and video inputs, while Voyage AI routes multimodal requests to its multimodal endpoint. Non-text inputs still fail for other providers with anInvalidArgumentException(#798). - Introduces a
summarizehelper for text summarization. It comes in both instance and static forms, so you can callstr($article)->summarize()orStr::summarize($article, sentences: 4)instead of wiring up a prompt yourself each time (#800). - Adds human-in-the-loop approval for tool calls with external side effects. Approvable tools can pause an agent before execution, surface the pending calls to the application, and then resume after a person approves, edits, or rejects them. This works across
prompt(),stream(), andqueue()for resumableConversationalagents (#773). - Adds cross-account AssumeRole support for the Bedrock provider. When configured, the provider can assume a target role from source credentials and use the resulting temporary credentials to invoke Bedrock in another AWS account (#566).
- Adds Rector and Laravel Rector and applies automated refactors across
srcandtests(#784).
Breaking changes
- Conversations and messages now store participant identity as a
participant_type+participant_idmorph pair instead of a bareuser_id. This avoids history leakage between models that share the same id, but it also means existing conversation data needs the new schema shape from the migration (#795).
Other notable changes
- Conversation participant ownership is now derived automatically from the model instance, with no config key or “as type” API to maintain (#795).
Contributors
- @pushpak1300
- @paulinevos
- @amjosuesanchez