Spring AI 1.0.1 Release Notes
🎯 Highlights
This release includes 24 new features, 50 bug fixes, 45 documentation improvements, 32 other improvements.
📢 Noteworthy
- Official release of Spring AI version 1.0.1 with consolidated bug fixes and documentation improvements 53ec007
- Multiple commits were reverted related to tool context validation fixes and OpenAI chat client method invoking function callback integration tests 80ffb4c
- Temporarily reverted the change that resolved OpenAI ApiKey for every request, indicating potential issues that required investigation 8a2706d
⭐ New Features
- Enhanced KeywordMetadataEnricher with custom template functionality to provide more flexible metadata enrichment capabilities 2082a59
- Added validation to check documents for text/media content when adding to vector stores #3687
- Improved @tool annotation functionality to enhance function calling capabilities 62160d3
- Added support for streaming tool calls without parameters in the Anthropic chat model 2099278
- Updated and improved configuration options for Mistral chat model integration c18a241
- Added capability to selectively rethrow exceptions in the default tool execution exception processor d1baefb
- Refactored MessageAggregator to include support for tool calls functionality 1805ca0
- The ChatClient#mutate method now creates copies of advisors and advisorParams instead of sharing references, improving isolation between chat client instances ccfaaf1
- Added equals, hashCode, deep copy functionality and comprehensive tests to MiniMaxChatOptions for better object handling and comparison dc9ea17
- Added support for new Mistral AI chat models to expand the available model providers #3523
- Enhanced OllamaChatModel with retry template integration for improved reliability f89530c
- Added streaming thinking events support for Anthropic model provider to enhance real-time interaction capabilities 379901b
- Enhanced OpenAI integration with updated supported voice enumerations for text-to-speech and chat completion audio features #3411
- Added support for dynamic API key configuration for Anthropic model provider on a per-request basis ae9284c
- Neo4j vector store now automatically determines default embedding dimensions based on the configured model 96c45c7
- Added Spring Framework 7.x compatibility to RetryUtils#ResponseErrorHandler to support upcoming Spring Framework versions 5ecfcce
- Enhanced OpenAI client to resolve API key for every request, improving key rotation and configuration flexibility dd6c0a9
- Introduced support for Anthropic's latest Claude models including claude-opus-4 and claude-sonnet-4 #3351
- Extended OpenAI integration to support PDF files as media input a330458
- Provided MySQL database schema for SPRING_AI_CHAT_MEMORY table to support chat memory functionality 148bf33
- Improved handling and testing of complex metadata values in Chroma vector store integration aba837a
- Added metadata support for vector store types to enhance data management capabilities #3325
- Added support for configurable exception handling when executing tools, providing better error management and recovery options 3068c04
- Added comprehensive integration tests for Chat Memory functionality with SQL Server support a6858cf
🪲 Bug Fixes
- Resolved issue where method tool calls would throw errors when methods had the same name #2774
- Fixed typo in frequencyPenalty property name for Google model builders 2e579b1
- Corrected spelling of PromptTemplate in structured output API documentation image #3304
- Resolved null pointer exception in Anthropic API streaming functionality #3755
- Fixed issue where SystemPromptTemplate.builder() incorrectly returned PromptTemplate builder 2f91adb
- Corrected parameter sequence in JSON schema generation functionality f20eeea
- Resolved annotation packaging issues #3716
- Resolved issue where audio filenames were lost when requesting OpenAI
/transcriptions
and/translations
interfaces c0c7f3a - Enhanced schema initialization logic and updated deprecated code for Milvus vector store #3705
- Added null checks, optimized string joining, and improved JavaDocs #3663
- Corrected assertion message in SimpleApiKey implementation for better debugging #3656
- Prevented streaming tool calling responses when internal execution is enabled for Anthropic models 5d8a930
- Cleaned up unused configuration options from ZhiPu AI model implementation #3669
- Added support for custom dimensions in ZhiPu AI embedding models #3668
- Removed incorrect @nullable annotation from VectorStore similaritySearch methods #3613
- Added validation for invalid page numbers in outline items for getTextBetweenParagraphs method 50e8615
- Corrected issues with Ollama autoconfiguration that were preventing proper setup #3645
- Fixed naming inconsistencies throughout the Mistral integration package #3652
- Resolved issue where streaming tool calls without input arguments would fail in Bedrock integration d1dac6c
- Fixed hardcoded configuration parameter to allow proper customization of topK values in Bedrock Converse Proxy #3621
- Prevents incorrect ToolCall merging in DeepSeek model provider when tool calls have empty id and name strings ff5855d
- Resolves test failure in ChromaVectorStoreAutoConfigurationIT due to updated exception message handling 7200580
- Resolved exception occurring in OpenAiAudioTranscriptionResponseMetadata.toString method #3575
- Corrected infinite recursion issue in getMimeType(Path) method b6b069c
- Improved root exception handling in McpToolCallback to prevent unhandled errors fb1746b
- Corrected logging behavior when creating ChromaDB collections e0d3703
- Resolved incorrect outputModalities evaluation when using streaming responses 3f9f34d
- Resolved issue preventing generation of spring.ai.tools.observations configuration metadata for Spring Boot auto-completion #3539
- Corrected the parameter order in ClassUtils.isAssignable within the validateToolContextSupport method 61c8044
- Resolved test failures in Ollama embedding auto-configuration tests 3309869
- Corrected parsing of similarity options in ElasticsearchVectorStore for proper configuration handling c9ec39e
- Resolved issue where Bedrock Titan embeddings were not properly returning usage information 0a1d326
- Corrected logic error in validateToolContextSupport method caused by incorrect parameter order 2ca1be2
- Improved logic in MethodToolCallbackProvider to correctly check function types fcbdac9
- Resolved issues in OpenAI chat client function callback integration test bb52db5
- Resolved configuration issue where the embedding field name was not properly set when configuring ElasticsearchVectorStore #3501
- Corrected SQL syntax error in the isTableExists method of MariaDBSchemaValidator that was preventing proper table validation 95ea7f2
- Improved Qdrant vector store to properly handle Long type values in payload by converting them to String format 963b9db
- Enhanced QdrantObjectFactory to properly handle null metadata values without throwing errors 8053ae3
- Fixed OpenAiChatOptions to properly support transferring web search options between configurations c790d6c
- Fixed missing properties in the Spring Boot auto-configuration for ChromaVectorStore 3fe052f
- Fixed a bug in the augmentSystemMessage method where an extra system message was incorrectly added when the system message was not the first one in the message list 623e705
- Avoid looping through all the page tree if there is no destination page, improving PDF processing performance #3396
- Fixed unreachable code in PromptChatMemoryAdvisor to improve code quality and maintainability #3395
- Added null safety check for duration metadata in Ollama chat model responses to prevent potential null pointer exceptions 1eecd17
- Corrected CustomerTools example code to reference proper existing methods #3390
- Prevented double-serialization of already valid JSON strings in JsonParser.toJson method cfa4128
- Fixed typo in ToolCallback implementation for better code clarity #3352
- Resolved connection leak issue when using JdbcChatMemoryRepository, improving resource management and stability fb106ab
- Updated useAutoConfiguredJdbcChatMemoryRepository test to work properly after connection leak fix fd9fe79
📓 Documentation
- Added comprehensive example demonstrating how to dynamically select and use MCP clients in Spring AI applications #3751
- Updated reference links to the latest MCP specification documentation #3810
- Corrected code examples in the streaming responses documentation to ensure accuracy and functionality #3802
- Improved documentation for ChatClient Advisor functionality 8c88a64
- Updated MCP documentation to remove outdated DefaultMcpSession references #3760
- Enhanced Anthropic chat integration documentation #2723
- Corrected documentation and code typos in chat client module #3013
- Corrected typo in token configuration documentation #3677
- Fixed outdated code examples in the documentation #3717
- Fixed property name from
is-auto-id
toauto-id
in milvus.adoc #3704 - Cleaned up duplicated dependency instructions in opensearch.adoc #3712
- Corrected default embedding model reference in ollama-embeddings.adoc #3686
- Updated README documentation to include Elasticsearch vector store integration #3688
- Corrected broken link in Content class javadoc documentation #3672
- Corrected various typos and spelling errors in documentation and code comments #3678
- Fixed documentation errors in SimpleLoggerAdvisor class #3638
- Corrected documentation examples and instructions for proper tool usage patterns 406c6f1
- Improved and updated the tools documentation with better examples and explanations #3624
- Corrected broken documentation link reference to ChatModel interface #3583
- Improved documentation for Spring AI advisors functionality a5fa666
- Enhanced documentation for MCP Server Boot Starter selection process 530ef30
- Updated OpenAI integration page with improved Vision section documentation fe002ad
- Improved ZhipuAI chat documentation with corrections and enhancements #3531
- Corrected documentation examples showing proper usage of tools and defaultTools configuration #3533
- Repaired broken links to ChatOptions and ChatOptions#builder() in web documentation #3447
- Corrected code snippets and examples in the openai-chat.adoc documentation file 95e9808
- Corrected spelling and formatting errors in cloud bindings documentation #3436
- Updated and improved Hugging Face integration documentation #3445
- Fixed incorrect ToolDefinition.builder() usage examples in documentation #3431
- Added documentation changes related to response format updates for Azure OpenAI chat integration #3434
- Revised and improved documentation for DeepSeek and Minimax chat providers #3408
- Fixed MIME types and standardized formatting in Bedrock Converse video modalities documentation #3413
- Removed duplicate NoOpTemplateRenderer mention in ChatClient documentation #3414
- Added description of embedding-field-name property in Elasticsearch documentation #3399
- Corrected typo from 'synch' to 'sync' in contribution documentation #3378
- Fixed advisor documentation to reference the correct dependencies a0c76a0
- Updated Mistral AI embeddings documentation for better clarity #3362
- Corrected broken links in documentation pointing to Media.java #3322
- Updated link to point to the official awesome-spring-ai repository #3328
- Updated custom API key example to use OpenAiChatModel.builder() pattern #3335
- Fixed and improved tools-related documentation #3292
- Improved documentation for the MCP (Model Context Protocol) Server Boot Starter #3279
- Corrected formatting issues with external links in the effective agents documentation #3275
- General typo corrections across various documentation files #3263
- Added proper title to documentation that was missing heading information 4d716d5
🔨 Dependency Upgrades
- Updated from swagger-annotations to swagger-annotations-jakarta for Jakarta EE compatibility 5a66d49
- Cleaned up explicit version specification for jackson-dataformat-xml in test dependencies b84d123
- Updated Spring Boot dependency to version 3.5.0 for latest features and improvements 8b9d93f
⚡ Performance
- Improved performance by reusing DocumentRowMapper instances to reduce redundant object creation 65f4f8c
- Improved logging performance by optimizing debug level logging calls in chat memory advisor components #3448
🔩 Build Updates
- Improved test structure and maintainability for method tool callback provider tests 9068789
- Enhanced builder pattern implementation for better code organization and usability in Vertex AI Gemini safety settings 1eb5055
- Applied diamond operator syntax improvements for better code clarity #3458
- Updated OpenAI audio tests to accommodate changes in OpenAI safety settings 6a19c2e
- Converted Qdrant vector store integration test to use OpenAI embedding model #3671
- Migrated AzureOpenAiAudioTranscriptionModelIT to use OkHttpClient for improved testing reliability #3665
- Updated JdbcChatMemoryRepositoryHsqldbAutoConfigIT to use JUnit 5 #3633
- Multiple cleanup activities including removing redundant null checks in OpenAI API Builder, cleaning up TextReader assignments, removing useless properties tags, and adding missing license headers #3654
- Added test coverage for FileDocumentWriter default constructor and various configuration options 3bcdb9d
- Cleaned up integration test by removing redundant environment variable checks for better test maintainability #3615
- Improved code quality by replacing direct error output with structured logging throughout the codebase #3600
- Cleaned up codebase by removing unused messageHistory implementation that was no longer needed #3574
- Enhanced test coverage with unit test to verify multiple method tool callbacks functionality with tool context 0ce9192
- Added test coverage for embeddingFieldName configuration in Elasticsearch VectorStore 25662fc
- Improved module design by making auto-configuration dependencies optional, reducing unnecessary coupling in docker compose integration #3502
- Enhanced module architecture by making auto-configuration dependencies optional in testcontainers integration #3465
- Optimized dependencies by using spring-web instead of spring-webflux in the spring-ai-retry module 7ba7727
- Updated continuous integration workflow to run against valid non-main branches c1a6a62
- Moved speech1.mp3 audio test file to proper src/test/resources location d03654b
- Added new GitHub Action workflows for auto-cherry-pick and backport-issue automation 3c900b9
- Added comprehensive unit tests for OpenAiStreamFunctionCallingHelper to improve code coverage and reliability #3312
- Updated gitignore to exclude qodana.yaml configuration file 7f93f03
- Applied checkstyle fixes to improve code consistency and formatting across the project 0c9d0e4
- Updated project version for next development iteration on 1.0.x branch 98a8dd4
🙏 Contributors
Thanks to all contributors who made this release possible:
- Ahmed Maruf (@ohMaruf)
- Ahoo Wang (@ahoowang)
- Alexandros Pappas (@apappascs)
- Andrea Vacondio (@andrea.vacondio)
- azurelee (@aliqingdong)
- chainHo (@chainhou)
- chen.xue (@huihaoweishui)
- Cho-Hyun-Seung (@Cho-Hyun-Seung)
- Christian Tzolov (@christian.tzolov)
- Dan Sarlo (@dsarlo-viso)
- Daniel Garnier-Moiroux (@git)
- Eddú Meléndez (@eddu.melendez)
- Eddú Meléndez Gonzales (@eddu.melendez)
- Emmanuel Essien-nta (@colourfulemmanuel)
- Filip Hrisafov (@filip.hrisafov)
- finyuq (@finyuq)
- Gareth Evans (@gareth)
- Gerrit Meier (@meistermeier)
- Giorgos Gaganis (@gaganis)
- Guan Huo (@9uanhuo)
- Guo (@ggndnn)
- han (@TheEterna)
- Henning Pöttker (@hpoettker)
- Hudson Luiz Sales Schumaker (@hudson.schumaker)
- Hyunsik Aeom (@aeomhs)
- Ilayaperumal Gopinathan (@ilayaperumalg)
- ingbyr (@zwk)
- Jan-Eric Harnack (@janericharnack)
- jay (@rlaakswo0687)
- Jemin Huh (@hjm1980)
- jonghoonpark (@dev)
- lambochen (@lambochen)
- loong-coder (@garen.mao)
- Lpepsi (@846179345)
- Mark Pollack (@mark.pollack)
- Mingyuan Wu (@my.wu)
- Nirsa (@KoreaNirsa)
- NOUNI El bachir (@enimiste)
- pavan kumar punna (@punnapavankumar9)
- Philipp Krenn (@xeraa)
- Piotr Kubowicz (@piotr.kubowicz)
- qwp_p (@RobinElysia)
- Sebastian Espei (@seblsebastian)
- Seokjae Lee (@seok9211)
- SexyProgrammer (@SexyProgrammer)
- shown (@yuluo08290126)
- SiBo Ai (@ai-afk)
- Sizhe Fan (@paoxiaomooo)
- Soby Chacko (@soby.chacko)
- Solomon Hsu (@solnone)
- spud (@jamespud)
- Sun Yuhan (@sunyuhan1998)
- Tran Ngoc Nhan (@ngocnhan.tran1996)
- WOONBE (@kepull2918)
- Yang Buyi (@yangbuyiya)
- Yanming Zhou (@zhouyanming)
- yiangjm (@yangjm-41)
- YunKui Lu (@luyunkui95)
- 徐功明 (@XuGongming)
- 老虎是条大狼狗 (@494509580)
- 난기수 (@nankisu0301)