Repository navigation
Releases: laravel/ai
Releases · laravel/ai
Release list
v1.2.3
Immutable
release. Only release title and notes can be modified.
What's Changed
- Keep conversation models non-incrementing on Laravel 12 by @lazerg in #1137
- Classify image attachments with TypeSafe and OpenRouter by @pushpak1300 in #1134
Full Changelog: v1.2.2...v1.2.3
v1.2.2
Immutable
release. Only release title and notes can be modified.
What's Changed
- [1.x] Run structured sub-agents unstreamed when the parent streams by @medilies in #1117
- Add classification to the OpenAI-compatible provider by @pushpak1300 in #1128
- Dispatch failure events for model operations by @edgrosvenor in #1090
- Remove security policy in favor of the org-wide default by @pushpak1300 in #1132
- Keep the call id on a failed turn's interrupted tool result by @pushpak1300 in #1133
New Contributors
- @edgrosvenor made their first contribution in #1090
Full Changelog: v1.2.1...v1.2.2
v1.2.1
Immutable
release. Only release title and notes can be modified.
What's Changed
- Keep CopyFile from copying directories by @yognevoy in #1109
- Replay OpenRouter reasoning details in tool loops by @CamilleScholtz in #1110
- Add Stop middleware to end agent runs early by @pushpak1300 in #1072
- Decode structured output with unescaped quotes in object keys by @augusto-dmh in #1111
- Fix terminal Responses API stream handling by @Marwzoor in #1113
- Use OpenRouter images endpoint for image generation by @pushpak1300 in #1116
- [1.x] Use Ollama's native embedding dimensions when none are configured by @medilies in #1115
- Retry once after a short Retry-After before failing over by @augusto-dmh in #1112
New Contributors
- @augusto-dmh made their first contribution in #1111
- @Marwzoor made their first contribution in #1113
- @medilies made their first contribution in #1115
Full Changelog: v1.2.0...v1.2.1
v1.2.0
Immutable
release. Only release title and notes can be modified.
What's Changed
- Keep structured output format when provider options set output_config by @kachelle in #1105
- Add OpenAI Decisions classification with image attachments by @pushpak1300 in #1106
- fix: Fix structured output for Bedrock models without forced tool choice by @cwilsn in #1104
- Update Anthropic model defaults and skip sampling params on Claude 4.7+ by @pushpak1300 in #1107
New Contributors
Full Changelog: v1.1.0...v1.2.0
v1.1.0
Immutable
release. Only release title and notes can be modified.
What's Changed
- Skip provider tools the provider does not support by @yognevoy in #1080
- Support self-hosted Laya through the TypeSafe driver by @mysticseagull in #1081
- [1.x] Add Cohere text generation support by @mssayari in #1078
- Share the provider capability check in AiManager by @pushpak1300 in #1064
- Document Boost and Laravel MCP 1.0 upgrade requirements by @pushpak1300 in #1087
- Update provider default models to the latest releases by @pushpak1300 in #1095
- Add Agent Skills support by @pushpak1300 in #1054
- Allow built-in tools to require approval by @pushpak1300 in #1097
- Send web search location to OpenRouter by @pushpak1300 in #1098
- Add Azure tool search and Groq web search and code execution by @pushpak1300 in #1099
- Add a MoveFile filesystem tool by @yognevoy in #1092
- fix: resolve stateless OpenAI file search replay by @owenvoke in #1089
- [ 1.x ] Fix: Stop an edited useChat user message from being replaced by the assistant reply message by @vinitkadam03 in #1076
- Add HasSkills contract that gives agents the LoadSkill tool by @pushpak1300 in #1102
- Send ElevenLabs query parameters in the query string by @Taldres in #1103
New Contributors
- @mysticseagull made their first contribution in #1081
- @owenvoke made their first contribution in #1089
- @Taldres made their first contribution in #1103
Full Changelog: v1.0.1...v1.1.0
v1.0.1
Immutable
release. Only release title and notes can be modified.
What's Changed
- Remove unused and redundant provider code by @pushpak1300 in #1063
- Announce a tool call before its approval request by @SantosVilanculos in #1070
- Share local and stored file content through traits by @pushpak1300 in #1066
- Add Ai::build() for on-demand provider configuration by @pushpak1300 in #1071
- Add a Collection decide macro for choosing an item by @taylorotwell in #1073
- Migration from Mockery to Double by @jasonmccreary in #1061
- Improve remote file fetching by @pushpak1300 in #1082
- Settle pending calls for tools that cannot request approval by @pushpak1300 in #1083
New Contributors
- @SantosVilanculos made their first contribution in #1070
- @jasonmccreary made their first contribution in #1061
Full Changelog: v1.0.0...v1.0.1
v1.0.0
Immutable
release. Only release title and notes can be modified.
What's Changed
- Sync Base Brance by @pushpak1300 in #898
- Sync 0.x by @pushpak1300 in #907
- Sync 0.x by @pushpak1300 in #916
- Sync 0.x by @pushpak1300 in #922
- Add withProviderOptions support to the image builder by @pushpak1300 in #899
- Add withProviderOptions support to the audio builder by @pushpak1300 in #900
- Add withProviderOptions support to the reranking builder by @pushpak1300 in #901
- Add an ai_sdk_extra_headers provider option for custom HTTP headers by @pushpak1300 in #904
- Add AG-UI protocol streaming by @pushpak1300 in #913
- Rename Agent User Interaction protocol by @pushpak1300 in #948
- Allow runtime tool overrides via withTools by @pushpak1300 in #956
- [1.x] Stop proxies buffering native streamed responses by @pascalbaljet in #960
- [1.x] Add a continueOrStart() shortcut by @pascalbaljet in #962
- [1.x] Report the conversation rows a turn wrote by @pascalbaljet in #961
- Scope continueLastConversation to the agent by @pushpak1300 in #972
- [1.x] Report the persisted message id on RUN_FINISHED by @pascalbaljet in #976
- [1.x] Report how a tool call ended on TOOL_CALL_RESULT by @pascalbaljet in #977
- Support hosted code execution as a provider tool by @pushpak1300 in #970
- Exclude cached tokens from the reported prompt token count on the Groq and OpenAI-compatible providers by @sulimanbenhalim in #909
- Accept every storable image type in OpenAI image edits by @saifulferoz in #893
- Fix Gemini file import operation handling by @drewmt in #821
- [1.x] Report the prompt's stored row on RUN_FINISHED by @pascalbaljet in #989
- [1.x] Report a step's text as one message, not one per content block by @pascalbaljet in #988
- [0.x] Combine streamed text by step rather than by message ID by @pascalbaljet in #987
- [1.x] Persist the reasoning a turn produced by @pascalbaljet in #975
- [1.x] Report why a resume was rejected on RUN_ERROR by @pascalbaljet in #978
- [0.x] Add conversation pagination by @pascalbaljet in #990
- [0.x] Persist the sources a streamed answer cited by @pascalbaljet in #991
- Simplify provider options and stream protocol plumbing by @pushpak1300 in #963
- Convert AG-UI run input into agent chat input by @pushpak1300 in #964
- [0.x] Expose the tool calls a paused conversation is waiting on by @pascalbaljet in #992
- [0.x] Expose whether a conversation belongs to a participant by @pascalbaljet in #993
- Add AG-UI approval interrupts and snapshot hydration to streams by @pushpak1300 in #965
- [1.x] Wrap each generation step in agent middleware by @pushpak1300 in #979
- [1.x] Thread request timeouts through reranking, image, and transcription by @pushpak1300 in #994
- Stream sub-agent activity by default by @gracjankubicki in #802
- Read Cohere Bedrock embeddings input token count from response header by @serpentblade in #914
- Read the cumulative usage reported on Anthropic message_delta by @goatrenterguy in #996
- Fix xAI and OpenRouter dropping filename for unnamed documents by @yognevoy in #1001
- Add OpenRouter reranking support by @ilogus in #999
- Unescape slashes when encoding structured MCP tool output by @yognevoy in #997
- feat: add audio input for OpenRouter by @davidafsoty in #998
- Make the AWS SDK an optional dependency of the Bedrock provider by @pushpak1300 in #1003
- [1.x] Store a user message before a provider is chosen by @pascalbaljet in #1005
- Replay earlier tool steps ahead of a paused step's provider blocks by @pushpak1300 in #995
- fix(anthropic): report thinking tokens in usage by @DGarbs51 in #1006
- Hoist every top level Gemini request field out of generationConfig by @pushpak1300 in #1015
- Use PHP_EOL for multi-line string assertion in test by @GeorgeBetts in #1016
- Add coverage for cached and reasoning tokens in xAI response usage by @dfinchenko in #1008
- Add coverage for the cache token counters on Anthropic responses by @dfinchenko in #1009
- Add support for inline document attachment for Mistral Provider by @GeorgeBetts in #1017
- [1.x] Return all generated images from xAI when
nis greater than one by @mssayari in #1019 - Populate response reasoning on non-streamed prompts by @pushpak1300 in #1020
- Report inclusive input and output tokens on the usage value object by @pushpak1300 in #1021
- Add TypeSafe AI classification by @pushpak1300 in #1010
- Remove the ai_sdk_extra_headers provider option by @pushpak1300 in #1026
- Preserve Gemini thought signatures across persisted tool conversations by @sulimanbenhalim in #837
- [1.x] Report usage on audio responses by @pushpak1300 in #1029
- [1.x] Report embeddings usage as a usage object by @pushpak1300 in #1028
- Retain OpenAI replay blocks regardless of the store setting by @pushpak1300 in #1034
- [1.x] Split text-only usage counts into a TextUsage subclass by @pushpak1300 in #1030
- [1.x] Report image token details on image responses by @pushpak1300 in #1024
- [1.x] Report the transcribed audio duration on transcription responses by @pushpak1300 in #1025
- [1.x] Report usage on reranking responses by @pushpak1300 in #1027
- Store conversation turns as steps by @pushpak1300 in #1035
- Replay provider reasoning state only within the open turn by @pushpak1300 in #1036
- Persist provider-hosted tool calls on each step by @pushpak1300 in #1032
- Add OpenRouter file gateway by @bram-pkg in #1043
- Resolve approval results without matching the paused turn's participant by @pushpak1300 in #1046
- Fold an approved resume into the turn it paused on by @pushpak1300 in #1045
- Add OpenRouter classification gateway by @pushpak1300 in #1044
- Replace the turn's approval timestamp with a message status column by @pushpak1300 in #1050
- Keep an OpenAI function call item id only beside its reasoning by @pushpak1300 in #1052
- Persist the steps a turn completed before it failed by @pushpak1300 in #1051
- Add a decide string macro for boolean classification by @pushpak1300 in #1049
- Move Gemini to the Interactions API by @pushpak1300 in #1056
- Default OpenAI to GPT-6 and Anthropic smartest to Opus 5.5 by @pushpak1300 in #1058
- Add the 1.0 upgrade guide by @pushpak1300 in #1002
New Contributors
- @pascalbaljet made their first contribution in #960
- @saifulferoz made their first contribution in #893
- @goatrenterguy made their first contribution in #996
- @yognevoy made their first contribution in #1001
- @ilogus made their first contribution in #999
- @davidafsoty made their first contribution in #998
- @GeorgeBetts made their first contribution in #1016
- @mssayari made their first contribution in #1019
- @bram-pkg made their first contribution in #1043
Full Changelog: v0.11.2...v1.0.0
v0.11.2
Immutable
release. Only release title and notes can be modified.
What's Changed
- Copy uploaded files to a managed temp path so their contents survive the request by @sulimanbenhalim in #959
- Preserve tool result failure status across conversations by @drewmt in #812
- Fix invalid Mistral cheapest text model default by @kachelle in #980
New Contributors
Full Changelog: v0.11.1...v0.11.2
v0.11.1
Immutable
release. Only release title and notes can be modified.
What's Changed
- Align the Vercel UI message stream with the data stream protocol by @pushpak1300 in #906
- Allow caching embeddings individually by @timacdonald in #905
- Add v0.11 upgrade guide by @pushpak1300 in #897
- Fix Vercel provider tool events and finish reasons by @pushpak1300 in #921
- Emit citation events for Gemini grounding results while streaming by @sulimanbenhalim in #912
- Emit citation events for xAI web search results while streaming by @sulimanbenhalim in #911
- Add audio (TTS) support to the Mistral provider by @SanderMuller in #926
- Fail over on Groq's flex tier capacity exceeded status code by @sulimanbenhalim in #925
- Honor the Strict attribute for structured output on the Groq, Mistral, OpenAI-compatible, and OpenRouter providers by @sulimanbenhalim in #923
- Add explicit prompt cache breakpoints for Anthropic and Bedrock by @pushpak1300 in #869
- Exclude cached tokens from the reported prompt token count on the OpenRouter provider by @sulimanbenhalim in #924
- Update default provider models by @pushpak1300 in #951
- Store uploaded files from their path instead of base64 encoding them by @lazerg in #945
- Fetch and inline remote image, document, and audio attachments for the Gemini provider by @sulimanbenhalim in #927
- Return null for a remote file mime type when the response declares no content type by @sulimanbenhalim in #953
- Send the ElevenLabs transcription language hint as the documented language_code field by @sulimanbenhalim in #954
- Map the Mistral model_length and error finish reasons to Length and Error by @sulimanbenhalim in #955
- Added Bedrock Reranking Gateway by @F1nnG in #949
- Emit citation events for OpenAI web search results while streaming by @sulimanbenhalim in #910
- Document agents and provider tools in tools method docblocks by @pushpak1300 in #958
- Support validating tool request arguments by @pushpak1300 in #968
- Document attaching MCP servers to agents by @pushpak1300 in #971
Full Changelog: v0.11.0...v0.11.1
v0.11.0
Immutable
release. Only release title and notes can be modified.
What's Changed
- Add coverage for persisting provider content blocks on paused turns by @dfinchenko in #861
- Add coverage for storing generated audio on a filesystem disk by @dfinchenko in #863
- Add coverage for storing a generated image on a filesystem disk by @dfinchenko in #862
- Trigger failover when a provider connection fails by @JVillator0 in #781
- Fail over on transient gateway and Cloudflare upstream errors, not only 503 by @sulimanbenhalim in #810
- Execute
then(...)callback when faking the queued generation of transcription/image/audio/embeddings by @gdebrauwer in #797 - Add web search support to the xAI provider by @sulimanbenhalim in #857
- Add transcription support to the OpenAI-compatible provider by @sulimanbenhalim in #858
- Add transcription support to the Groq provider by @sulimanbenhalim in #868
- Fail over when Anthropic rejects a request for hitting a usage limit by @oddvalue in #864
- Reconstruct S3 document attachments in File::fromArray by @sulimanbenhalim in #878
- Handle Mistral responses that return content as a list of blocks by @lazerg in #866
- Reset text part state after TextEnd in Responses API streams by @chrisnetonline in #854
- Fix OpenAI gateway dropping cache write tokens from usage by @aqu1les in #846
- Add hosted tool search via ToolSearch tool and stateless output replay (OpenAI + Anthropic) by @behzadsp in #697
- Repair unknown local tool calls by @pushpak1300 in #859
- Make stream errors throw instead of silently ending the run by @pushpak1300 in #870
- Thread one invocation id through an entire agent run by @pushpak1300 in #871
- Report tool invocations through a run context by @pushpak1300 in #872
- Report each generation step through the run context by @pushpak1300 in #873
- Report tool failures and how long a tool ran by @pushpak1300 in #874
- Link an agent invoked as a tool back to its parent by @pushpak1300 in #875
- Report a run's terminal failure by @pushpak1300 in #876
- Filter partially-orphaned tool calls when replaying conversation history by @filipposallemi in #758
- [BUG] [0.x] Sum streamed usage across tool-call steps in all provider gateways by @mo-inkhan in #698
- Map Anthropic refusal and model_context_window_exceeded stop reasons by @egantz in #881
- Update Gemini default text model to gemini-3.7-flash by @pushpak1300 in #887
- Keep the MCP request bound while converting generator results by @pushpak1300 in #888
- Add support for the OpenRouter web fetch server tool by @CamilleScholtz in #889
- Send text/plain for all text document sources on Anthropic by @calrloco in #886
- Fail over on Anthropic transient gateway and Cloudflare errors by @sulimanbenhalim in #884
- Strip markdown code fences from OpenAI-compatible structured output by @sulimanbenhalim in #879
- Add file search support to the xAI provider by @timmcleod in #894
- Added assertPromptedTimes test method by @F1nnG in #891
- Surface Anthropic web fetch citations on the response by @sulimanbenhalim in #892
- Exclude DeepSeek cache-hit tokens from the reported prompt token count by @sulimanbenhalim in #896
New Contributors
- @gdebrauwer made their first contribution in #797
- @oddvalue made their first contribution in #864
- @lazerg made their first contribution in #866
- @chrisnetonline made their first contribution in #854
- @aqu1les made their first contribution in #846
- @behzadsp made their first contribution in #697
- @filipposallemi made their first contribution in #758
- @mo-inkhan made their first contribution in #698
- @egantz made their first contribution in #881
- @CamilleScholtz made their first contribution in #889
- @calrloco made their first contribution in #886
- @F1nnG made their first contribution in #891
Full Changelog: v0.10.3...v0.11.0