-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEmailGeneratorService.java
More file actions
85 lines (68 loc) · 2.72 KB
/
Copy pathEmailGeneratorService.java
File metadata and controls
85 lines (68 loc) · 2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.email.email_write_sb;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import java.util.Map;
@Service
public class EmailGeneratorService {
private final WebClient webClient;
@Value("${gemini.api.url}")
private String geminiApiUrl;
@Value("${gemini.api.key}")
private String geminiApiKey;
public EmailGeneratorService(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.build();
}
public String generateEmailReply(EmailRequest emailRequest) {
String prompt = buildPrompt(emailRequest);
if(prompt == null) return "";
Map<String, Object> requestBody = Map.of(
"contents", new Object[] {
Map.of("parts", new Object[]{
Map.of("text", prompt)
})
}
);
String response;
try {
response = webClient.post()
.uri(geminiApiUrl + geminiApiKey)
.header("Content-Type", "application/json")
.bodyValue(requestBody)
.retrieve()
.bodyToMono(String.class)
.block();
}
catch (Exception e) {
return e.getMessage();
}
return extractResponseContent(response);
}
private String extractResponseContent(String response) {
try {
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(response);
return rootNode.path("candidates")
.get(0)
.path("content")
.path("parts")
.get(0)
.path("text")
.asText();
} catch (Exception e) {
return "Error processing request: " + e.getMessage();
}
}
private String buildPrompt(EmailRequest emailRequest) {
StringBuilder prompt = new StringBuilder();
prompt.append(emailRequest.getEmailContent());
prompt.append("Generate a professional email reply for the following email content. Start with Sender's name. Please don't generate a subject line ");
if (emailRequest.getTone() != null && !emailRequest.getTone().isEmpty()) {
prompt.append("Use a ").append(emailRequest.getTone()).append(" tone.");
}
prompt.append("\nOriginal email: \n").append(emailRequest.getEmailContent());
return prompt.toString();
}
}