diff --git a/.gitignore b/.gitignore
index 6a3dda3..91e931f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
.idea
+.vscode
target
pom.xml
CraftGPT.iml
diff --git a/pom.xml b/pom.xml
index f6e235f..d6535c8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,7 +85,7 @@
com.theokanning.openai-gpt3-java
service
- 0.12.0
+ 0.14.0
compile
@@ -106,5 +106,10 @@
4.3.0
compile
+
+ io.github.zawn.retrofit2
+ converter-jackson
+ 2.10.6
+
diff --git a/src/main/java/com/theaiguy_/craftgpt/gpt.java b/src/main/java/com/theaiguy_/craftgpt/gpt.java
index c3fd9aa..2c1234f 100644
--- a/src/main/java/com/theaiguy_/craftgpt/gpt.java
+++ b/src/main/java/com/theaiguy_/craftgpt/gpt.java
@@ -1,11 +1,18 @@
package com.theaiguy_.craftgpt;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.theokanning.openai.client.OpenAiApi;
import com.theokanning.openai.completion.chat.ChatCompletionRequest;
import com.theokanning.openai.completion.chat.ChatMessage;
import com.theokanning.openai.service.OpenAiService;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
+import okhttp3.OkHttpClient;
+import retrofit2.Retrofit;
+import retrofit2.converter.jackson.JacksonConverterFactory;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@@ -22,6 +29,7 @@ public class gpt implements CommandExecutor
public static final HashMap> messages = new HashMap<>();
private static final HashMap cooldowns = new HashMap<>();
static Long cooldownMs = config.getLong("cooldown");
+ static String baseUrl = config.getString("chatgpt.base-url");
static String token = config.getString("chatgpt.token");
@@ -63,7 +71,18 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
{
adventure.sender(sender).sendMessage(getFormattedString("messages.generating"));
- OpenAiService service = new OpenAiService(Objects.requireNonNull(token), Duration.ofMinutes(3));
+ ObjectMapper mapper = OpenAiService.defaultObjectMapper();
+ OkHttpClient client = OpenAiService.defaultClient(Objects.requireNonNull(token), Duration.ofMinutes(3));
+
+ Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl(Objects.requireNonNull(baseUrl))
+ .client(client)
+ .addConverterFactory(JacksonConverterFactory.create(mapper))
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
+ .build();
+
+ OpenAiService service = new OpenAiService(retrofit.create(OpenAiApi.class), client.dispatcher().executorService());
+
ChatCompletionRequest.ChatCompletionRequestBuilder completionRequestBuilder = ChatCompletionRequest.builder()
.messages(messages.get(sender.getName()))
.model(config.getString("chatgpt.model"))
@@ -94,4 +113,4 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
});
return true;
}
-}
\ No newline at end of file
+}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 0185b04..97a8da5 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -40,6 +40,11 @@ chatgpt:
# NOTE: This is only stored locally and is not used for anything other than making requests.
token: ""
+ # API base url.
+ # Change this if you wish to use alternative API endpoints (e.g. https://api.openai-proxy.com/).
+ # Make sure that it is compatible with OpenAI API calls.
+ base-url: https://api.openai.com/
+
# ID of the model to use.
# See https://platform.openai.com/docs/models/model-endpoint-compatibility
# for details on which models work with the Chat API.