From c4c9754ade4741dbd5fb5aab9c9ee4ddbbc06928 Mon Sep 17 00:00:00 2001 From: eeaters <870905780@qq.com> Date: Tue, 2 Sep 2025 14:44:54 +0800 Subject: [PATCH 1/3] Refactor ChatResponse processing with Optional API - Replace if-else null checks with Optional chain - Improve code readability and maintain functional style Signed-off-by: eeaters <870905780@qq.com> --- .../advisor/PromptChatMemoryAdvisor.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java b/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java index de88715e896..46b75bed669 100644 --- a/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java +++ b/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java @@ -19,10 +19,13 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.ai.chat.model.ChatResponse; +import org.springframework.ai.chat.model.Generation; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Scheduler; @@ -142,17 +145,11 @@ public ChatClientRequest before(ChatClientRequest chatClientRequest, AdvisorChai public ChatClientResponse after(ChatClientResponse chatClientResponse, AdvisorChain advisorChain) { List assistantMessages = new ArrayList<>(); // Handle streaming case where we have a single result - if (chatClientResponse.chatResponse() != null && chatClientResponse.chatResponse().getResult() != null - && chatClientResponse.chatResponse().getResult().getOutput() != null) { - assistantMessages = List.of((Message) chatClientResponse.chatResponse().getResult().getOutput()); - } - else if (chatClientResponse.chatResponse() != null) { - assistantMessages = chatClientResponse.chatResponse() - .getResults() - .stream() - .map(g -> (Message) g.getOutput()) - .toList(); - } + Optional.of(chatClientResponse) + .map(ChatClientResponse::chatResponse) + .map(ChatResponse::getResult) + .map(Generation::getOutput) + .ifPresent(assistantMessages::add); if (!assistantMessages.isEmpty()) { this.chatMemory.add(this.getConversationId(chatClientResponse.context(), this.defaultConversationId), From 860ae68d5ea9e8523d5b2fca0b25060a8fb01735 Mon Sep 17 00:00:00 2001 From: YuJie Wan <31400063+eeaters@users.noreply.github.com> Date: Fri, 5 Sep 2025 09:32:26 +0800 Subject: [PATCH 2/3] fix: spring-javaformat:apply Signed-off-by: YuJie Wan <31400063+eeaters@users.noreply.github.com> --- .../ai/chat/client/advisor/PromptChatMemoryAdvisor.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java b/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java index 46b75bed669..8c70e33b592 100644 --- a/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java +++ b/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java @@ -146,10 +146,10 @@ public ChatClientResponse after(ChatClientResponse chatClientResponse, AdvisorCh List assistantMessages = new ArrayList<>(); // Handle streaming case where we have a single result Optional.of(chatClientResponse) - .map(ChatClientResponse::chatResponse) - .map(ChatResponse::getResult) - .map(Generation::getOutput) - .ifPresent(assistantMessages::add); + .map(ChatClientResponse::chatResponse) + .map(ChatResponse::getResult) + .map(Generation::getOutput) + .ifPresent(assistantMessages::add); if (!assistantMessages.isEmpty()) { this.chatMemory.add(this.getConversationId(chatClientResponse.context(), this.defaultConversationId), From 0f2dae78f0a1496c2f70a0bb7e59c9598cc86186 Mon Sep 17 00:00:00 2001 From: YuJie Wan <31400063+eeaters@users.noreply.github.com> Date: Fri, 5 Sep 2025 09:51:17 +0800 Subject: [PATCH 3/3] fix: import order Signed-off-by: YuJie Wan <31400063+eeaters@users.noreply.github.com> --- .../ai/chat/client/advisor/PromptChatMemoryAdvisor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java b/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java index 8c70e33b592..8a12f2af250 100644 --- a/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java +++ b/spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/PromptChatMemoryAdvisor.java @@ -24,8 +24,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.ai.chat.model.ChatResponse; -import org.springframework.ai.chat.model.Generation; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Scheduler; @@ -43,6 +41,8 @@ import org.springframework.ai.chat.messages.MessageType; import org.springframework.ai.chat.messages.SystemMessage; import org.springframework.ai.chat.messages.UserMessage; +import org.springframework.ai.chat.model.ChatResponse; +import org.springframework.ai.chat.model.Generation; import org.springframework.ai.chat.prompt.PromptTemplate; import org.springframework.util.Assert;