diff --git a/src/main/java/org/wise/portal/presentation/web/controllers/ChatGptcontroller.java b/src/main/java/org/wise/portal/presentation/web/controllers/ChatGptcontroller.java new file mode 100644 index 000000000..9cfbd8678 --- /dev/null +++ b/src/main/java/org/wise/portal/presentation/web/controllers/ChatGptcontroller.java @@ -0,0 +1,57 @@ +package org.wise.portal.presentation.web.controllers; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.HttpURLConnection; +import java.net.URL; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.security.access.annotation.Secured; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api") +public class ChatGptcontroller { + + @Autowired + Environment appProperties; + + @ResponseBody + @Secured("ROLE_USER") + @PostMapping("/chat-gpt") + protected String sendChatMessage(@RequestBody String body) { + String openaiApiKey = appProperties.getProperty("OPENAI_API_KEY"); + if (openaiApiKey == null || openaiApiKey.isEmpty()) { + throw new RuntimeException("OPENAI_API_KEY is not set"); + } + try { + URL url = new URL("https://api.openai.com/v1/chat/completions"); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Authorization", "Bearer " + openaiApiKey); + connection.setRequestProperty("Content-Type", "application/json"); + connection.setDoOutput(true); + OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); + writer.write(body); + writer.flush(); + writer.close(); + BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String line; + StringBuffer response = new StringBuffer(); + while ((line = br.readLine()) != null) { + response.append(line); + } + br.close(); + return response.toString(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/org/wise/portal/presentation/web/controllers/author/project/AuthorAPIController.java b/src/main/java/org/wise/portal/presentation/web/controllers/author/project/AuthorAPIController.java index 8810660b5..6b3b243b0 100644 --- a/src/main/java/org/wise/portal/presentation/web/controllers/author/project/AuthorAPIController.java +++ b/src/main/java/org/wise/portal/presentation/web/controllers/author/project/AuthorAPIController.java @@ -48,6 +48,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; +import org.apache.commons.lang3.StringUtils; import org.json.JSONException; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; @@ -398,6 +399,7 @@ protected HashMap getAuthorProjectConfig(Authentication auth, config.put("projectAssetURL", contextPath + "/api/author/project/asset/" + project.getId()); config.put("projectBaseURL", projectBaseURL); config.put("previewProjectURL", contextPath + "/preview/unit/" + project.getId()); + config.put("chatGptEnabled", !StringUtils.isEmpty(appProperties.getProperty("OPENAI_API_KEY"))); config.put("cRaterRequestURL", contextPath + "/api/c-rater"); config.put("importStepsURL", contextPath + "/api/author/project/importSteps/" + project.getId()); diff --git a/src/main/resources/application-dockerdev-sample.properties b/src/main/resources/application-dockerdev-sample.properties index 6854d6b72..fe3f538a3 100644 --- a/src/main/resources/application-dockerdev-sample.properties +++ b/src/main/resources/application-dockerdev-sample.properties @@ -199,3 +199,5 @@ system-wide-salt=secret # Speech to Text using AWS #speech-to-text.aws.region= #speech-to-text.aws.identity-pool-id= + +#OPENAI_API_KEY= diff --git a/src/main/resources/application_sample.properties b/src/main/resources/application_sample.properties index a76b9546d..84ae683d7 100644 --- a/src/main/resources/application_sample.properties +++ b/src/main/resources/application_sample.properties @@ -199,3 +199,5 @@ system-wide-salt=secret # Speech to Text using AWS #speech-to-text.aws.region= #speech-to-text.aws.identity-pool-id= + +#OPENAI_API_KEY=