Skip to content

Commit 290d676

Browse files
committed
perf(chat-memory): pre-size merged message list and streamline prompt access
- Compute expectedSize from memoryMessages and instructions - Allocate processedMessages with expected capacity to reduce reallocations - Use a local prompt variable to avoid repeated method calls Signed-off-by: KoreaNirsa <[email protected]>
1 parent cbba9f1 commit 290d676

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/MessageChatMemoryAdvisor.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121

22+
import org.springframework.ai.chat.prompt.Prompt;
2223
import reactor.core.publisher.Flux;
2324
import reactor.core.publisher.Mono;
2425
import reactor.core.scheduler.Scheduler;
@@ -82,16 +83,22 @@ public ChatClientRequest before(ChatClientRequest chatClientRequest, AdvisorChai
8283
// 1. Retrieve the chat memory for the current conversation.
8384
List<Message> memoryMessages = this.chatMemory.get(conversationId);
8485

85-
// 2. Advise the request messages list.
86-
List<Message> processedMessages = new ArrayList<>(memoryMessages);
87-
processedMessages.addAll(chatClientRequest.prompt().getInstructions());
86+
// 2. Retrieve prompt & instructions and pre-compute expected size (memory + instructions) to reduce reallocations.
87+
Prompt prompt = chatClientRequest.prompt();
88+
List<Message> instructions = prompt.getInstructions();
89+
int expectedSize = memoryMessages.size() + instructions.size();
8890

89-
// 3. Create a new request with the advised messages.
91+
// 3. Advise the request messages list.
92+
List<Message> processedMessages = new ArrayList<>(expectedSize);
93+
processedMessages.addAll(memoryMessages);
94+
processedMessages.addAll(prompt.getInstructions());
95+
96+
// 4. Create a new request with the advised messages.
9097
ChatClientRequest processedChatClientRequest = chatClientRequest.mutate()
91-
.prompt(chatClientRequest.prompt().mutate().messages(processedMessages).build())
98+
.prompt(prompt.mutate().messages(processedMessages).build())
9299
.build();
93100

94-
// 4. Add the new user message to the conversation memory.
101+
// 5. Add the new user message to the conversation memory.
95102
UserMessage userMessage = processedChatClientRequest.prompt().getUserMessage();
96103
this.chatMemory.add(conversationId, userMessage);
97104

0 commit comments

Comments
 (0)