Skip to content

Commit 02659b3

Browse files
committed
Added memory test, improved security sample
1 parent d006273 commit 02659b3

File tree

6 files changed

+48
-37
lines changed

6 files changed

+48
-37
lines changed

samples/quality-assurance/ai-agent/src/main/java/com/example/ai/agent/service/ChatService.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import org.slf4j.Logger;
55
import org.slf4j.LoggerFactory;
66
import org.springframework.ai.chat.client.ChatClient;
7+
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
8+
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
79
import org.springframework.stereotype.Service;
810

911
@Service
@@ -33,8 +35,14 @@ public class ChatService {
3335

3436
public ChatService(DateTimeService dateTimeService,
3537
ChatClient.Builder chatClientBuilder) {
38+
39+
var chatMemory = MessageWindowChatMemory.builder()
40+
.maxMessages(20)
41+
.build();
42+
3643
this.chatClient = chatClientBuilder
3744
.defaultSystem(SYSTEM_PROMPT)
45+
.defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build())
3846
.defaultTools(dateTimeService)
3947
.build();
4048

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.example.ai.agent.service;
2+
3+
4+
import org.junit.jupiter.api.Test;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.boot.test.context.SpringBootTest;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
@SpringBootTest
11+
public class ChatClientMemoryTest {
12+
13+
@Autowired
14+
private ChatService chatService;
15+
16+
@Test
17+
public void shouldMemorizeMemoryContext() {
18+
// Test if the model knows basic facts
19+
String memoryAdvice = "My name is Andrei";
20+
chatService.processChat(memoryAdvice);
21+
22+
String question = "What is my name?";
23+
String response = chatService.processChat(question);
24+
System.out.println("=== DIRECT MODEL TEST ===");
25+
System.out.println("Question: " + question);
26+
System.out.println("Response: " + response);
27+
28+
assertThat(response).isNotNull().isNotEmpty();
29+
assertThat(response.toLowerCase()).contains("andrei");
30+
}
31+
}

samples/security/oauth/ai-agent/src/main/java/com/example/ai/agent/SecurityConfiguration.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@ class SecurityConfiguration {
1515
@Bean
1616
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
1717
return http
18-
.authorizeHttpRequests(auth -> auth
19-
.anyRequest().authenticated()
20-
)
21-
.oauth2Login(Customizer.withDefaults())
18+
.authorizeHttpRequests(auth -> auth.anyRequest().permitAll())
2219
.oauth2Client(Customizer.withDefaults())
2320
.csrf(CsrfConfigurer::disable)
2421
.build();
Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.example.ai.agent.controller;
22

33
import com.example.ai.agent.service.ChatService;
4+
import jakarta.servlet.http.HttpServletRequest;
45
import org.springframework.web.bind.annotation.*;
56

67
@RestController
@@ -14,40 +15,10 @@ public ChatController(ChatService chatService) {
1415
}
1516

1617
@PostMapping("chat")
17-
public String chat(@RequestBody ChatRequest request) {
18+
public String chat(@RequestBody ChatRequest request, HttpServletRequest httpRequest) {
19+
var headers = httpRequest.getHeaderNames();
1820
return chatService.processChat(request.prompt());
1921
}
2022

21-
@GetMapping("gui")
22-
public String chat() {
23-
String prompt = "Please give me all available hotels in Paris, Checkin 10.10.2025, checkout 15.10.2025";
24-
String chatResponse = chatService.processChat(prompt);
25-
26-
String currentHotel = """
27-
<h2>Available hotels %s</h2>
28-
<p>%s</p>
29-
<form action="" method="GET">
30-
<button type="submit">Clear</button>
31-
</form>
32-
""".formatted(prompt, chatResponse);
33-
34-
return """
35-
<h1>Demo controller</h1>
36-
%s
37-
38-
<hr>
39-
40-
<h2>Ask for the weather</h2>
41-
<p>In which city would you like to see the weather?</p>
42-
<form action="" method="GET">
43-
<input type="text" name="query" value="" placeholder="Paris" />
44-
<button type="submit">Ask the LLM</button>
45-
</form>
46-
47-
<hr>
48-
""".formatted(currentHotel);
49-
}
50-
51-
5223
public record ChatRequest(String prompt) {}
5324
}
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.example.ai.agent.controller;
22

3+
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
4+
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
35
import org.springframework.stereotype.Controller;
46
import org.springframework.web.bind.annotation.GetMapping;
57

68
@Controller
79
public class WebViewController {
810
@GetMapping("/")
9-
public String index() {
11+
public String index(@RegisteredOAuth2AuthorizedClient("authserver") OAuth2AuthorizedClient authorizedClient) {
12+
authorizedClient.getAccessToken();
1013
return "chat";
1114
}
1215
}

samples/security/oauth/ai-agent/src/main/resources/templates/chat.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,7 @@ <h1 class="text-3xl font-bold text-dev-accent">🤖 AI Agent</h1>
463463
} catch (error) {
464464
console.error('Error:', error);
465465
addMessage('Sorry, I encountered an error. Please try again.', 'ai');
466+
throw error
466467
}
467468
});
468469

0 commit comments

Comments
 (0)