diff --git a/src/main/java/com/olexyn/burnsmail/model/AMail.java b/src/main/java/com/olexyn/burnsmail/model/AMail.java new file mode 100644 index 0000000..09b7261 --- /dev/null +++ b/src/main/java/com/olexyn/burnsmail/model/AMail.java @@ -0,0 +1,17 @@ +package com.olexyn.burnsmail.model; + +import com.sun.mail.imap.IMAPMessage; +import lombok.Data; + +@Data +public class AMail { + + + private String from; + private String to; + private String subject; + private String content; + private IMAPMessage imapMessage; + private Double spamScore; + +} diff --git a/src/main/java/com/olexyn/burnsmail/openai/ChatMessage.java b/src/main/java/com/olexyn/burnsmail/openai/ChatMessage.java new file mode 100644 index 0000000..7eb66ee --- /dev/null +++ b/src/main/java/com/olexyn/burnsmail/openai/ChatMessage.java @@ -0,0 +1,13 @@ +package com.olexyn.burnsmail.openai; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class ChatMessage { + + private String role; + private String content; + +} \ No newline at end of file diff --git a/src/main/java/com/olexyn/burnsmail/openai/ChatModels.java b/src/main/java/com/olexyn/burnsmail/openai/ChatModels.java new file mode 100644 index 0000000..16f2414 --- /dev/null +++ b/src/main/java/com/olexyn/burnsmail/openai/ChatModels.java @@ -0,0 +1,9 @@ +package com.olexyn.burnsmail.openai; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class ChatModels { + + public final static String GPT_35_TURBO = "gpt-3.5-turbo"; +} diff --git a/src/main/java/com/olexyn/burnsmail/openai/ChatRequest.java b/src/main/java/com/olexyn/burnsmail/openai/ChatRequest.java new file mode 100644 index 0000000..cd528fb --- /dev/null +++ b/src/main/java/com/olexyn/burnsmail/openai/ChatRequest.java @@ -0,0 +1,15 @@ +package com.olexyn.burnsmail.openai; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class ChatRequest { + + private String model; + private List messages = new ArrayList<>(); + +} + diff --git a/src/main/java/com/olexyn/burnsmail/openai/ChatRoles.java b/src/main/java/com/olexyn/burnsmail/openai/ChatRoles.java new file mode 100644 index 0000000..5b28a35 --- /dev/null +++ b/src/main/java/com/olexyn/burnsmail/openai/ChatRoles.java @@ -0,0 +1,13 @@ +package com.olexyn.burnsmail.openai; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class ChatRoles { + + public static final String SPAM_CLASSIFIER = "You are a spam classifier. " + + "On any input String you can give any score between 0.00 and 0.99, " + + "where 0.99 means the input is definitely spam and 0.00 means it is definitely not spam. " + + "Your response shall only ever be a String representation of a double. "; + +} diff --git a/src/main/java/com/olexyn/burnsmail/openai/RequestDispatcher.java b/src/main/java/com/olexyn/burnsmail/openai/RequestDispatcher.java new file mode 100644 index 0000000..fb76909 --- /dev/null +++ b/src/main/java/com/olexyn/burnsmail/openai/RequestDispatcher.java @@ -0,0 +1,54 @@ +package com.olexyn.burnsmail.openai; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.experimental.UtilityClass; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +@UtilityClass +public class RequestDispatcher { + + + public static String dispatch(String model, String systemContent, String userContent) throws JsonProcessingException { + // Create RestTemplate instance + var restTemplate = new RestTemplate(); + + // Set headers + var headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.set("Authorization", "Bearer " + System.getenv("openai.api.key")); + + // Create request entity + String url = "https://api.openai.com/v1/chat/completions"; + + var chatRequest = new ChatRequest(); + chatRequest.setModel(model); + chatRequest.getMessages().add(new ChatMessage("system", systemContent)); + chatRequest.getMessages().add(new ChatMessage("user", userContent)); + var om = new ObjectMapper(); + + String jsonBody = om.writeValueAsString(chatRequest); + + HttpEntity requestEntity = new HttpEntity<>(jsonBody, headers); + + // Make the HTTP POST request + ResponseEntity responseEntity = restTemplate + .exchange(url, HttpMethod.POST, requestEntity, String.class); + + // Handle response + HttpStatus statusCode = responseEntity.getStatusCode(); + if (statusCode == HttpStatus.OK) { + return responseEntity.getBody(); + // Process response body + } else { + return "error"; + // Handle error + } + } +}