Skip to content

Commit

Permalink
feat(AI Chat): Implement endpoint to make a request to Chat GPT (#252)
Browse files Browse the repository at this point in the history
  • Loading branch information
geoffreykwan authored Apr 17, 2024
1 parent 6e84932 commit c4c0d30
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -398,6 +399,7 @@ protected HashMap<String, Object> 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());
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/application-dockerdev-sample.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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=
2 changes: 2 additions & 0 deletions src/main/resources/application_sample.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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=

0 comments on commit c4c0d30

Please sign in to comment.