Switch to openai-client, add conversation history empty label, remove unofficial reverse proxy (closes #43)

This commit is contained in:
Carl-Robert Linnupuu 2023-03-21 00:21:07 +00:00
parent 33a5e520f2
commit 57e1095dd1
85 changed files with 619 additions and 1828 deletions

View file

@ -0,0 +1,95 @@
package ee.carlrobert.codegpt.settings.configuration;
import static ee.carlrobert.codegpt.action.ActionsUtil.DEFAULT_ACTIONS_ARRAY;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.ui.AnActionButton;
import com.intellij.ui.TitledSeparator;
import com.intellij.ui.ToolbarDecorator;
import com.intellij.ui.table.JBTable;
import com.intellij.util.ui.FormBuilder;
import ee.carlrobert.codegpt.action.ActionsUtil;
import java.awt.Dimension;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.table.DefaultTableModel;
import org.jetbrains.annotations.NotNull;
public class ConfigurationComponent {
private final JPanel mainPanel;
private final JBTable table;
public ConfigurationComponent(ConfigurationState configuration) {
table = new JBTable(new DefaultTableModel(
ActionsUtil.toArray(configuration.tableData),
new String[] {"Action", "Prompt"}));
table.getColumnModel().getColumn(0).setPreferredWidth(140);
table.getColumnModel().getColumn(0).setMaxWidth(140);
table.getEmptyText().setText("No actions configured");
var tablePanel = createTablePanel();
tablePanel.setBorder(BorderFactory.createTitledBorder("Action prompts"));
mainPanel = FormBuilder.createFormBuilder()
.addComponent(new TitledSeparator("Configuration Preference"))
.addVerticalGap(8)
.addComponent(tablePanel)
.addComponentFillVertically(new JPanel(), 0)
.getPanel();
}
public JPanel getPanel() {
return mainPanel;
}
public Map<String, String> getTableData() {
var model = getModel();
Map<String, String> data = new LinkedHashMap<>();
for (int count = 0; count < model.getRowCount(); count++) {
data.put(
model.getValueAt(count, 0).toString(),
model.getValueAt(count, 1).toString());
}
return data;
}
private JPanel createTablePanel() {
return ToolbarDecorator.createDecorator(table)
.setPreferredSize(new Dimension(table.getPreferredSize().width, 160))
.setAddAction(anActionButton -> getModel().addRow(new Object[] {"", ""}))
.setRemoveAction(anActionButton -> getModel().removeRow(table.getSelectedRow()))
.disableUpAction()
.disableDownAction()
.addExtraAction(new RevertToDefaultsActionButton())
.createPanel();
}
private DefaultTableModel getModel() {
return (DefaultTableModel) table.getModel();
}
public void setTableData(Map<String, String> tableData) {
var model = getModel();
model.setNumRows(0);
tableData.forEach((action, prompt) -> model.addRow(new Object[] {action, prompt}));
}
class RevertToDefaultsActionButton extends AnActionButton {
RevertToDefaultsActionButton() {
super("Revert to Defaults", AllIcons.Actions.Rollback);
}
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
var model = getModel();
model.setNumRows(0);
Arrays.stream(DEFAULT_ACTIONS_ARRAY).forEach(model::addRow);
}
}
}

View file

@ -0,0 +1,50 @@
package ee.carlrobert.codegpt.settings.configuration;
import com.intellij.openapi.options.Configurable;
import ee.carlrobert.codegpt.action.ActionsUtil;
import javax.swing.JComponent;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.Nullable;
public class ConfigurationConfigurable implements Configurable {
private ConfigurationComponent configurationComponent;
@Nls(capitalization = Nls.Capitalization.Title)
@Override
public String getDisplayName() {
return "CodeGPT: Configuration";
}
@Nullable
@Override
public JComponent createComponent() {
var configuration = ConfigurationState.getInstance();
configurationComponent = new ConfigurationComponent(configuration);
return configurationComponent.getPanel();
}
@Override
public boolean isModified() {
var configuration = ConfigurationState.getInstance();
return !configurationComponent.getTableData().equals(configuration.tableData);
}
@Override
public void apply() {
var configuration = ConfigurationState.getInstance();
configuration.tableData = configurationComponent.getTableData();
ActionsUtil.refreshActions(configuration.tableData);
}
@Override
public void reset() {
var configuration = ConfigurationState.getInstance();
configurationComponent.setTableData(configuration.tableData);
}
@Override
public void disposeUIResources() {
configurationComponent = null;
}
}

View file

@ -0,0 +1,35 @@
package ee.carlrobert.codegpt.settings.configuration;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.util.xmlb.XmlSerializerUtil;
import ee.carlrobert.codegpt.action.ActionsUtil;
import java.util.Map;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@State(
name = "ee.carlrobert.codegpt.settings.configuration.ConfigurationState",
storages = @Storage("CodeGPTConfiguration.xml")
)
public class ConfigurationState implements PersistentStateComponent<ConfigurationState> {
public Map<String, String> tableData = ActionsUtil.DEFAULT_ACTIONS;
public static ConfigurationState getInstance() {
return ApplicationManager.getApplication().getService(ConfigurationState.class);
}
@Nullable
@Override
public ConfigurationState getState() {
return this;
}
@Override
public void loadState(@NotNull ConfigurationState state) {
XmlSerializerUtil.copyBean(state, this);
}
}