1 package fr.tiogars.chat.domains.prompt.services;
2
3 import fr.tiogars.chat.domains.prompt.entities.PromptEntity;
4 import fr.tiogars.chat.domains.prompt.models.PromptRequest;
5 import fr.tiogars.chat.domains.prompt.models.PromptResponse;
6 import fr.tiogars.chat.domains.prompt.repositories.PromptRepository;
7 import org.springframework.stereotype.Service;
8
9 import java.time.Duration;
10 import java.time.Instant;
11 import java.util.UUID;
12
13
14
15
16
17 @Service
18 public class PromptPersistenceService {
19
20 private final ChatClientAdapter chatClient;
21 private final PromptRepository promptRepository;
22
23 public PromptPersistenceService(ChatClientAdapter chatClient, PromptRepository promptRepository) {
24 this.chatClient = chatClient;
25 this.promptRepository = promptRepository;
26 }
27
28
29
30
31
32
33
34
35
36 public PromptResponse processAndSavePrompt(PromptRequest request, UUID userId, String sessionId) {
37 Instant start = Instant.now();
38
39 String response;
40 if (request.systemPrompt() != null && !request.systemPrompt().isBlank()) {
41 response = chatClient.call(request.systemPrompt(), request.prompt());
42 } else {
43 response = chatClient.call(request.prompt());
44 }
45
46 Instant end = Instant.now();
47 long processingTimeMs = Duration.between(start, end).toMillis();
48
49
50 PromptEntity entity = new PromptEntity(
51 request.prompt(),
52 request.systemPrompt(),
53 response,
54 request.model() != null ? request.model() : "unknown",
55 response.length(),
56 processingTimeMs,
57 "stop",
58 sessionId,
59 userId
60 );
61 promptRepository.save(entity);
62
63 return new PromptResponse(
64 response,
65 request.model() != null ? request.model() : "unknown",
66 response.length(),
67 processingTimeMs,
68 "stop"
69 );
70 }
71
72
73
74
75
76
77
78 public PromptResponse processPrompt(PromptRequest request) {
79 return processAndSavePrompt(request, null, null);
80 }
81 }