Upgrade to ChatGPT OpenAI assistant version 2
Completed migration from OpenAI Assistant version 1 to 2. This upgrade
required changes to how file IDs of the Git projects uploaded to ChatGPT
are passed during assistant creation.
Change-Id: I1c8e1be662445cf7a0eae92496d969e2a5c4c24f
Signed-off-by: Patrizio <patrizio.gelosi@amarulasolutions.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptParameters.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/chatgpt/ChatGptParameters.java
similarity index 93%
rename from src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptParameters.java
rename to src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/chatgpt/ChatGptParameters.java
index a4bc242..4670a67 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptParameters.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/chatgpt/ChatGptParameters.java
@@ -1,4 +1,4 @@
-package com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.chatgpt;
+package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.chatgpt;
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.ClientBase;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/UriResourceLocatorStateful.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/UriResourceLocatorStateful.java
index 586fce9..c4f7dc1 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/UriResourceLocatorStateful.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/UriResourceLocatorStateful.java
@@ -1,11 +1,11 @@
package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api;
public class UriResourceLocatorStateful {
- public static String chatCreateFilesUri() {
+ public static String filesCreateUri() {
return "/v1/files";
}
- public static String chatCreateAssistantsUri() {
+ public static String assistantCreateUri() {
return "/v1/assistants";
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptAssistant.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptAssistant.java
index 717648c..71bd8f3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptAssistant.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptAssistant.java
@@ -3,37 +3,35 @@
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
import com.googlesource.gerrit.plugins.chatgpt.data.PluginDataHandler;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.ClientBase;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.chatgpt.ChatGptParameters;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.chatgpt.ChatGptTools;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptTool;
import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.UriResourceLocatorStateful;
import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.git.GitRepoFiles;
import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.prompt.ChatGptPromptStateful;
-import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.model.api.chatgpt.ChatGptCreateAssistantResponse;
-import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.model.api.chatgpt.ChatGptFilesResponse;
-import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.model.api.chatgpt.ChatGptCreateAssistantRequestBody;
-import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.chatgpt.ChatGptParameters;
+import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.model.api.chatgpt.*;
import lombok.extern.slf4j.Slf4j;
import okhttp3.Request;
import java.net.URI;
import java.nio.file.Path;
+import static com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.chatgpt.ChatGptFiles.KEY_FILE_ID;
import static com.googlesource.gerrit.plugins.chatgpt.utils.FileUtils.createTempFileWithContent;
import static com.googlesource.gerrit.plugins.chatgpt.utils.GsonUtils.getGson;
@Slf4j
public class ChatGptAssistant extends ClientBase {
- public static final String KEY_FILE_ID = "fileId";
public static final String KEY_ASSISTANT_ID = "assistantId";
- public static final String CODE_INTERPRETER_TOOL_TYPE = "code_interpreter";
private final ChatGptHttpClient httpClient = new ChatGptHttpClient();
private final GerritChange change;
private final GitRepoFiles gitRepoFiles;
private final PluginDataHandler pluginDataHandler;
- public ChatGptAssistant(Configuration config, GerritChange change, GitRepoFiles gitRepoFiles, PluginDataHandler pluginDataHandler) {
+ public ChatGptAssistant(Configuration config, GerritChange change, GitRepoFiles gitRepoFiles,
+ PluginDataHandler pluginDataHandler) {
super(config);
this.change = change;
this.gitRepoFiles = gitRepoFiles;
@@ -67,31 +65,29 @@
Request request = createRequest(fileId);
log.debug("ChatGPT Create Assistant request: {}", request);
- ChatGptCreateAssistantResponse assistantResponse = getGson().fromJson(httpClient.execute(request),
- ChatGptCreateAssistantResponse.class);
-
+ ChatGptResponse assistantResponse = getGson().fromJson(httpClient.execute(request), ChatGptResponse.class);
log.debug("Assistant created: {}", assistantResponse);
return assistantResponse.getId();
}
private Request createRequest(String fileId) {
- URI uri = URI.create(config.getGptDomain() + UriResourceLocatorStateful.chatCreateAssistantsUri());
+ URI uri = URI.create(config.getGptDomain() + UriResourceLocatorStateful.assistantCreateUri());
log.debug("ChatGPT Create Assistant request URI: {}", uri);
ChatGptPromptStateful chatGptPromptStateful = new ChatGptPromptStateful(config, change);
ChatGptParameters chatGptParameters = new ChatGptParameters(config, change.getIsCommentEvent());
ChatGptTool[] tools = new ChatGptTool[] {
- new ChatGptTool(CODE_INTERPRETER_TOOL_TYPE),
ChatGptTools.retrieveFormatRepliesTool()
};
+ ChatGptToolResources toolResources = new ChatGptToolResources(new ChatGptFileIds(new String[] {fileId}));
ChatGptCreateAssistantRequestBody requestBody = ChatGptCreateAssistantRequestBody.builder()
.name(ChatGptPromptStateful.DEFAULT_GPT_ASSISTANT_NAME)
.description(chatGptPromptStateful.getDefaultGptAssistantDescription())
.instructions(chatGptPromptStateful.getDefaultGptAssistantInstructions())
.model(config.getGptModel())
.temperature(chatGptParameters.getGptTemperature())
- .fileIds(new String[]{fileId})
.tools(tools)
+ .toolResources(toolResources)
.build();
return httpClient.createRequestFromJson(uri.toString(), config.getGptToken(), requestBody);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptFiles.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptFiles.java
index 2cbde38..58bcf93 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptFiles.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptFiles.java
@@ -16,6 +16,8 @@
@Slf4j
public class ChatGptFiles extends ClientBase {
+ public static final String KEY_FILE_ID = "fileId";
+
private final HttpClient httpClient = new HttpClient();
public ChatGptFiles(Configuration config) {
@@ -33,7 +35,7 @@
}
private Request createUploadFileRequest(Path repoPath) {
- URI uri = URI.create(config.getGptDomain() + UriResourceLocatorStateful.chatCreateFilesUri());
+ URI uri = URI.create(config.getGptDomain() + UriResourceLocatorStateful.filesCreateUri());
log.debug("ChatGPT Upload Files request URI: {}", uri);
File file = repoPath.toFile();
RequestBody requestBody = new MultipartBody.Builder()
@@ -43,7 +45,7 @@
RequestBody.create(file, MediaType.parse("application/json")))
.build();
- return httpClient.createRequest(uri.toString(), config.getGptToken(), requestBody);
+ return httpClient.createRequest(uri.toString(), config.getGptToken(), requestBody, null);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptHttpClient.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptHttpClient.java
index 077daa9..35a4e4e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptHttpClient.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptHttpClient.java
@@ -6,7 +6,7 @@
import java.util.Map;
public class ChatGptHttpClient extends HttpClient {
- private static final Map<String, String> BETA_VERSION_HEADER = Map.of("OpenAI-Beta", "assistants=v1");
+ private static final Map<String, String> BETA_VERSION_HEADER = Map.of("OpenAI-Beta", "assistants=v2");
public Request createRequestFromJson(String uri, String bearer, Object requestObject) {
return createRequestFromJson(uri, bearer, requestObject, BETA_VERSION_HEADER);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptCreateAssistantRequestBody.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptCreateAssistantRequestBody.java
index 2875a8f..6e85320 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptCreateAssistantRequestBody.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptCreateAssistantRequestBody.java
@@ -8,12 +8,12 @@
@Data
@Builder
public class ChatGptCreateAssistantRequestBody {
- String name;
- String description;
- String instructions;
- String model;
- Double temperature;
- @SerializedName("file_ids")
- String[] fileIds;
- ChatGptTool[] tools;
+ private String name;
+ private String description;
+ private String instructions;
+ private String model;
+ private Double temperature;
+ private ChatGptTool[] tools;
+ @SerializedName("tool_resources")
+ private ChatGptToolResources toolResources;
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptCreateAssistantResponse.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptCreateAssistantResponse.java
deleted file mode 100644
index 743b3d8..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptCreateAssistantResponse.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.model.api.chatgpt;
-
-import lombok.Data;
-
-@Data
-public class ChatGptCreateAssistantResponse {
- String id;
- String object;
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptFileIds.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptFileIds.java
new file mode 100644
index 0000000..2fa6fe5
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptFileIds.java
@@ -0,0 +1,12 @@
+package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.model.api.chatgpt;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class ChatGptFileIds {
+ @SerializedName("file_ids")
+ private String[] fileIds;
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptFilesResponse.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptFilesResponse.java
index 5329bcb..e06838b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptFilesResponse.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptFilesResponse.java
@@ -1,10 +1,10 @@
package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.model.api.chatgpt;
import lombok.Data;
+import lombok.EqualsAndHashCode;
+@EqualsAndHashCode(callSuper = true)
@Data
-public class ChatGptFilesResponse {
- String id;
- String filename;
- String status;
+public class ChatGptFilesResponse extends ChatGptResponse {
+ private String filename;
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptResponse.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptResponse.java
new file mode 100644
index 0000000..7501d96
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptResponse.java
@@ -0,0 +1,10 @@
+package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.model.api.chatgpt;
+
+import lombok.Data;
+
+@Data
+public class ChatGptResponse {
+ private String id;
+ private String object;
+ private String status;
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptToolResources.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptToolResources.java
new file mode 100644
index 0000000..8752d1a
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/model/api/chatgpt/ChatGptToolResources.java
@@ -0,0 +1,12 @@
+package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.model.api.chatgpt;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class ChatGptToolResources {
+ @SerializedName("code_interpreter")
+ private ChatGptFileIds codeInterpreter;
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java
index b8f9d85..5cddeb7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java
@@ -3,6 +3,7 @@
import com.google.common.net.HttpHeaders;
import com.google.inject.Singleton;
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.chatgpt.ChatGptParameters;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.chatgpt.ChatGptTools;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.http.HttpClientWithRetry;