Support you.com gpt-4 model (#233)

This commit is contained in:
Carl-Robert 2023-10-12 11:18:37 +03:00 committed by GitHub
parent 0343842af9
commit 21fa61d2af
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 311 additions and 168 deletions

View file

@ -5,12 +5,15 @@ import static ee.carlrobert.codegpt.util.ThemeUtils.getPanelBackgroundColor;
import static java.lang.String.format;
import static java.util.stream.Collectors.toList;
import com.intellij.ide.HelpTooltip;
import com.intellij.openapi.editor.impl.EditorImpl;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ui.componentsList.components.ScrollablePanel;
import com.intellij.ui.JBColor;
import com.intellij.ui.components.JBScrollPane;
import com.intellij.ui.components.OnOffButton;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.JBUI.Borders;
import ee.carlrobert.codegpt.actions.ActionType;
import ee.carlrobert.codegpt.completions.CompletionRequestHandler;
import ee.carlrobert.codegpt.completions.you.YouSerpResult;
@ -22,6 +25,7 @@ import ee.carlrobert.codegpt.credentials.OpenAICredentialsManager;
import ee.carlrobert.codegpt.settings.state.AzureSettingsState;
import ee.carlrobert.codegpt.settings.state.OpenAISettingsState;
import ee.carlrobert.codegpt.settings.state.SettingsState;
import ee.carlrobert.codegpt.settings.state.YouSettingsState;
import ee.carlrobert.codegpt.telemetry.TelemetryAction;
import ee.carlrobert.codegpt.toolwindow.ModelIconLabel;
import ee.carlrobert.codegpt.toolwindow.chat.components.ChatMessageResponseBody;
@ -29,10 +33,9 @@ import ee.carlrobert.codegpt.toolwindow.chat.components.ResponsePanel;
import ee.carlrobert.codegpt.toolwindow.chat.components.SmartScroller;
import ee.carlrobert.codegpt.toolwindow.chat.components.UserMessagePanel;
import ee.carlrobert.codegpt.toolwindow.chat.components.UserPromptTextArea;
import ee.carlrobert.codegpt.completions.you.YouUserManager;
import ee.carlrobert.codegpt.util.EditorUtils;
import ee.carlrobert.codegpt.util.file.FileUtils;
import ee.carlrobert.codegpt.util.OverlayUtils;
import ee.carlrobert.codegpt.util.file.FileUtils;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
@ -131,10 +134,7 @@ public abstract class BaseChatToolWindowTabPanel implements ChatToolWindowTabPan
public void dispose() {
}
private boolean isCredentialSet() {
if (SettingsState.getInstance().isUseYouService()) {
return YouUserManager.getInstance().isAuthenticated();
}
private boolean isRequestAllowed() {
if (SettingsState.getInstance().isUseAzureService()) {
return AzureCredentialsManager.getInstance().isCredentialSet();
}
@ -148,7 +148,7 @@ public abstract class BaseChatToolWindowTabPanel implements ChatToolWindowTabPan
boolean isRetry) {
ChatMessageResponseBody responseContainer = (ChatMessageResponseBody) responsePanel.getContent();
if (!isCredentialSet()) {
if (!isRequestAllowed()) {
responseContainer.displayMissingCredential();
return;
}
@ -170,7 +170,7 @@ public abstract class BaseChatToolWindowTabPanel implements ChatToolWindowTabPan
var serpResults = serpResultsMapping.get(message.getId());
var containsResults = serpResults != null && !serpResults.isEmpty();
if (SettingsState.getInstance().isDisplayWebSearchResults()) {
if (YouSettingsState.getInstance().isDisplayWebSearchResults()) {
if (containsResults) {
responseContainer.displaySerpResults(serpResults);
}
@ -332,9 +332,10 @@ public abstract class BaseChatToolWindowTabPanel implements ChatToolWindowTabPan
gbc.gridy = 1;
var model = getModel();
var modelIconWrapper = JBUI.Panels.simplePanel(
new ModelIconLabel(getClientCode(), model)).withBorder(JBUI.Borders.empty(0, 0, 8, 4));
modelIconWrapper.setBackground(getPanelBackgroundColor());
var modelIconWrapper = JBUI.Panels
.simplePanel(new ModelIconLabel(getClientCode(), model))
.withBorder(Borders.emptyRight(4))
.withBackground(getPanelBackgroundColor());
var wrapper = new JPanel(new BorderLayout());
wrapper.setBorder(JBUI.Borders.compound(
@ -343,13 +344,46 @@ public abstract class BaseChatToolWindowTabPanel implements ChatToolWindowTabPan
wrapper.setBackground(getPanelBackgroundColor());
wrapper.add(userPromptTextArea, BorderLayout.SOUTH);
if (model != null) {
wrapper.add(modelIconWrapper, BorderLayout.LINE_END);
var header = new JPanel(new BorderLayout());
header.setBackground(getPanelBackgroundColor());
header.setBorder(JBUI.Borders.emptyBottom(8));
if ("YouCode".equals(model)) {
var gpt4ToggleButton = new OnOffButton();
var useGPT4Model = YouSettingsState.getInstance().isUseGPT4Model();
gpt4ToggleButton.setSelected(useGPT4Model);
gpt4ToggleButton.setOnText("GPT-4");
gpt4ToggleButton.setOffText("GPT-4");
gpt4ToggleButton.addActionListener(
actionEvent -> {
project.getMessageBus()
.syncPublisher(YouModelChangeNotifier.YOU_MODEL_CHANGE_NOTIFIER_TOPIC)
.modelChanged(gpt4ToggleButton.isSelected());
YouSettingsState.getInstance().setUseGPT4Model(gpt4ToggleButton.isSelected());
installHelpTooltip(gpt4ToggleButton.isSelected(), gpt4ToggleButton);
});
project.getMessageBus()
.connect()
.subscribe(
YouModelChangeNotifier.YOU_MODEL_CHANGE_NOTIFIER_TOPIC,
(YouModelChangeNotifier) gpt4ToggleButton::setSelected);
installHelpTooltip(useGPT4Model, gpt4ToggleButton);
header.add(gpt4ToggleButton, BorderLayout.LINE_START);
}
header.add(modelIconWrapper, BorderLayout.LINE_END);
wrapper.add(header);
}
rootPanel.add(wrapper, gbc);
userPromptTextArea.requestFocusInWindow();
userPromptTextArea.requestFocus();
}
private void installHelpTooltip(boolean selected, JComponent component) {
new HelpTooltip()
.setDescription(selected ? "Turn off for faster responses" : "Turn on for complex queries")
.installOn(component);
}
private String getClientCode() {
var settings = SettingsState.getInstance();
if (settings.isUseOpenAIService()) {