⭐ New Features
- Add turn-boundary snapping to MessageWindowChatMemory eviction #6312
- Finish to remove default values from models #6311
- Move advisors to their proper modules #6309
- Remove SpringBeanToolCallbackResolver and toolNames() API #6301
- Streamline OpenAiChatModel implementations #6295
- Remove
ToolSpecconsumer API fromChatClient#6292 - Remove Minimax dedicated support in favor of Anthropic one #6290
- Remove internalToolExecutionEnabled #6289
- Rename
N()ton()in options builders #6285 - Refine
JdbcChatMemoryRepositoryDialectto use default method #6283 - Replace SLF4J by
org.apache.commons.logging.LogFactory#6280 - Remove internal tool execution from MiniMaxChatModel #6279
- Remove internal tool execution from BedrockProxyChatModel #6272
- fix(core): allow tool callbacks and providers directly in ChatClient tools() #6263
- Remove internal tool execution from MistralAiChatModel #6260
- Remove internal tool execution from DeepSeekChatModel #6258
- Remove internal tool execution from OpenAiChatModel #6257
- Remove internal tool execution from OllamaChatModel #6256
- Remove duplicate builder overrides in OpenAiChatOptions #6255
- Refactor tool search by consolidating into a single module #6254
- Remove internal tool execution from AnthropicChatModel #6252
- Refactor toOptions method for vendor-specific autoconfiguration properties #6248
- Make equals parameter nullable #6239
- Remove unused
GoogleGenAiChatOptions.TransportType#6238 - GH-6211: Avoid duplicate chat memory in tool prompts #6228
- GH-6206: Update tool callback guidance #6214
- Update Mistral AI chat models #6210
- Deprecate and rename ChatClient customizer #6204
- Refine Spring Boot dependencies #6200
- Simplify ToolCallAdvisor stream aggregation by removing publish() multicast #6195
- Add DeepSeek V4 chat model constants #6194
- Add EntityParamSpec to ChatClient entity() methods for per-call structured output configuration #6165
- Remove toolNames() API and SpringBeanToolCallbackResolver — use explicit ToolCallback beans instead #6154
- Retire Pixtral Large model #6149
- Refactor JSON utilities #6135
- Use .class reference for autoconf ordering #6119
- Add Tool Search Tool advisor for on-demand tool discovery #5909
- Allow accessing "timestamp" field from spring_ai_chat_memory table programatically when using JdbcChatMemoryRepository #5168
🐞 Bug Fixes
- fix: place memory advisors outside ToolCallingAdvisor by default #6314
- Rename ToolCallAdvisor to ToolCallingAdvisor with backward-compat shims and bug fixes #6303
- Fix OpenAiChatModel.stream() to only buffer tool calls. #6288
- refactor(chat-client): enforce non-null ToolCallAdvisor.Builder and fix advisor chain mutation #6282
- fix: fix span hierarchy in streaming paths for all remaining chat models #6276
- fix: bring parent span into ThreadLocals to maintain Observation and span hierarchy parity #6249
- Guard JSON schema generation #6217
- Fix merge in openai options #6215
- deepseek V4 Function calling 400 Bad Request from POST #5963
📔 Documentation
- Fix "vector strore" typo in RAG diagram #6300
- Polish reference documentation #6234
- Improve Mistral AI Chat documentation for reasoning models and
ReasoningEffortJavadoc #6191 - Reintroduce community support documentation for OCI and Azure CosmosDB #6125
🔨 Dependency Upgrades
- Upgrade to MCP SDK
2.0.0-RC1#6287
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Baqirrizvidev, @Dream95, @EvanYao826, @ThomasVitale, @YunKuiLu, @chemicL, @dafriz, @ericbottard, @galenzo17, @goutamadwant, @guanxuc, @ilayaperumalg, @juanjuandog, @nicolaskrier, @quaff, @rajadilipkolli, @sdeleuze, @sobychacko, @stohirov, @symphony-enrico, @tzolov, and @wolf8334