Skip to content

Releases

v2.1.0-RC2

v2.1.0-RC2 Pre-release
Pre-release

Choose a tag to compare

@spring-builds spring-builds released this 05 Nov 16:06
1bd756c

⭐ New Features

  • Expose the version-checked append on SessionService #7314
  • Add server support for the MCP 2026-07-28 ("modern") protocol revision #7284
  • Implement OllamaDecisionModel #7261
  • Add DecisionToolIndex for tool search #7253
  • Add decision-based RAG document post-processors #7252
  • Add SystemOneDecisionModel #7249
  • Stream tool call argument deltas #7233
  • Introduce DecisionModel API #7205
  • Upgrade Anthropic Java SDK to 3.4.0 #7306
  • Add upsert and query-embedding search to Chroma #7230
  • Add upsert and query-embedding search to MariaDB #7235
  • Add upsert and query-embedding search to MongoDB Atlas #7272
  • Add upsert and query-embedding search to Typesense #7303
  • Add upsert and query-embedding search to Neo4j #7318
  • Include cached tokens in Anthropic and Bedrock prompt tokens #7268

vector store

❤️ Contributors

Thank you to all the contributors who worked on this release:

@ThomasVitale, @dimitarproynov, @sobychacko, @iuliiasobolevska, @Ajax-1 , and @tzolov

v2.1.0-RC1

v2.1.0-RC1 Pre-release
Pre-release

Choose a tag to compare

@spring-builds spring-builds released this 23 Oct 14:56

For upgrading from 2.1.0-M1 to 2.1.0-RC1, please refer to the upgrade notes here.

⭐ New Features

  • Deprecate ChatMemory in favor of session memory #7186
  • Add upsert and query-embedding search to OpenSearch #7177
  • Fail fast on unsupported upsert and vector search #7176
  • Add session memory: an event log with turn-aware compaction #7161
  • Add tool call confirmation to tool calling #7157
  • Migrate DeepSeek chat model to message parts #7128
  • Migrate OpenAI chat model to message parts #7107
  • Fail clearly on out-of-range OpenAI Responses usage counts #7052
  • Support for Text Chunking with Overlap in TokenTextSplitter #2123

🔨 Dependency Upgrades

  • Upgrade to Kotlin 2.4.21 #7168
  • Upgrade Tika to 4.0.0 in spring-ai-tika-document-reader #7068

❤️ Contributors

Thank you to all the contributors who worked on this release:

@56wj, @Ashfaqbs, @OreOreDa, @Rainmemery, @dimitarproynov, @iuliiasobolevska, @sedhossein, @sobychacko, @ss-bhatt, @stack3mpty, and @tzolov

v2.0.2

Choose a tag to compare

@spring-builds spring-builds released this 23 Oct 14:56
fcb4de0

For upgrading from 2.0.1 to 2.0.2, please refer to the upgrade notes here.

⭐ New Features

  • Upgrade the Anthropic Java SDK to 2.72.0 #7164
  • Add observability support for TextToSpeechModel, TranscriptionModel and StabilityAiImageModel #7141
  • Configure Redis vector store metadata fields #6870
  • Add customizers for stateless MCP servers #6539

🐞 Bug Fixes

  • Fix numeric filters in Cassandra vector store #7117
  • Fix StructuredOutputValidationAdvisor repeating tool call requests #7100
  • Handle Ollama responses without a message #7066
  • Return final answer first in AnthropicChatModel #7001
  • Honor disabled reasoning in tool history #6984
  • Include thinking text in Anthropic streaming chunks #6982
  • Fix Neo4j chat memory index properties #6967
  • Fix invalid JSON in Bedrock tool-call arguments #6963
  • Backfill additionalProperties: false in OpenAI strict tool schemas #6865
  • Restore honoring the configured OpenAI timeout #6837
  • Fix JsoupDocumentReader dropping relative link URLs #6803
  • Close the resource stream in TextReader #6797
  • Fix tool call extraction in GoogleGenAiChatModel for mixed content responses #5468

📔 Documentation

  • Document Anthropic server-side spans in traces #7165
  • Correct stale API names in AI metadata docs #7032
  • docs: document OpenAI reasoning effort property #6943
  • Document MCP client scope and session boundaries #6820

🔨 Dependency Upgrades

  • Upgrade OpenAI Java SDK to 4.80.0 #7170
  • Upgrade AWS SDK and Bedrock runtime to 2.55.14 #7169

❤️ Contributors

Thank you to all the contributors who worked on this release:

@CodeTrainerMan, @CryoThrust, @JamesBLewis, @Lubaoshuai, @Rainmemery, @ashakirin, @chabinhwang, @chengwudi1, @chensishang, @dimitarproynov, @dlwldn30, @flex-ilsub, @herder, @ikaitist, @iuliiasobolevska, @jhpark1227, @jianran, @kezhenxu94, @lazer-dev, @martin-grofcik, @nicolaskrier, @pengjonas, @pengmoubuaixuexi, @rvullriede, @ryujungkyun, @seo92js, @sharanrenukeshbharmshetty, @sobychacko, @tzolov, @vinayreddykalluri, @wantaekchoi, @xujiantop-crypto, and @zxuhan

Spring AI 2.1.0-M1

Spring AI 2.1.0-M1 Pre-release
Pre-release

Choose a tag to compare

@spring-builds spring-builds released this 25 Sep 07:28

For upgrading from 2.0.1 to 2.1.0-M1, please refer to the upgrade notes here.

⭐ New Features

  • Add OpenAI Responses API support #7006
  • Add VectorStore.upsert for pre-computed embeddings #7002
  • Introduce MessagePart in AbstractMessage #6997

🔨 Dependency Upgrades

  • Upgrade Spring Boot to 4.2 #7003

❤️ Contributors

Thank you to all the contributors who worked on this release:

@dimitarproynov and @sobychacko

Spring AI 2.0.1

Choose a tag to compare

@spring-builds spring-builds released this 21 Aug 10:23

For upgrading from 2.0.0 to 2.0.1, please refer to the upgrade notes here.

For the detailed reference documentation on 2.0.1, please refer here

⭐ New Features

  • Harden Ollama integration tests against flakiness #6776
  • Retire deprecated Mistral AI chat models #6772
  • Document additional 2.0.1 breaking changes #6771
  • Support audio streaming in OpenAiAudioSpeechModel #6733
  • Add configurable tool call limits #6726
  • Enrich OpenAI transcription options and responses #6697
  • Update Couchbase vector store to use Spring Boot-managed client #6583
  • Remove explicit protobuf-java version properties #6552
  • Add ToolChoice support for Google GenAI chat model #6531
  • Remove fastjson2 dependency from spring-ai-azure-store #6508
  • Refactor Media builder to use typed data overloads #6481
  • Validate TokenTextSplitter builder arguments #6452
  • Support page ranges in PagePdfDocumentReader #6445
  • Revise DeepSeekApi #6428
  • GraalVM for mcp annotations doesn't work in Spring AI 2.0.0 #6427
  • Rename spring-ai-autoconfigure-model-chat-memory-redis #6416
  • Restore PDF media mapping in OpenAiChatModel #6410
  • Google Image generation support #6408
  • Remove unused field maxResults #6344
  • Confusing WARN log while AWS region resolving #5108
  • SpringAI does not follow the AWS SDK's default region resolution rules #823

🐞 Bug Fixes

  • Reserve Redis chat memory timestamps atomically #6784
  • Fix RedisChatMemoryRepository clear() #6783
  • Escape metadata values in Redis chat memory queries #6765
  • Validate resolved resource path #6764
  • Introduce maxSessions and sessionIdleTimeout #6760
  • Fix OpenAiAudioTranscriptionModel leaking the stream on cancellation #6759
  • Merge java-compile compilerArgs instead of overriding #6756
  • Default OpenAI tool-calling strict mode to false #6755
  • Use temporary directory for cache #6754
  • Handle malformed pdf in PdfDocumentReader #6753
  • Make tool resolution fallback configurable #6751
  • Use full length hash #6746
  • Correct ToolContext parameter detection #6744
  • Return a single Generation on ToolCallLimitExceededException #6742
  • Fix ToolCallingAdvisor streaming loop dropping doBeforeStream mutations #6737
  • Add instructions option to OpenAiAudioSpeechModel #6731
  • Apply MCP HTTP client request customizer beans #6716
  • Close OpenAI stream response on cancellation #6656
  • Validate text length to prevent StringIndexOutOfBoundsException for MarkdownCodeBlockCleaner #6645
  • Fix AnthropicChatOptions.timeout(Duration) being ignored outside model construction #6605
  • Close native resources in TransformersEmbeddingModel #6572
  • Fix OllamaChatModel prompt options not inheriting configured model #6567
  • Use Locale.ROOT for String uppercase/lowercase operations on wire/protocol values #6566
  • Handle null fields in Mistral AI moderation Categories and CategoryScores #6565
  • Fix Azure OpenAI authentication failure behind a TLS-inspecting proxy #6553
  • Fix OpenSearchVectorStore document deserialization #6550
  • Fix group precedence in MilvusFilterExpressionConverter #6543
  • Fix strict mode payload placement in OpenAiChatModel #6540
  • Align @McpTool exception handling with @Tool contract #6534
  • Fix MCP stdio connections without args #6533
  • Fix Milvus metadata integer values deserialized as Long instead of Double #6517
  • Fix OpenAI stream handling for empty tool_calls #6504
  • Fix shared mutable state in chat options builder clone() #6498
  • Fix tool-search reference extraction for parallel calls #6497
  • Fix incorrect assertions in CouchbaseSearchVectorStore.Builder #6490
  • Fix shared mutable state in AnthropicChatOptions.Builder.clone() #6487
  • Fix null parent for tool call observations in blocking mode #6475
  • Fix Milvus filters with custom metadata field #6470
  • Add tool-search advisor modules to BOM #6464
  • Use model-independent assertions for tool-call token usage #6461
  • Fix tool-search advisor auto-config ordering #6458
  • There is a bug in the openai streaming mode #6441
  • Validate PgVectorStore table schema after initialization #6438
  • Accumulate tool calling advisor usage #6424
  • Fix MarkdownCodeBlockCleaner discarding content of single-line fenced code blocks #6423
  • Merge streaming tool call deltas by index in OpenAiChatModel #6381
  • reasoningContent in metadata is always null when calling DeepSeek model via OpenAI API #6375
  • Fix genai thinking level validation #6339
  • Fix Microsoft Foundry URL path mode for proxy hosts #6180
  • Perform Optional unwrapping in OpenAiChatModel#buildGeneration #6009
  • Fix Streamable HTTP WebClient transport to accept SSE frames without event field #5783

📔 Documentation

Read more

Spring AI 2.0.0

Choose a tag to compare

@ilayaperumalg ilayaperumalg released this 12 Jun 15:14

For upgrading from 1.1.x to 2.0.0, please refer to the upgrade notes here.

For the detailed reference documentation on 2.0.0, please refer here

⭐ New Features

  • Update Google GenAI models #6406
  • Use only Jackson 2 in OpenAiChatModel #6392
  • Make org.springframework.ai.image.observation null-marked #6388
  • Polish Prompt #6387
  • Preserve OpenAI tool call additional properties #6365

🐞 Bug Fixes

  • Filter unsupported tool messages in CassandraChatMemoryRepository #6400
  • Filter unsupported tool messages in MongoChatMemoryRepository #6399
  • Filter unsupported tool messages in JdbcChatMemoryRepository #6398
  • Remove streamToolCallResponses from advisor builders #6391
  • Add missing promptCacheKey parameter in OpenAiChatOptions #6380

📔 Documentation

  • Update reference docs to reflect 2.0 API changes #6405
  • Add more guides #6401
  • Introduce CLAUDE.md and AGENTS.md #6376
  • Consolidate upgrade notes for 2.0.0 #6333

🔨 Dependency Upgrades

  • Upgrade to MCP SDK 2.0.0 #6385
  • Upgrade to Spring Boot 4.1.0 #6329

❤️ Contributors

Thank you to all the contributors who worked on this release:

@ericbottard, @guanxuc, @ilayaperumalg, @sdeleuze, @sdudzin, @tzolov, and @ultramancode

Spring AI 1.1.8

Choose a tag to compare

@ilayaperumalg ilayaperumalg released this 12 Jun 11:09

🐞 Bug Fixes

  • Add missing values to ZhiPuAiApi.ChatCompletionFinishReason #5532

📔 Documentation

  • Add a rate-limit metadata section to anthropic-chat.adoc #6175

🔨 Dependency Upgrades

  • Upgrade Spring Boot to 3.5.15 #6393
  • Upgrade MCP SDK to 0.18.3 #6362

❤️ Contributors

Thank you to all the contributors who worked on this release:

@demo-zexuan and @sobychacko

Spring AI 1.0.9

Choose a tag to compare

@ilayaperumalg ilayaperumalg released this 12 Jun 11:08

⭐ New Features

  • Deprecate Pixtral models #6148

🔨 Dependency Upgrades

  • Upgrade Spring Boot to 3.5.15 #6394
  • Upgrade MCP SDK to 0.18.3 #6361

2.0.0-RC2

2.0.0-RC2 Pre-release
Pre-release

Choose a tag to compare

@ilayaperumalg ilayaperumalg released this 09 Jun 21:14

⭐ New Features

  • Make Anthropic HTTP client configurable #6354
  • Restore compatibility with Spring Framework < 7.0.4 #6334
  • Make OpenAI HTTP Client configurable #6294

🐞 Bug Fixes

  • Fix BedrockProxyChatModel model option handling #6370
  • Fix spring-ai-autoconfigure-model-bedrock-ai dependencies #6368
  • 2.0.0-RC1 regression: additional dependency is needed for Bedrock SDK #6367
  • Always auto-register ToolCallingAdvisor to support runtime-injected tools #6349
  • Restore options replacing instead of merging in ChatModel #6336
  • Replay reasoning_content in OpenAI assistant history #6296
  • Fix OllamaChatModel dropping thinking field in multi-turn conversation history #6062
  • Binding failure for spring.ai.ollama.chat.think #4853

📔 Documentation

  • Document native structured output limitations for Ollama and OpenAI #6363
  • Rewrite CONTRIBUTING.adoc and convert it to CONTRIBUTING.md #6352
  • Fix tool callback example in user-controlled tool execution docs #6324

❤️ Contributors

Thank you to all the contributors who worked on this release:

@ThomasVitale, @ericbottard, @guanxuc, @ilayaperumalg, @sdeleuze, @sdudzin, @suryateja-g13, @tzolov, and @uc4w6c

Spring AI 2.0.0-RC1

Spring AI 2.0.0-RC1 Pre-release
Pre-release

Choose a tag to compare

@ilayaperumalg ilayaperumalg released this 06 Jun 00:53

⭐ 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 ToolSpec consumer API from ChatClient #6292
  • Remove Minimax dedicated support in favor of Anthropic one #6290
  • Remove internalToolExecutionEnabled #6289
  • Rename N() to n() in options builders #6285
  • Refine JdbcChatMemoryRepositoryDialect to 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 ReasoningEffort Javadoc #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