package de.derpandaa.plinfa.aiprovider; import java.net.URI; import java.net.http.HttpRequest; import java.util.List; import de.derpandaa.plinfa.dto.AiRequest; import de.derpandaa.plinfa.dto.AiResponseDto; import de.derpandaa.plinfa.dto.MessageDto; import de.derpandaa.plinfa.dto.OpenAiResponseDto; import tools.jackson.databind.node.ArrayNode; import tools.jackson.databind.node.ObjectNode; public class OpenAiProvider extends AbstractAiProvider { public static String API_KEY; private static int maxTokens; private static OpenAiProvider openAiProvider; public OpenAiProvider() { } @Override public HttpRequest buildRequest(String jsonBody) { return HttpRequest.newBuilder().uri(URI.create("https://api.openai.com/v1/chat/completions")) .header("Content-Type", "application/json").header("Authorization", "Bearer " + API_KEY) .POST(HttpRequest.BodyPublishers.ofString(jsonBody)).build(); } @Override public List getModels() { return List.of(new Model("gpt-5-nano", this.getClass())); } @Override public AiResponseDto parseResponse(String body) { return new OpenAiResponseDto(body); } @Override public String buildRequestBody(AiRequest request) throws Exception { ObjectNode root = mapper.createObjectNode(); root.put("model", request.getModel().modelName()); root.put("max_completion_tokens", request.getMaxTokens()); if (request.getSystemPrompt() != null) { ArrayNode messages = root.putArray("messages"); ObjectNode system = mapper.createObjectNode(); system.put("role", "system"); system.put("content", request.getSystemPrompt()); messages.add(system); for (MessageDto m : request.getMessages()) { ObjectNode msg = mapper.createObjectNode(); msg.put("role", m.getRole().name()); msg.put("content", m.getContent()); messages.add(msg); } } return mapper.writeValueAsString(root); } }