|
19 | 19 | import java.util.ArrayList; |
20 | 20 | import java.util.List; |
21 | 21 |
|
| 22 | +import org.springframework.ai.chat.prompt.Prompt; |
22 | 23 | import reactor.core.publisher.Flux; |
23 | 24 | import reactor.core.publisher.Mono; |
24 | 25 | import reactor.core.scheduler.Scheduler; |
@@ -82,16 +83,22 @@ public ChatClientRequest before(ChatClientRequest chatClientRequest, AdvisorChai |
82 | 83 | // 1. Retrieve the chat memory for the current conversation. |
83 | 84 | List<Message> memoryMessages = this.chatMemory.get(conversationId); |
84 | 85 |
|
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(); |
88 | 90 |
|
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. |
90 | 97 | ChatClientRequest processedChatClientRequest = chatClientRequest.mutate() |
91 | | - .prompt(chatClientRequest.prompt().mutate().messages(processedMessages).build()) |
| 98 | + .prompt(prompt.mutate().messages(processedMessages).build()) |
92 | 99 | .build(); |
93 | 100 |
|
94 | | - // 4. Add the new user message to the conversation memory. |
| 101 | + // 5. Add the new user message to the conversation memory. |
95 | 102 | UserMessage userMessage = processedChatClientRequest.prompt().getUserMessage(); |
96 | 103 | this.chatMemory.add(conversationId, userMessage); |
97 | 104 |
|
|
0 commit comments