From e34f8372d2246ed4ca4bbf6fe629e94a13c1cffb Mon Sep 17 00:00:00 2001 From: YunKui Lu Date: Sat, 13 Dec 2025 17:20:44 +0800 Subject: [PATCH] fix:Advisor parameters lost when mutate ChatClient - Fixed issue where advisor parameters were lost when advisors were not present during ChatClient mutation. - Added test case mutateAdvisorParams to ensure correct parameter mutation handling. Signed-off-by: YunKui Lu --- .../ai/chat/client/DefaultChatClient.java | 6 +++++- .../ai/chat/client/ChatClientTests.java | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/DefaultChatClient.java b/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/DefaultChatClient.java index 47b305c8dda..bcf1b7ed18e 100644 --- a/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/DefaultChatClient.java +++ b/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/DefaultChatClient.java @@ -820,7 +820,11 @@ public Builder mutate() { .defaultToolNames(StringUtils.toStringArray(this.toolNames)); if (!CollectionUtils.isEmpty(this.advisors)) { - builder.defaultAdvisors(a -> a.advisors(this.advisors).params(this.advisorParams)); + builder.defaultAdvisors(a -> a.advisors(this.advisors)); + } + + if (!CollectionUtils.isEmpty(this.advisorParams)) { + builder.defaultAdvisors(a -> a.params(this.advisorParams)); } if (StringUtils.hasText(this.userText)) { diff --git a/spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/ChatClientTests.java b/spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/ChatClientTests.java index a7e38611d8a..6681d9f95cc 100644 --- a/spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/ChatClientTests.java +++ b/spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/ChatClientTests.java @@ -408,6 +408,20 @@ void mutateDefaults() { } + @Test + void mutateAdvisorParams() { + ChatClient defaultChatClient = ChatClient.builder(this.chatModel) + .defaultAdvisors(AdvisorParams.ENABLE_NATIVE_STRUCTURED_OUTPUT) + .build(); + + ChatClient mutatedChatClient = defaultChatClient.mutate().build(); + + ChatClient.ChatClientRequestSpec prompt = mutatedChatClient.prompt(); + + assertThat(((DefaultChatClient.DefaultChatClientRequestSpec) prompt).getAdvisorParams()) + .containsKey(ChatClientAttributes.STRUCTURED_OUTPUT_NATIVE.getKey()); + } + @Test void mutatePrompt() {