-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOpenAIRequesterTest.java
More file actions
89 lines (72 loc) · 3.64 KB
/
OpenAIRequesterTest.java
File metadata and controls
89 lines (72 loc) · 3.64 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
86
87
88
89
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.jupiter.api.Test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.fail;
public class OpenAIRequesterTest {
// URL del endpoint de OpenAI para completions. No debería necesitar cambios.
private static final String API_URL = "https://api.openai.com/v1/chat/completions";
// Tu API key de OpenAI. ¡NO la compartas ni la expongas públicamente!
private static final String API_KEY = "YOUR_OPENAI_API_KEY_HERE"; // <-- CAMBIAR: Añade tu API key de OpenAI aquí
// Nombre del modelo que deseas usar. Puedes cambiarlo por otro modelo si lo prefieres.
private static final String MODEL_NAME = "gpt-3.5-turbo";
@Test
public void testOpenAIRequest() {
try {
String query = "Hola, ¿qué tal?";
String rawResponse = makeOpenAIRequest(query);
// Parsea la respuesta JSON y obtiene el contenido.
String content = new JSONObject(rawResponse)
.getJSONArray("choices")
.getJSONObject(0)
.getJSONObject("message")
.getString("content");
System.out.println("Prompt entrada: " + query + "\n\nPrompt salida: " + content);
// Asegúrate de que el contenido no esté vacío.
assertNotNull(content, "El nodo 'content' no debe ser nulo");
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
fail(e.getMessage());
}
}
/**
* Realiza una solicitud a la API de OpenAI y retorna la respuesta como una cadena.
*
* @param query El texto que deseas que el modelo complete o responda.
* @return Respuesta del modelo en formato de cadena.
* @throws IOException Si hay problemas al hacer la solicitud.
*/
public String makeOpenAIRequest(String query) throws IOException {
// Establece la conexión y las cabeceras.
HttpURLConnection connection = (HttpURLConnection) new URL(API_URL).openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Bearer " + API_KEY);
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoOutput(true);
// Prepara el cuerpo de la solicitud con el modelo y el texto.
String body = String.format("{\"model\": \"%s\", \"messages\": [{\"role\": \"user\", \"content\": \"%s\"}]}",
MODEL_NAME, query.replace("'", "\\'").replace("\"", "\\\"").replace("\n", "\\n").replace("\r", "\\r"));
// Envía la solicitud.
try (OutputStream os = connection.getOutputStream()) {
os.write(body.getBytes("UTF-8"));
}
// Lee y devuelve la respuesta.
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new IOException("HTTP error code: " + connection.getResponseCode());
}
StringBuilder responseBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
responseBuilder.append(line);
}
return responseBuilder.toString();
}
}
}