Files
Plinfa/src/main/java/de/derpandaa/plinfa/aiprovider/OpenAiProvider.java
2026-07-15 18:03:23 +02:00

68 lines
1.8 KiB
Java

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<Model> 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);
}
}