Releases: laravel/ai
Releases · laravel/ai
Release list
v0.9.1
Immutable
release. Only release title and notes can be modified.
What's Changed
- Remove dead dall-e-3 image integration dataset by @mrdzen in #779
- Forward attachment provider options to OpenAI text generation requests by @mrdzen in #768
- Add tool choice support for Gemini, OpenAI, and Anthropic by @JVillator0 in #780
- Add tests for the image portrait and custom size helpers by @dfinchenko in #783
- Add interactive agent console command for the workbench by @pushpak1300 in #786
- Add web fetch tool coverage for the Anthropic provider by @dfinchenko in #792
- [0.x] Validate blank base64 input consistently across file classes by @Button99 in #788
- Add coverage for iterating the embeddings response by @dfinchenko in #790
- Add web search user location coverage for the Anthropic provider by @dfinchenko in #791
- Fix
TextDelta::combineglues multi-step streamed text together mid-sentence by @crishoj in #789 - Fix empty Bedrock stream content blocks by @iAmKevinMcKee in #785
New Contributors
- @crishoj made their first contribution in #789
- @iAmKevinMcKee made their first contribution in #785
Full Changelog: v0.9.0...v0.9.1
v0.9.0
Immutable
release. Only release title and notes can be modified.
Upgrade guide: https://github.com/laravel/ai/blob/0.x/UPGRADE.md
- Add missing return type generics to embeddings and reranking responses by @dfinchenko in #701
- Allow disabling the embeddings cache per request by @pushpak1300 in #706
- Bump shivammathur/setup-php from 2.37.1 to 2.37.2 in the github-actions group by @dependabot[bot] in #708
- Use native Anthropic structured outputs by default by @paix26875 in #707
- Add collection generics to TextResponse properties by @dfinchenko in #709
- Merge all plain-object anyOf branches instead of keeping only the first by @pushpak1300 in #703
- Add file and store support for Azure OpenAI by @markusjwetzel in #676
- Add collection generics to AssistantMessage toolCalls by @dfinchenko in #720
- Extract recursive tool loop into TextGenerationLoop and convert OpenAI by @vinitkadam03 in #652
- Add collection generics to ToolResultMessage toolResults by @dfinchenko in #735
- Migrate Anthropic gateway to StepTextGateway via TextGenerationLoop by @vinitkadam03 in #726
- Migrate xAI gateway to StepTextGateway via TextGenerationLoop by @vinitkadam03 in #728
- Migrate Groq gateway to StepTextGateway via TextGenerationLoop by @pushpak1300 in #729
- Convert Ollama text gateway to TextGenerationLoop by @pushpak1300 in #730
- Convert DeepSeek to TextGenerationLoop and StepTextGateway by @pushpak1300 in #731
- Convert Gemini gateway to the shared TextGenerationLoop by @pushpak1300 in #732
- Convert OpenRouter text gateway to TextGenerationLoop by @pushpak1300 in #733
- Convert Mistral to TextGenerationLoop by @pushpak1300 in #736
- Migrate Bedrock text gateway onto TextGenerationLoop by @pushpak1300 in #734
- Support native anyOf schemas by @dbpolito in #710
- Inline single-use step traits into Gemini and OpenRouter gateways by @pushpak1300 in #741
- Add collection generics to streamed agent response events by @dfinchenko in #744
- Add collection generics to image, transcription, and meta responses by @dfinchenko in #745
- Bump actions/checkout from 6.0.3 to 7.0.0 in the github-actions group by @dependabot[bot] in #747
- Route top-level Ollama provider options out of the options object by @cjmcintyre in #722
- Remove redundant global use statements in OpenRouter transcription test by @pushpak1300 in #751
- Add withProviderOptions() to storable files by @mohali-id in #717
- Add filesystem tools for AI agents by @pushpak1300 in #651
- Fix stored tool conversation replay order by @gracjankubicki in #621
- fix: strip markdown code fences from structured output before decoding by @vaishnavyogesh in #754
- Add web search and citation support to OpenRouterProvider by @pietervanleuven in #738
- Default Anthropic text model to Claude Sonnet 5 by @pushpak1300 in #756
- Standardize withProviderOptions across the provider option API by @pushpak1300 in #753
- Add Workbench setup with a chat example for manual testing by @pushpak1300 in #762
- Fix OpenRouter test for new provider options API by @mrdzen in #766
- Add configurable OpenAI-compatible provider by @pushpak1300 in #742
- Add WithoutBroadcasting attribute to skip oversized stream events by @pushpak1300 in #752
- Support PHPStan static analysis at level 2 by @pushpak1300 in #755
- Remove TextGateway contract in favor of StepTextGateway by @pushpak1300 in #743
Full Changelog: v0.8.1...v0.9.0
v0.8.1
Immutable
release. Only release title and notes can be modified.
What's Changed
- Normalize MCP tool schemas into the deserializable JSON Schema subset by @pushpak1300 in #696
Full Changelog: v0.8.0...v0.8.1
v0.8.0
Immutable
release. Only release title and notes can be modified.
What's Changed
- Fix Mistral transcription requests by @NoelDeMartin in #671
- Bedrock support for remote s3 document by @dumbbellcode in #476
- Migrate OpenAI web_search_preview to web_search with provider options by @SergiiKhrystenko in #662
- Add Dependabot cooldown of 5 days by @nunomaduro in #685
- Enable Dependabot auto-merge by @nunomaduro in #687
- Add
containsmethod toQueuedAgentPromptby @balboacodes in #678 - Recursively remove additionalProperties for Gemini tools by @Edward144 in #682
- Fix transcription usage mapping for output tokens by @Anoop-Kadachi in #637
- Fix ImageResponse::toHtml() data URI when image mime is null by @Anoop-Kadachi in #677
- Pass the original prompt to AgentStreamed when a stream is short-circuited by @FayazK in #684
- Omit null header and multipart values for Laravel 13 compatibility by @pushpak1300 in #688
- Add MCP client and server tool support by @pushpak1300 in #655
- Bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions group by @dependabot[bot] in #692
- Support OpenAI Zero Data Retention via encrypted reasoning by @Junveloper in #622
New Contributors
- @SergiiKhrystenko made their first contribution in #662
- @balboacodes made their first contribution in #678
- @Edward144 made their first contribution in #682
- @FayazK made their first contribution in #684
Full Changelog: v0.7.2...v0.8.0
v0.7.2
Immutable
release. Only release title and notes can be modified.
What's Changed
- Revert "Apply model attribute and explicit model to all providers in a failover list" by @taylorotwell in #667
- Set claude-opus-4-8 as Anthropic's smartest text model by @pushpak1300 in #670
Full Changelog: v0.7.1...v0.7.2
v0.7.1
Immutable
release. Only release title and notes can be modified.
What's Changed
- Set gemini-3.5-flash as Gemini's smartest text model by @pushpak1300 in #640
- BedrockTextGateway: Add cache usage by @liambenson in #642
- Set invocation id on fake stream events by @Anoop-Kadachi in #635
- Apply model attribute and explicit model to all providers in a failover list by @sumaiazaman in #633
- Add JSON_UNESCAPED_UNICODE to schema instruction encoding by @sumaiazaman in #644
- Updates deprecated gemini model to successor by @nicolasbuch in #657
- Fix Gemini image generation when text part precedes image data by @pushpak1300 in #658
- Update deprecated Gemini default to gemini-3.5-flash by @pushpak1300 in #661
New Contributors
- @liambenson made their first contribution in #642
- @nicolasbuch made their first contribution in #657
Full Changelog: v0.7.0...v0.7.1
v0.7.0
Immutable
release. Only release title and notes can be modified.
- Reject empty reranking document lists by @Anoop-Kadachi in #563
- Support closure provider options in queued embeddings by @Anoop-Kadachi in #562
- Add PHPStan by @pushpak1300 in #554
- Make OpenAI strict mode opt-in via Strict attribute by @pushpak1300 in #530
- Add providerOptions to Transcription API by @ihxnnxs in #31
- Validate empty inputs across generation entry points by @Anoop-Kadachi in #564
- Add CHANGELOG and update-changelog workflow by @pushpak1300 in #567
- Add unit test for Strict attribute by @mosabbirrakib in #570
- Add test for Anthropic 529 overloaded response by @mosabbirrakib in #574
- Document @throws on Image::of() and Embeddings::for() by @mosabbirrakib in #576
- Add test for structured agent without Strict sends strict false by @mosabbirrakib in #573
- Add unit test for HandlesFailoverErrors trait by @mosabbirrakib in #572
- Add tests for Anthropic insufficient credits patterns by @mosabbirrakib in #575
- Retrieve conversation list from ConversationStore and agent trait by @barryvdh in #236
- Pin GitHub Actions to commit SHAs and add Dependabot config by @joetannenbaum in #579
- Add generic types to conversation model relationships by @mosabbirrakib in #582
- Document @throws on AzureOpenAiGateway::generateImage() by @mosabbirrakib in #585
- Respect configured database connection in Conversation and ConversationMessage models by @sumaiazaman in #589
- Reject blank or non-string embeddings inputs by @Anoop-Kadachi in #590
- Consistent provider key resolution in provider options by @dumbbellcode in #586
- Use consistent X generation wording by @mosabbirrakib in #584
- Reject blank or non-string reranking documents by @Anoop-Kadachi in #591
- Rehydrate attachments when loading conversation history by @sumaiazaman in #587
- Reject blank model or column in SimilaritySearch::usingModel by @Anoop-Kadachi in #592
- Reject blank image size and quality by @Anoop-Kadachi in #593
- Document @throws RuntimeException on file content() methods by @mosabbirrakib in #601
- Revert "Reject blank image size and quality" by @pushpak1300 in #603
- Reject blank path in LocalDocument and StoredDocument constructors by @mosabbirrakib in #600
- Add tests for blank file path constructor validation by @Anoop-Kadachi in #604
- Bump PHPStan to level 1 and fix type errors by @pushpak1300 in #608
- Throw InsufficientCreditsException for OpenRouter and DeepSeek credit errors by @sumaiazaman in #606
- Capture missing usage details across OpenAI-shaped providers by @sumaiazaman in #610
- Bump shivammathur/setup-php from 2.37.0 to 2.37.1 in the github-actions group by @dependabot[bot] in #615
- Reject blank URL in RemoteDocument, RemoteImage, and RemoteAudio constructors by @sumaiazaman in #613
- Pass
providerOptionsthrough to Bedrock Converse and capture reasoning content by @Junveloper in #611 - Remove image+text restriction on openrouter image generation by @Themodem in #595
- Document @throws LogicException on OpenAiGateway::generateTranscription by @mosabbirrakib in #626
v0.6.8
- Delete update-changelog.yml by @pushpak1300 in #525
- Add error handling tests for VoyageAI reranking by @mosabbirrakib in #527
- Add error handling tests for OpenAI image generation by @mosabbirrakib in #528
- Add error handling tests for VoyageAI embeddings by @mosabbirrakib in #526
- Handle Anthropic pause_turn server-tool continuations by @CodeWrap in #493
- Add sub-agent support as tools by @JVillator0 in #348
- Make conversation/message table names configurable by @timmcleod in #484
- Add error handling tests for image generation (Gemini, AzureOpenAI, OpenRouter) by @mdalikadar in #545
- Add rate limit and overloaded error tests for ElevenLabs audio by @mosabbirrakib in #542
- Add rate limit and overloaded error tests for Cohere reranking by @mosabbirrakib in #540
- Add rate limit and overloaded error tests for Jina reranking by @mosabbirrakib in #541
- Add tests for Gemini image generation safety blocks by @mosabbirrakib in #547
- Add error handling tests for embeddings (OpenAI, Gemini) by @mdalikadar in #546
- Fix parameter name in GeneratesEmbeddings PHPDoc by @mosabbirrakib in #549
- Remove stale @param and unused Request import in Vercel protocol trait by @mosabbirrakib in #551
- Fix nonexistent ImageAttachment type in image-related PHPDoc by @mosabbirrakib in #550
- Add error handling tests for AzureOpenAI image generation by @mosabbirrakib in #537
- Mark nullable size and quality docblocks across image gateways by @mosabbirrakib in #552
- Broadcast stream_failed event when BroadcastAgent job fails by @sumaiazaman in #536
- Gemini context cache support via cachedContent param in agent provider options by @dumbbellcode in #556
- Fix: DeepSeek 400 Bad Request on multi-turn tool-calls by preserving
reasoning_contentby @k1rana in #534 - OpenRouter TTS and STT support by @ondrejehrlich in #559
- Support provider options in embeddings by @dumbbellcode in #555
- Enable failover during stream iteration by @kachelle in #279
v0.6.7
What's Changed
- Add coding standards workflow by @pushpak1300 in #487
- Bind AiManager as singleton to preserve driver extensions across jobs by @ejtmicroventures in #411
- fix(anthropic): preserve provider content blocks on assistant replay (refs #298) by @CodeWrap in #392
- Drop redundant tool_config from Gemini text requests by @pushpak1300 in #490
- Update AssistantMessage.php by @pushpak1300 in #491
- Add GitHub community health files and workflows by @pushpak1300 in #488
- Add error handling tests for Mistral embeddings by @sumaiazaman in #495
- Add error handling tests for Ollama embeddings by @sumaiazaman in #496
- Add diarize and error handling tests for Mistral transcription by @sumaiazaman in #494
- Add error handling tests for Azure OpenAI embeddings by @sumaiazaman in #497
- Add error handling tests for OpenAI transcription by @sumaiazaman in #501
- Add error handling tests for OpenRouter embeddings by @sumaiazaman in #498
- Add error handling tests for xAI image generation by @sumaiazaman in #502
- Add toArray and jsonSerialize to StructuredStep by @plusemon in #504
- Bedrock : support Base64 image for BedrockTextGateway by @DenneulinThomas in #500
- [0.x] Add image generation support to AzureOpenAiProvider by @maherelgamil in #505
- Fix OpenAI citation deduplication by URL by @Anoop-Kadachi in #509
- Remove URL overrides from providers that rarely need them by @pushpak1300 in #492
- Preserve OpenAI url citation span indices and stop deduping by @pushpak1300 in #510
- Add Gemini TTS and STT support by @allurco in #81
- Allow configuring the database connection for DatabaseConversationStore by @sumaiazaman in #469
- Align xAI URL citations with OpenAI response parsing by @Anoop-Kadachi in #513
- Add missing type declaration to ToolResult $result property by @mahfuz-rahman007 in #518
- Test Anthropic streaming tool_use finish reason without tool blocks by @Anoop-Kadachi in #515
- Add missing type hint to $quality parameter in defaultImageOptions by @mahfuz-rahman007 in #516
- Add missing parameter name in EmbeddingsResponse PHPDoc by @mahfuz-rahman007 in #517
- Add config option to disable LLM-generated conversation titles by @sumaiazaman in #474
- Sync conversation metadata after streamed responses by @dhrupo in #434
- Expand streaming finish-reason parity coverage across providers by @Anoop-Kadachi in #521
- Expand OpenAI-family streaming finish reason parity tests by @Anoop-Kadachi in #523
New Contributors
- @ejtmicroventures made their first contribution in #411
- @plusemon made their first contribution in #504
- @DenneulinThomas made their first contribution in #500
- @Anoop-Kadachi made their first contribution in #509
- @allurco made their first contribution in #81
- @mahfuz-rahman007 made their first contribution in #518
- @dhrupo made their first contribution in #434
Full Changelog: v0.6.6...v0.6.7
v0.6.6
What's Changed
- Add transcription feature tests for OpenAI provider by @sumaiazaman in #468
- Add audio feature tests for OpenAI provider by @sumaiazaman in #471
- Fix reasoning data lost when restoring conversation history by @Cbrad24 in #301
- Add top_p configuration option for text generation requests by @Duetro in #306
- Allow tools to declare their name dynamically by @seankndy in #420
- feat: enhance assistant message mapping and extend tool call attributes by @mohali-id in #461
- Pass through provider specific Gemini image aspect ratios by @morcken in #282
- Add image generation support to OpenRouterProvider by @billyfranklim1 in #333
- Throw helpful error when ai.default config is an array by @JoshSalway in #327
- [0.x] Fix conversational message iterable handling in text generation by @Button99 in #345
- Surface usage tokens in OpenAI and Gemini image responses by @maherelgamil in #482
- Reindex tool calls and results before persisting to prevent JSON object encoding by @sumaiazaman in #473
New Contributors
- @Cbrad24 made their first contribution in #301
- @Duetro made their first contribution in #306
- @seankndy made their first contribution in #420
- @mohali-id made their first contribution in #461
- @morcken made their first contribution in #282
- @billyfranklim1 made their first contribution in #333
- @JoshSalway made their first contribution in #327
Full Changelog: v0.6.5...v0.6.6