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