feat: add support for auto resolving compilation errors (#318)

This commit is contained in:
Carl-Robert 2023-12-29 16:41:47 +02:00 committed by GitHub
parent 7031a6dc73
commit f831a1facd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
51 changed files with 919 additions and 595 deletions

View file

@ -1,8 +1,6 @@
package ee.carlrobert.codegpt.completions;
import com.intellij.openapi.diagnostic.Logger;
import ee.carlrobert.codegpt.conversations.Conversation;
import ee.carlrobert.codegpt.conversations.message.Message;
import ee.carlrobert.codegpt.settings.state.SettingsState;
import ee.carlrobert.codegpt.telemetry.TelemetryAction;
import ee.carlrobert.llm.client.openai.completion.ErrorDetails;
@ -12,7 +10,6 @@ import ee.carlrobert.llm.completion.CompletionEventListener;
import java.util.List;
import javax.swing.SwingWorker;
import okhttp3.sse.EventSource;
import org.jetbrains.annotations.NotNull;
public class CompletionRequestHandler {
@ -31,8 +28,8 @@ public class CompletionRequestHandler {
this.completionResponseEventListener = completionResponseEventListener;
}
public void call(Conversation conversation, Message message, boolean retry) {
swingWorker = new CompletionRequestWorker(conversation, message, retry);
public void call(CallParameters callParameters) {
swingWorker = new CompletionRequestWorker(callParameters);
swingWorker.execute();
}
@ -44,13 +41,11 @@ public class CompletionRequestHandler {
}
private EventSource startCall(
@NotNull Conversation conversation,
@NotNull Message message,
boolean retry,
CallParameters callParameters,
CompletionEventListener eventListener) {
try {
return CompletionRequestService.getInstance()
.getChatCompletionAsync(conversation, message, retry, useContextualSearch, eventListener);
.getChatCompletionAsync(callParameters, useContextualSearch, eventListener);
} catch (Throwable ex) {
handleCallException(ex);
throw ex;
@ -69,26 +64,20 @@ public class CompletionRequestHandler {
private class CompletionRequestWorker extends SwingWorker<Void, String> {
private final Conversation conversation;
private final Message message;
private final boolean retry;
private final CallParameters callParameters;
public CompletionRequestWorker(Conversation conversation, Message message, boolean retry) {
this.conversation = conversation;
this.message = message;
this.retry = retry;
public CompletionRequestWorker(CallParameters callParameters) {
this.callParameters = callParameters;
}
protected Void doInBackground() {
var settings = SettingsState.getInstance();
try {
eventSource = startCall(
conversation,
message,
retry,
new YouRequestCompletionEventListener());
eventSource = startCall(callParameters, new YouRequestCompletionEventListener());
} catch (TotalUsageExceededException e) {
completionResponseEventListener.handleTokensExceeded(conversation, message);
completionResponseEventListener.handleTokensExceeded(
callParameters.getConversation(),
callParameters.getMessage());
} finally {
sendInfo(settings);
}
@ -96,7 +85,7 @@ public class CompletionRequestHandler {
}
protected void process(List<String> chunks) {
message.setResponse(messageBuilder.toString());
callParameters.getMessage().setResponse(messageBuilder.toString());
for (String text : chunks) {
messageBuilder.append(text);
completionResponseEventListener.handleMessage(text);
@ -107,7 +96,7 @@ public class CompletionRequestHandler {
@Override
public void onSerpResults(List<YouSerpResult> results) {
completionResponseEventListener.handleSerpResults(results, message);
completionResponseEventListener.handleSerpResults(results, callParameters.getMessage());
}
@Override
@ -117,11 +106,7 @@ public class CompletionRequestHandler {
@Override
public void onComplete(StringBuilder messageBuilder) {
completionResponseEventListener.handleCompleted(
messageBuilder.toString(),
message,
conversation,
retry);
completionResponseEventListener.handleCompleted(messageBuilder.toString(), callParameters);
}
@Override
@ -136,8 +121,8 @@ public class CompletionRequestHandler {
private void sendInfo(SettingsState settings) {
TelemetryAction.COMPLETION.createActionMessage()
.property("conversationId", conversation.getId().toString())
.property("model", conversation.getModel())
.property("conversationId", callParameters.getConversation().getId().toString())
.property("model", callParameters.getConversation().getModel())
.property("service", settings.getSelectedService().getCode().toLowerCase())
.send();
}
@ -150,8 +135,8 @@ public class CompletionRequestHandler {
.property("code", "INSUFFICIENT_QUOTA");
} else {
telemetryMessage
.property("conversationId", conversation.getId().toString())
.property("model", conversation.getModel())
.property("conversationId", callParameters.getConversation().getId().toString())
.property("model", callParameters.getConversation().getModel())
.error(new RuntimeException(error.toString(), ex));
}
telemetryMessage.send();