feat: support custom OpenAI-compatible service (#383)

This commit is contained in:
Carl-Robert 2024-02-23 17:41:44 +02:00 committed by GitHub
parent c8bb33d9b2
commit 8507c779b1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
27 changed files with 772 additions and 166 deletions

View file

@ -1,6 +1,7 @@
package ee.carlrobert.codegpt.settings;
import static ee.carlrobert.codegpt.settings.service.ServiceType.AZURE;
import static ee.carlrobert.codegpt.settings.service.ServiceType.CUSTOM_OPENAI;
import static ee.carlrobert.codegpt.settings.service.ServiceType.LLAMA_CPP;
import static ee.carlrobert.codegpt.settings.service.ServiceType.OPENAI;
import static ee.carlrobert.codegpt.settings.service.ServiceType.YOU;
@ -8,13 +9,16 @@ import static java.util.stream.Collectors.toList;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.util.SystemInfoRt;
import com.intellij.ui.components.JBTextField;
import com.intellij.util.ui.FormBuilder;
import ee.carlrobert.codegpt.CodeGPTBundle;
import ee.carlrobert.codegpt.settings.service.ServiceSelectionForm;
import ee.carlrobert.codegpt.settings.service.ServiceType;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Insets;
import java.util.Arrays;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComponent;
@ -30,9 +34,12 @@ public class GeneralSettingsComponent {
public GeneralSettingsComponent(Disposable parentDisposable, GeneralSettings settings) {
displayNameField = new JBTextField(settings.getState().getDisplayName(), 20);
serviceSelectionForm = new ServiceSelectionForm(parentDisposable);
var cardLayout = new CardLayout();
var cardLayout = new DynamicCardLayout();
var cards = new JPanel(cardLayout);
cards.add(serviceSelectionForm.getOpenAISettingsForm().getForm(), OPENAI.getCode());
cards.add(
serviceSelectionForm.getCustomConfigurationSettingsForm().getForm(),
CUSTOM_OPENAI.getCode());
cards.add(serviceSelectionForm.getAzureSettingsForm().getForm(), AZURE.getCode());
cards.add(serviceSelectionForm.getYouSettingsForm(), YOU.getCode());
cards.add(serviceSelectionForm.getLlamaSettingsForm(), LLAMA_CPP.getCode());
@ -83,4 +90,29 @@ public class GeneralSettingsComponent {
public void setDisplayName(String displayName) {
displayNameField.setText(displayName);
}
static class DynamicCardLayout extends CardLayout {
@Override
public Dimension preferredLayoutSize(Container parent) {
Component current = findVisibleComponent(parent);
if (current != null) {
Insets insets = parent.getInsets();
Dimension preferredSize = current.getPreferredSize();
preferredSize.width += insets.left + insets.right;
preferredSize.height += insets.top + insets.bottom;
return preferredSize;
}
return super.preferredLayoutSize(parent);
}
private Component findVisibleComponent(Container parent) {
for (Component comp : parent.getComponents()) {
if (comp.isVisible()) {
return comp;
}
}
return null;
}
}
}