From 408ec20bbfa951ae333de32cabbc281d01c344e8 Mon Sep 17 00:00:00 2001 From: Yuriy Bezsonov Date: Thu, 2 Jul 2026 09:00:22 +0200 Subject: [PATCH] feat(apps): Migrate all apps to Spring AI 2.0 and Spring Boot 4.1 Upgrade every Maven module to Spring Boot 4.1.0 and consolidate all Spring AI usage on the 2.0.0 GA release (previously a mix of 1.1.7, 2.0.0-M6 and 2.0.0-RC2). Fix the breaking changes surfaced by the upgrade: - Rename artifact spring-ai-advisors-vector-store to spring-ai-vector-store-advisor. - Move @McpTool from org.springaicommunity.mcp.annotation to org.springframework.ai.mcp.annotation. - Replace removed McpSyncClientCustomizer with the generic McpClientCustomizer. - Replace removed PromptChatMemoryAdvisor with MessageChatMemoryAdvisor. - ChatClient.Builder.defaultOptions now takes a ChatOptions.Builder instead of a built ChatOptions; update call sites and tests. - OllamaChatModel.Builder.defaultOptions renamed to options. - Migrate direct Jackson databind usage to Jackson 3 (tools.jackson) where Spring AI 2.0 no longer brings Jackson 2 transitively. All 23 modules compile (mvn clean test-compile) and the affected unit tests pass. Also improve the Dependabot config: group Spring, Maven plugins, test tooling, Kubernetes, Docker images and GitHub Actions so coordinated upgrades arrive as single reviewable PRs instead of dozens. --- .github/dependabot.yml | 44 ++++++++++++++++++- apps/ai-jvm-analyzer/pom.xml | 4 +- .../ai/jvmanalyzer/GitHubSourceCodeTool.java | 2 +- apps/aiagent-agentcore/aiagent/pom.xml | 6 +-- .../aiagent-agentcore/backoffice/trip/pom.xml | 2 +- apps/aiagent/pom.xml | 4 +- apps/java-spring-ai-agents/aiagent/pom.xml | 2 +- .../backoffice/tools/pom.xml | 2 +- .../backoffice/trip/pom.xml | 2 +- apps/perf-analyzer/pom.xml | 4 +- apps/perf-collector/pom.xml | 2 +- apps/unicorn-spring-ai-agent/pom.xml | 6 +-- apps/unicorn-store-spring/pom.xml | 2 +- samples/quality-assurance/ai-agent/pom.xml | 4 +- .../service/ChatClientEvaluatorTest.java | 2 +- samples/quality-assurance/weather/pom.xml | 4 +- .../com/example/weather/WeatherTools.java | 2 +- .../weather/McpToolsIntegrationTest.java | 2 +- samples/security/apikey/ai-agent/pom.xml | 4 +- samples/security/apikey/weather/pom.xml | 4 +- .../com/example/weather/WeatherTools.java | 2 +- samples/security/oauth/ai-agent/pom.xml | 4 +- .../example/ai/agent/McpConfiguration.java | 5 ++- .../oauth/authorization-server/pom.xml | 4 +- samples/security/oauth/weather/pom.xml | 4 +- .../com/example/weather/WeatherTools.java | 2 +- samples/spring-ai-agent/pom.xml | 6 +-- .../ExternalizedMemoryAgentController.java | 10 ++--- .../controller/MemoryAgentController.java | 10 ++--- .../RagPgVectorAgentController.java | 4 +- .../controller/StatelessAgentController.java | 4 +- ...ExternalizedMemoryAgentControllerTest.java | 4 +- .../controller/MemoryAgentControllerTest.java | 4 +- samples/spring-ai-simple-chat-client/pom.xml | 4 +- samples/spring-cloud-function-demo/pom.xml | 2 +- 35 files changed, 104 insertions(+), 69 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b5e08518..6ad0ceb3 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -2,6 +2,10 @@ # package ecosystems to update and where the package manifests are located. # Please see the documentation for all configuration options: # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +# +# Grouping strategy: related dependencies that are released and upgraded +# together are bundled into a single PR to cut review noise. Anything that +# does not match a group still gets its own PR (Dependabot's default). version: 2 updates: @@ -10,16 +14,50 @@ updates: - "**/*" schedule: interval: "monthly" + open-pull-requests-limit: 15 groups: + # AWS SDK for Java artifacts are versioned in lockstep. awssdk: patterns: - "software.amazon.awssdk:*" - open-pull-requests-limit: 15 + # Spring Boot, Spring Framework, Spring AI and the Spring-adjacent + # ecosystem move together on coordinated release trains. Bundling them + # keeps a Boot/Spring AI upgrade to a single reviewable PR per module. + spring: + patterns: + - "org.springframework:*" + - "org.springframework.*:*" + - "org.springaicommunity:*" + - "io.awspring.cloud:*" + # Build-time Maven plugins. + maven-plugins: + patterns: + - "org.apache.maven.plugins:*" + - "org.graalvm.buildtools:*" + - "io.spring.javaformat:*" + - "com.googlecode.maven-download-plugin:*" + # Test tooling. + testing: + patterns: + - "org.testcontainers:*" + - "*testcontainers*" + - "com.microsoft.playwright:*" + # Kubernetes Java client artifacts release together. + kubernetes: + patterns: + - "io.kubernetes:*" - package-ecosystem: docker directories: - "**/*" schedule: interval: "monthly" + groups: + docker-images: + patterns: + - "*" + update-types: + - "minor" + - "patch" - package-ecosystem: pip directory: "/infra/scripts/setup/thread-dump-lambda" schedule: @@ -37,3 +75,7 @@ updates: directory: "/" schedule: interval: "monthly" + groups: + github-actions: + patterns: + - "*" diff --git a/apps/ai-jvm-analyzer/pom.xml b/apps/ai-jvm-analyzer/pom.xml index b204a1c4..266c951d 100644 --- a/apps/ai-jvm-analyzer/pom.xml +++ b/apps/ai-jvm-analyzer/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example.ai @@ -21,7 +21,7 @@ 25 UTF-8 UTF-8 - 1.1.7 + 2.0.0 diff --git a/apps/ai-jvm-analyzer/src/main/java/com/example/ai/jvmanalyzer/GitHubSourceCodeTool.java b/apps/ai-jvm-analyzer/src/main/java/com/example/ai/jvmanalyzer/GitHubSourceCodeTool.java index 9ec792cb..58eda963 100644 --- a/apps/ai-jvm-analyzer/src/main/java/com/example/ai/jvmanalyzer/GitHubSourceCodeTool.java +++ b/apps/ai-jvm-analyzer/src/main/java/com/example/ai/jvmanalyzer/GitHubSourceCodeTool.java @@ -1,6 +1,6 @@ package com.example.ai.jvmanalyzer; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ai.tool.annotation.Tool; diff --git a/apps/aiagent-agentcore/aiagent/pom.xml b/apps/aiagent-agentcore/aiagent/pom.xml index acb9cc07..ba2b66ba 100644 --- a/apps/aiagent-agentcore/aiagent/pom.xml +++ b/apps/aiagent-agentcore/aiagent/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example @@ -16,7 +16,7 @@ 25 - 2.0.0-M6 + 2.0.0 @@ -59,7 +59,7 @@ org.springframework.ai - spring-ai-advisors-vector-store + spring-ai-vector-store-advisor diff --git a/apps/aiagent-agentcore/backoffice/trip/pom.xml b/apps/aiagent-agentcore/backoffice/trip/pom.xml index 36c370a4..16b89817 100644 --- a/apps/aiagent-agentcore/backoffice/trip/pom.xml +++ b/apps/aiagent-agentcore/backoffice/trip/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example diff --git a/apps/aiagent/pom.xml b/apps/aiagent/pom.xml index 37f3512c..8a914296 100644 --- a/apps/aiagent/pom.xml +++ b/apps/aiagent/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example @@ -28,7 +28,7 @@ 25 - 2.0.0-RC2 + 2.0.0 diff --git a/apps/java-spring-ai-agents/aiagent/pom.xml b/apps/java-spring-ai-agents/aiagent/pom.xml index d995c00b..b817ad23 100644 --- a/apps/java-spring-ai-agents/aiagent/pom.xml +++ b/apps/java-spring-ai-agents/aiagent/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example diff --git a/apps/java-spring-ai-agents/backoffice/tools/pom.xml b/apps/java-spring-ai-agents/backoffice/tools/pom.xml index e5df4a14..6021ac28 100644 --- a/apps/java-spring-ai-agents/backoffice/tools/pom.xml +++ b/apps/java-spring-ai-agents/backoffice/tools/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example diff --git a/apps/java-spring-ai-agents/backoffice/trip/pom.xml b/apps/java-spring-ai-agents/backoffice/trip/pom.xml index 36c370a4..16b89817 100644 --- a/apps/java-spring-ai-agents/backoffice/trip/pom.xml +++ b/apps/java-spring-ai-agents/backoffice/trip/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example diff --git a/apps/perf-analyzer/pom.xml b/apps/perf-analyzer/pom.xml index 038e58bb..70b7a9c0 100644 --- a/apps/perf-analyzer/pom.xml +++ b/apps/perf-analyzer/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 @@ -19,7 +19,7 @@ 25 25 UTF-8 - 2.0.0-M6 + 2.0.0 2.46.6 26.0.0 diff --git a/apps/perf-collector/pom.xml b/apps/perf-collector/pom.xml index 1405fbef..4ee948f0 100644 --- a/apps/perf-collector/pom.xml +++ b/apps/perf-collector/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 diff --git a/apps/unicorn-spring-ai-agent/pom.xml b/apps/unicorn-spring-ai-agent/pom.xml index 7566d02b..95e465db 100644 --- a/apps/unicorn-spring-ai-agent/pom.xml +++ b/apps/unicorn-spring-ai-agent/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.unicorn @@ -28,7 +28,7 @@ 25 - 1.1.7 + 2.0.0 @@ -66,7 +66,7 @@ org.springframework.ai - spring-ai-advisors-vector-store + spring-ai-vector-store-advisor org.springframework.ai diff --git a/apps/unicorn-store-spring/pom.xml b/apps/unicorn-store-spring/pom.xml index ded98662..68d058af 100644 --- a/apps/unicorn-store-spring/pom.xml +++ b/apps/unicorn-store-spring/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.unicorn diff --git a/samples/quality-assurance/ai-agent/pom.xml b/samples/quality-assurance/ai-agent/pom.xml index 4e3603e0..2d2dbed6 100644 --- a/samples/quality-assurance/ai-agent/pom.xml +++ b/samples/quality-assurance/ai-agent/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example @@ -28,7 +28,7 @@ 25 - 2.0.0-M6 + 2.0.0 0.0.3 2.0.5 diff --git a/samples/quality-assurance/ai-agent/src/test/java/com/example/ai/agent/service/ChatClientEvaluatorTest.java b/samples/quality-assurance/ai-agent/src/test/java/com/example/ai/agent/service/ChatClientEvaluatorTest.java index 93eaa8b0..cdd1a8cf 100644 --- a/samples/quality-assurance/ai-agent/src/test/java/com/example/ai/agent/service/ChatClientEvaluatorTest.java +++ b/samples/quality-assurance/ai-agent/src/test/java/com/example/ai/agent/service/ChatClientEvaluatorTest.java @@ -54,7 +54,7 @@ public void setup() { OllamaApi ollamaApi = OllamaApi.builder().baseUrl(endpoint).build(); evaluationModel = OllamaChatModel.builder() .ollamaApi(ollamaApi) - .defaultOptions(OllamaChatOptions.builder() + .options(OllamaChatOptions.builder() .model(EVALUATION_MODEL_ID) .build()) .modelManagementOptions(ModelManagementOptions.builder() diff --git a/samples/quality-assurance/weather/pom.xml b/samples/quality-assurance/weather/pom.xml index 9b4827a8..b20b65fd 100644 --- a/samples/quality-assurance/weather/pom.xml +++ b/samples/quality-assurance/weather/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example @@ -28,7 +28,7 @@ 25 - 1.1.7 + 2.0.0 diff --git a/samples/quality-assurance/weather/src/main/java/com/example/weather/WeatherTools.java b/samples/quality-assurance/weather/src/main/java/com/example/weather/WeatherTools.java index b6d245af..066ffd8a 100644 --- a/samples/quality-assurance/weather/src/main/java/com/example/weather/WeatherTools.java +++ b/samples/quality-assurance/weather/src/main/java/com/example/weather/WeatherTools.java @@ -2,7 +2,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springaicommunity.mcp.annotation.McpTool; +import org.springframework.ai.mcp.annotation.McpTool; import org.springframework.stereotype.Component; /** diff --git a/samples/quality-assurance/weather/src/test/java/com/example/weather/McpToolsIntegrationTest.java b/samples/quality-assurance/weather/src/test/java/com/example/weather/McpToolsIntegrationTest.java index 114f206a..0233c269 100644 --- a/samples/quality-assurance/weather/src/test/java/com/example/weather/McpToolsIntegrationTest.java +++ b/samples/quality-assurance/weather/src/test/java/com/example/weather/McpToolsIntegrationTest.java @@ -1,6 +1,6 @@ package com.example.weather; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import io.modelcontextprotocol.client.McpClient; import io.modelcontextprotocol.client.McpSyncClient; import io.modelcontextprotocol.client.transport.HttpClientStreamableHttpTransport; diff --git a/samples/security/apikey/ai-agent/pom.xml b/samples/security/apikey/ai-agent/pom.xml index 40193969..f4813d63 100644 --- a/samples/security/apikey/ai-agent/pom.xml +++ b/samples/security/apikey/ai-agent/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example @@ -28,7 +28,7 @@ 25 - 1.1.7 + 2.0.0 0.0.3 diff --git a/samples/security/apikey/weather/pom.xml b/samples/security/apikey/weather/pom.xml index 7093deb3..cea5dcc3 100644 --- a/samples/security/apikey/weather/pom.xml +++ b/samples/security/apikey/weather/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example @@ -28,7 +28,7 @@ 25 - 1.1.7 + 2.0.0 0.1.12 diff --git a/samples/security/apikey/weather/src/main/java/com/example/weather/WeatherTools.java b/samples/security/apikey/weather/src/main/java/com/example/weather/WeatherTools.java index f07c2f10..e897fe29 100644 --- a/samples/security/apikey/weather/src/main/java/com/example/weather/WeatherTools.java +++ b/samples/security/apikey/weather/src/main/java/com/example/weather/WeatherTools.java @@ -2,7 +2,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springaicommunity.mcp.annotation.McpTool; +import org.springframework.ai.mcp.annotation.McpTool; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Component; diff --git a/samples/security/oauth/ai-agent/pom.xml b/samples/security/oauth/ai-agent/pom.xml index d0c402c9..d3008545 100644 --- a/samples/security/oauth/ai-agent/pom.xml +++ b/samples/security/oauth/ai-agent/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example @@ -28,7 +28,7 @@ 25 - 1.1.7 + 2.0.0 0.1.12 diff --git a/samples/security/oauth/ai-agent/src/main/java/com/example/ai/agent/McpConfiguration.java b/samples/security/oauth/ai-agent/src/main/java/com/example/ai/agent/McpConfiguration.java index b26e3297..5cbef883 100644 --- a/samples/security/oauth/ai-agent/src/main/java/com/example/ai/agent/McpConfiguration.java +++ b/samples/security/oauth/ai-agent/src/main/java/com/example/ai/agent/McpConfiguration.java @@ -1,9 +1,10 @@ package com.example.ai.agent; +import io.modelcontextprotocol.client.McpClient; import io.modelcontextprotocol.client.transport.customizer.McpSyncHttpClientRequestCustomizer; import org.springaicommunity.mcp.security.client.sync.AuthenticationMcpTransportContextProvider; import org.springaicommunity.mcp.security.client.sync.oauth2.http.client.OAuth2AuthorizationCodeSyncHttpRequestCustomizer; -import org.springframework.ai.mcp.customizer.McpSyncClientCustomizer; +import org.springframework.ai.mcp.customizer.McpClientCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager; @@ -20,7 +21,7 @@ McpSyncHttpClientRequestCustomizer requestCustomizer(OAuth2AuthorizedClientManag } @Bean - McpSyncClientCustomizer syncClientCustomizer() { + McpClientCustomizer syncClientCustomizer() { return (name, syncSpec) -> syncSpec.transportContextProvider(new AuthenticationMcpTransportContextProvider()); } diff --git a/samples/security/oauth/authorization-server/pom.xml b/samples/security/oauth/authorization-server/pom.xml index d9a40db2..8c868313 100644 --- a/samples/security/oauth/authorization-server/pom.xml +++ b/samples/security/oauth/authorization-server/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 org.aws.samples @@ -14,7 +14,7 @@ 25 - 1.1.7 + 2.0.0 0.1.12 diff --git a/samples/security/oauth/weather/pom.xml b/samples/security/oauth/weather/pom.xml index 1540f3d4..8af927d3 100644 --- a/samples/security/oauth/weather/pom.xml +++ b/samples/security/oauth/weather/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.example @@ -28,7 +28,7 @@ 25 - 1.1.7 + 2.0.0 0.1.12 diff --git a/samples/security/oauth/weather/src/main/java/com/example/weather/WeatherTools.java b/samples/security/oauth/weather/src/main/java/com/example/weather/WeatherTools.java index f07c2f10..e897fe29 100644 --- a/samples/security/oauth/weather/src/main/java/com/example/weather/WeatherTools.java +++ b/samples/security/oauth/weather/src/main/java/com/example/weather/WeatherTools.java @@ -2,7 +2,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springaicommunity.mcp.annotation.McpTool; +import org.springframework.ai.mcp.annotation.McpTool; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Component; diff --git a/samples/spring-ai-agent/pom.xml b/samples/spring-ai-agent/pom.xml index f367a0a5..140d56f6 100644 --- a/samples/spring-ai-agent/pom.xml +++ b/samples/spring-ai-agent/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.aws.workshop.ai @@ -28,7 +28,7 @@ 25 - 1.1.7 + 2.0.0 42.7.11 3.4.5 1.21.4 @@ -55,7 +55,7 @@ org.springframework.ai - spring-ai-advisors-vector-store + spring-ai-vector-store-advisor org.springframework.ai diff --git a/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/ExternalizedMemoryAgentController.java b/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/ExternalizedMemoryAgentController.java index 6c5dc5cf..4aebf7aa 100644 --- a/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/ExternalizedMemoryAgentController.java +++ b/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/ExternalizedMemoryAgentController.java @@ -2,7 +2,7 @@ import com.aws.workshop.ai.agent.memory.ExternalChatMemoryRepository; import org.springframework.ai.chat.client.ChatClient; -import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor; +import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor; import org.springframework.ai.chat.memory.ChatMemory; import org.springframework.ai.chat.memory.MessageWindowChatMemory; import org.springframework.ai.chat.prompt.ChatOptions; @@ -14,7 +14,7 @@ public class ExternalizedMemoryAgentController { private ChatClient chatClient; private final ChatClient.Builder chatClientBuilder; - private final PromptChatMemoryAdvisor promptChatMemoryAdvisor; + private final MessageChatMemoryAdvisor promptChatMemoryAdvisor; public ExternalizedMemoryAgentController(ChatClient chatClient, ChatClient.Builder chatClientBuilder, ExternalChatMemoryRepository externalChatMemoryRepository) { this.chatClient = chatClient; @@ -22,7 +22,7 @@ public ExternalizedMemoryAgentController(ChatClient chatClient, ChatClient.Build MessageWindowChatMemory chatMemory = MessageWindowChatMemory.builder() .chatMemoryRepository(externalChatMemoryRepository) .build(); - this.promptChatMemoryAdvisor = PromptChatMemoryAdvisor.builder(chatMemory).build(); + this.promptChatMemoryAdvisor = MessageChatMemoryAdvisor.builder(chatMemory).build(); } @PostMapping("/chat") @@ -49,9 +49,7 @@ public Flux chatStream(@RequestBody String prompt) { @PostMapping("/model") public void updateModel(@RequestParam String model) { - var chatOptions = ChatOptions.builder() - .model(model).build(); chatClient = chatClientBuilder - .defaultOptions(chatOptions).build(); + .defaultOptions(ChatOptions.builder().model(model)).build(); } } diff --git a/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/MemoryAgentController.java b/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/MemoryAgentController.java index 93f2dcba..36cb6dd4 100644 --- a/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/MemoryAgentController.java +++ b/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/MemoryAgentController.java @@ -1,7 +1,7 @@ package com.aws.workshop.ai.agent.controller; import org.springframework.ai.chat.client.ChatClient; -import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor; +import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor; import org.springframework.ai.chat.memory.ChatMemory; import org.springframework.ai.chat.memory.InMemoryChatMemoryRepository; import org.springframework.ai.chat.memory.MessageWindowChatMemory; @@ -14,7 +14,7 @@ public class MemoryAgentController { private ChatClient chatClient; private final ChatClient.Builder chatClientBuilder; - private final PromptChatMemoryAdvisor promptChatMemoryAdvisor; + private final MessageChatMemoryAdvisor promptChatMemoryAdvisor; public MemoryAgentController(ChatClient chatClient, ChatClient.Builder chatClientBuilder) { this.chatClient = chatClient; @@ -23,7 +23,7 @@ public MemoryAgentController(ChatClient chatClient, ChatClient.Builder chatClien MessageWindowChatMemory.builder() .chatMemoryRepository(new InMemoryChatMemoryRepository()) .build(); - this.promptChatMemoryAdvisor = PromptChatMemoryAdvisor.builder(memory).build(); + this.promptChatMemoryAdvisor = MessageChatMemoryAdvisor.builder(memory).build(); } @PostMapping("/chat") @@ -50,9 +50,7 @@ public Flux chatStream(@RequestBody String prompt) { @PostMapping("/model") public void updateModel(@RequestParam String model) { - var chatOptions = ChatOptions.builder() - .model(model).build(); chatClient = chatClientBuilder - .defaultOptions(chatOptions).build(); + .defaultOptions(ChatOptions.builder().model(model)).build(); } } \ No newline at end of file diff --git a/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/RagPgVectorAgentController.java b/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/RagPgVectorAgentController.java index cf349085..ecf4adfe 100644 --- a/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/RagPgVectorAgentController.java +++ b/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/RagPgVectorAgentController.java @@ -52,9 +52,7 @@ public Flux chatStream(@RequestBody String prompt) { @PostMapping("/model") public void updateModel(@RequestParam String model) { - ChatOptions chatOptions = ChatOptions.builder() - .model(model).build(); chatClient = chatClientBuilder - .defaultOptions(chatOptions).build(); + .defaultOptions(ChatOptions.builder().model(model)).build(); } } diff --git a/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/StatelessAgentController.java b/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/StatelessAgentController.java index 774ccc53..3c302831 100644 --- a/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/StatelessAgentController.java +++ b/samples/spring-ai-agent/src/main/java/com/aws/workshop/ai/agent/controller/StatelessAgentController.java @@ -41,9 +41,7 @@ public Flux chatStream(@RequestBody String prompt) { @PostMapping("/model") public void updateModel(@RequestParam String model) { - var chatOptions = ChatOptions.builder() - .model(model).build(); chatClient = chatClientBuilder - .defaultOptions(chatOptions).build(); + .defaultOptions(ChatOptions.builder().model(model)).build(); } } diff --git a/samples/spring-ai-agent/src/test/java/com/aws/workshop/ai/agent/controller/ExternalizedMemoryAgentControllerTest.java b/samples/spring-ai-agent/src/test/java/com/aws/workshop/ai/agent/controller/ExternalizedMemoryAgentControllerTest.java index 48b9b8c7..87d2b5a2 100644 --- a/samples/spring-ai-agent/src/test/java/com/aws/workshop/ai/agent/controller/ExternalizedMemoryAgentControllerTest.java +++ b/samples/spring-ai-agent/src/test/java/com/aws/workshop/ai/agent/controller/ExternalizedMemoryAgentControllerTest.java @@ -85,7 +85,7 @@ void shouldUpdateModel() throws Exception { // Given String modelName = "test-model"; - when(chatClientBuilder.defaultOptions(any(ChatOptions.class))).thenReturn(chatClientBuilder); + when(chatClientBuilder.defaultOptions(any(ChatOptions.Builder.class))).thenReturn(chatClientBuilder); when(chatClientBuilder.build()).thenReturn(chatClient); // When & Then @@ -94,7 +94,7 @@ void shouldUpdateModel() throws Exception { .andExpect(status().isOk()); verify(chatClientBuilder).defaultOptions(argThat(options -> - options.getModel() != null && options.getModel().equals(modelName))); + options.build().getModel() != null && options.build().getModel().equals(modelName))); verify(chatClientBuilder).build(); } } diff --git a/samples/spring-ai-agent/src/test/java/com/aws/workshop/ai/agent/controller/MemoryAgentControllerTest.java b/samples/spring-ai-agent/src/test/java/com/aws/workshop/ai/agent/controller/MemoryAgentControllerTest.java index c85ca71c..75482edc 100644 --- a/samples/spring-ai-agent/src/test/java/com/aws/workshop/ai/agent/controller/MemoryAgentControllerTest.java +++ b/samples/spring-ai-agent/src/test/java/com/aws/workshop/ai/agent/controller/MemoryAgentControllerTest.java @@ -84,7 +84,7 @@ void shouldHandleChatStreamRequest() throws Exception { void shouldUpdateModel() throws Exception { // Given String modelName = "test-model"; - when(chatClientBuilder.defaultOptions(any(ChatOptions.class))).thenReturn(chatClientBuilder); + when(chatClientBuilder.defaultOptions(any(ChatOptions.Builder.class))).thenReturn(chatClientBuilder); when(chatClientBuilder.build()).thenReturn(chatClient); // When & Then @@ -93,7 +93,7 @@ void shouldUpdateModel() throws Exception { .andExpect(status().isOk()); verify(chatClientBuilder).defaultOptions(argThat(options -> - (options.getModel() != null) && options.getModel().equals(modelName))); + (options.build().getModel() != null) && options.build().getModel().equals(modelName))); verify(chatClientBuilder).build(); } } diff --git a/samples/spring-ai-simple-chat-client/pom.xml b/samples/spring-ai-simple-chat-client/pom.xml index bfd68a02..d6d69e41 100644 --- a/samples/spring-ai-simple-chat-client/pom.xml +++ b/samples/spring-ai-simple-chat-client/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.unicorn @@ -15,7 +15,7 @@ Simple Bedrock Chat Client for Spring AI 25 - 1.1.7 + 2.0.0 diff --git a/samples/spring-cloud-function-demo/pom.xml b/samples/spring-cloud-function-demo/pom.xml index fe7e1c38..1f5f51f7 100644 --- a/samples/spring-cloud-function-demo/pom.xml +++ b/samples/spring-cloud-function-demo/pom.xml @@ -4,7 +4,7 @@ org.springframework.boot spring-boot-starter-parent - 4.0.6 + 4.1.0 com.amazonaws.demo spring-cloud-function-demo