Unique threads for requests on the same Change Set
Each request pertaining to the same Change Set is handled within the
same thread, maximizing the benefits of ChatGPT's stateful approach.
Change-Id: Ief0fc54a7eb1cc6b7406f8e533a56cf49a353175
Signed-off-by: Patrizio <patrizio.gelosi@amarulasolutions.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java
index 5d652bb..3138063 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java
@@ -24,12 +24,17 @@
this.pluginDataHandlerProvider = pluginDataHandlerProvider;
}
- public ChatGptResponseContent ask(Configuration config, ChangeSetData changeSetData, GerritChange change, String patchSet) {
+ public ChatGptResponseContent ask(
+ Configuration config,
+ ChangeSetData changeSetData,
+ GerritChange change,
+ String patchSet
+ ) {
isCommentEvent = change.getIsCommentEvent();
String changeId = change.getFullChangeId();
log.info("Processing STATEFUL ChatGPT Request with changeId: {}, Patch Set: {}", changeId, patchSet);
- ChatGptThread chatGptThread = new ChatGptThread(config, change, patchSet);
+ ChatGptThread chatGptThread = new ChatGptThread(config, change, patchSet, pluginDataHandlerProvider);
String threadId = chatGptThread.createThread();
chatGptThread.addMessage();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptThread.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptThread.java
index a95f968..11c98bf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptThread.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptThread.java
@@ -1,6 +1,8 @@
package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.chatgpt;
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.data.PluginDataHandler;
+import com.googlesource.gerrit.plugins.chatgpt.data.PluginDataHandlerProvider;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage;
import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.UriResourceLocatorStateful;
@@ -15,28 +17,43 @@
@Slf4j
public class ChatGptThread {
+ public static final String KEY_THREAD_ID = "threadId";
+
private final ChatGptHttpClient httpClient = new ChatGptHttpClient();
private final Configuration config;
private final GerritChange change;
private final String patchSet;
+ private final PluginDataHandler changeDataHandler;
private String threadId;
private ChatGptRequestMessage addMessageRequestBody;
- public ChatGptThread(Configuration config, GerritChange change, String patchSet) {
+ public ChatGptThread(
+ Configuration config,
+ GerritChange change,
+ String patchSet,
+ PluginDataHandlerProvider pluginDataHandlerProvider
+ ) {
this.config = config;
this.change = change;
this.patchSet = patchSet;
+ this.changeDataHandler = pluginDataHandlerProvider.getChangeScope();
}
public String createThread() {
- Request request = createThreadRequest();
- log.debug("ChatGPT Create Thread request: {}", request);
+ threadId = changeDataHandler.getValue(KEY_THREAD_ID);
+ if (threadId == null) {
+ Request request = createThreadRequest();
+ log.debug("ChatGPT Create Thread request: {}", request);
- ChatGptResponse threadResponse = getGson().fromJson(httpClient.execute(request), ChatGptResponse.class);
- log.info("Thread created: {}", threadResponse);
- threadId = threadResponse.getId();
-
+ ChatGptResponse threadResponse = getGson().fromJson(httpClient.execute(request), ChatGptResponse.class);
+ log.info("Thread created: {}", threadResponse);
+ threadId = threadResponse.getId();
+ changeDataHandler.setValue(KEY_THREAD_ID, threadId);
+ }
+ else {
+ log.info("Thread found for the Change Set. Thread ID: {}", threadId);
+ }
return threadId;
}
@@ -67,6 +84,7 @@
.role("user")
.content(chatGptPromptStateful.getDefaultGptThreadReviewMessage(patchSet))
.build();
+ log.debug("ChatGPT Add Message request body: {}", addMessageRequestBody);
return httpClient.createRequestFromJson(uri.toString(), config.getGptToken(), addMessageRequestBody);
}