From a50e054aca084cae9a0188ae43f4f441d72b6bbb Mon Sep 17 00:00:00 2001 From: Ryan Andriamahery Date: Tue, 15 Jul 2025 11:22:14 +0300 Subject: [PATCH] chore: use langchain4j.ChatModel to integrate OpenAi --- .../java/school/hei/hazavao/model/Chat.java | 63 +------------------ .../school/hei/hazavao/model/OpenAiChat.java | 28 +++++++++ .../java/school/hei/hazavao/conf/EnvConf.java | 2 +- 3 files changed, 30 insertions(+), 63 deletions(-) create mode 100644 src/main/java/school/hei/hazavao/model/OpenAiChat.java diff --git a/src/main/java/school/hei/hazavao/model/Chat.java b/src/main/java/school/hei/hazavao/model/Chat.java index 8d0dba5..f5a6fcc 100644 --- a/src/main/java/school/hei/hazavao/model/Chat.java +++ b/src/main/java/school/hei/hazavao/model/Chat.java @@ -1,66 +1,5 @@ package school.hei.hazavao.model; -import static java.net.http.HttpClient.newHttpClient; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import java.io.IOException; -import java.net.URI; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; import java.util.function.Function; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -@Component -public class Chat implements Function { - - private static final String OPENAPI_URL = "https://api.openai.com/v1/chat/completions"; - private final String openapiKey; - - public Chat(@Value("${openapi.key}") String openapiKey) { - this.openapiKey = openapiKey; - } - - @Override - public String apply(String content) { - var mapper = new ObjectMapper(); - - var request = openapiRequest(content, mapper); - HttpResponse response = null; - try { - response = newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); - } catch (IOException | InterruptedException e) { - throw new RuntimeException(e); - } - - JsonNode root = null; - try { - root = mapper.readTree(response.body()); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - return root.path("choices").get(0).path("message").path("content").asText(); - } - - private HttpRequest openapiRequest(String content, ObjectMapper mapper) { - var message = mapper.createObjectNode(); - message.put("role", "user"); - message.put("content", content); - var messages = mapper.createArrayNode(); - messages.add(message); - - var requestBody = mapper.createObjectNode(); - requestBody.put("model", "gpt-4o"); - requestBody.set("messages", messages); - requestBody.put("temperature", 0.5); - return HttpRequest.newBuilder() - .uri(URI.create(OPENAPI_URL)) - .header("Content-Type", "application/json") - .header("Authorization", "Bearer " + openapiKey) - .POST(HttpRequest.BodyPublishers.ofString(requestBody.toString())) - .build(); - } -} +public interface Chat extends Function {} diff --git a/src/main/java/school/hei/hazavao/model/OpenAiChat.java b/src/main/java/school/hei/hazavao/model/OpenAiChat.java new file mode 100644 index 0000000..c560c84 --- /dev/null +++ b/src/main/java/school/hei/hazavao/model/OpenAiChat.java @@ -0,0 +1,28 @@ +package school.hei.hazavao.model; + +import static dev.langchain4j.model.openai.OpenAiChatModelName.GPT_4_O; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +@Component +@Primary +public class OpenAiChat implements Chat { + private final String openAiKey; + + public OpenAiChat(@Value("${openai.key}") String openAiKey) { + this.openAiKey = openAiKey; + } + + @Override + public String apply(String input) { + var model = + dev.langchain4j.model.openai.OpenAiChatModel.builder() + .apiKey(openAiKey) + .modelName(GPT_4_O) + .build(); + + return model.chat(input); + } +} diff --git a/src/test/java/school/hei/hazavao/conf/EnvConf.java b/src/test/java/school/hei/hazavao/conf/EnvConf.java index 0862879..117d2f9 100644 --- a/src/test/java/school/hei/hazavao/conf/EnvConf.java +++ b/src/test/java/school/hei/hazavao/conf/EnvConf.java @@ -4,6 +4,6 @@ public class EnvConf { void configureProperties(DynamicPropertyRegistry registry) { - registry.add("openapi.key", () -> "dummy"); + registry.add("openai.key", () -> "dummy"); } }