1
1
package ee .carlrobert .codegpt .settings .service ;
2
2
3
+ import static ee .carlrobert .codegpt .ui .UIUtil .createRadioButtonsPanel ;
3
4
import static java .util .stream .Collectors .toList ;
4
5
5
6
import com .intellij .icons .AllIcons .Actions ;
6
7
import com .intellij .openapi .application .ApplicationManager ;
8
+ import com .intellij .openapi .fileChooser .FileChooserDescriptorFactory ;
7
9
import com .intellij .openapi .ui .MessageType ;
10
+ import com .intellij .openapi .ui .TextBrowseFolderListener ;
11
+ import com .intellij .openapi .ui .TextFieldWithBrowseButton ;
8
12
import com .intellij .openapi .ui .panel .ComponentPanelBuilder ;
9
13
import com .intellij .openapi .util .io .FileUtil ;
10
14
import com .intellij .ui .PortField ;
11
15
import com .intellij .ui .TitledSeparator ;
12
16
import com .intellij .ui .components .JBLabel ;
17
+ import com .intellij .ui .components .JBRadioButton ;
13
18
import com .intellij .ui .components .JBTextField ;
14
19
import com .intellij .ui .components .fields .IntegerField ;
15
20
import com .intellij .util .ui .FormBuilder ;
22
27
import ee .carlrobert .codegpt .settings .state .LlamaSettingsState ;
23
28
import ee .carlrobert .codegpt .ui .OverlayUtil ;
24
29
import java .awt .BorderLayout ;
30
+ import java .awt .CardLayout ;
25
31
import java .io .File ;
26
32
import java .util .Arrays ;
27
33
import java .util .Collections ;
34
40
35
41
public class LlamaServiceSelectionForm extends JPanel {
36
42
43
+ private static final String BUNDLED_SERVER_FORM_CARD_CODE = "BundledServerSettings" ;
44
+ private static final String CUSTOM_SERVER_FORM_CARD_CODE = "CustomServerSettings" ;
45
+
37
46
private final LlamaModelPreferencesForm llamaModelPreferencesForm ;
38
47
private final LlamaRequestPreferencesForm llamaRequestPreferencesForm ;
39
48
private final PortField portField ;
40
49
private final IntegerField maxTokensField ;
41
50
private final IntegerField threadsField ;
42
51
private final JBTextField additionalParametersField ;
52
+ private final CardLayout cardLayout ;
53
+ private final JBRadioButton bundledServerRadioButton ;
54
+ private final JBRadioButton customServerRadioButton ;
55
+ private final TextFieldWithBrowseButton browsableCustomServerTextField ;
43
56
44
57
public LlamaServiceSelectionForm () {
45
58
var llamaServerAgent =
@@ -65,6 +78,15 @@ public LlamaServiceSelectionForm() {
65
78
additionalParametersField = new JBTextField (llamaSettings .getAdditionalParameters (), 30 );
66
79
additionalParametersField .setEnabled (!serverRunning );
67
80
81
+ cardLayout = new CardLayout ();
82
+ bundledServerRadioButton = new JBRadioButton ("Use bundled server" ,
83
+ !llamaSettings .isUseCustomServer ());
84
+ customServerRadioButton = new JBRadioButton ("Use custom server" ,
85
+ llamaSettings .isUseCustomServer ());
86
+ browsableCustomServerTextField = createBrowsableCustomServerTextField (
87
+ !llamaServerAgent .isServerRunning ());
88
+ browsableCustomServerTextField .setText (llamaSettings .getCustomLlamaServerPath ());
89
+
68
90
init (llamaServerAgent );
69
91
}
70
92
@@ -89,6 +111,12 @@ private JComponent withEmptyLeftBorder(JComponent component) {
89
111
return component ;
90
112
}
91
113
114
+ public String getActualServerPath () {
115
+ return isUseCustomServer ()
116
+ ? getCustomServerPath ()
117
+ : CodeGPTPlugin .getLlamaSourcePath () + File .separator + "server" ;
118
+ }
119
+
92
120
public int getContextSize () {
93
121
return maxTokensField .getValue ();
94
122
}
@@ -123,6 +151,22 @@ public List<String> getListOfAdditionalParameters() {
123
151
.collect (toList ());
124
152
}
125
153
154
+ public void setIsUseCustomServer (boolean useCustomServer ) {
155
+ customServerRadioButton .setSelected (useCustomServer );
156
+ }
157
+
158
+ public boolean isUseCustomServer () {
159
+ return customServerRadioButton .isSelected ();
160
+ }
161
+
162
+ public void setCustomServerPath (String customServerPath ) {
163
+ browsableCustomServerTextField .setText (customServerPath );
164
+ }
165
+
166
+ public String getCustomServerPath () {
167
+ return browsableCustomServerTextField .getText ();
168
+ }
169
+
126
170
private void init (LlamaServerAgent llamaServerAgent ) {
127
171
var serverProgressPanel = new ServerProgressPanel ();
128
172
serverProgressPanel .setBorder (JBUI .Borders .emptyRight (16 ));
@@ -134,6 +178,7 @@ private void init(LlamaServerAgent llamaServerAgent) {
134
178
.addComponent (new TitledSeparator (
135
179
CodeGPTBundle .get ("settingsConfigurable.service.llama.serverPreferences.title" )))
136
180
.addComponent (withEmptyLeftBorder (FormBuilder .createFormBuilder ()
181
+ .addComponent (getForm ())
137
182
.addLabeledComponent (
138
183
CodeGPTBundle .get ("shared.port" ),
139
184
JBUI .Panels .simplePanel ()
@@ -165,6 +210,60 @@ private void init(LlamaServerAgent llamaServerAgent) {
165
210
.getPanel ());
166
211
}
167
212
213
+ public JPanel getForm () {
214
+ JPanel finalPanel = new JPanel (new BorderLayout ());
215
+ finalPanel .add (createRadioButtonsPanel (bundledServerRadioButton , customServerRadioButton ),
216
+ BorderLayout .NORTH );
217
+ finalPanel .add (createFormPanelCards (), BorderLayout .CENTER );
218
+ return finalPanel ;
219
+ }
220
+
221
+ private JPanel createFormPanelCards () {
222
+ var formPanelCards = new JPanel (cardLayout );
223
+ formPanelCards .setBorder (JBUI .Borders .emptyLeft (16 ));
224
+ formPanelCards .add (new JPanel (), BUNDLED_SERVER_FORM_CARD_CODE );
225
+ formPanelCards .add (createCustomServerForm (), CUSTOM_SERVER_FORM_CARD_CODE );
226
+ cardLayout .show (
227
+ formPanelCards ,
228
+ bundledServerRadioButton .isSelected ()
229
+ ? BUNDLED_SERVER_FORM_CARD_CODE
230
+ : CUSTOM_SERVER_FORM_CARD_CODE );
231
+
232
+ bundledServerRadioButton .addActionListener (e ->
233
+ cardLayout .show (formPanelCards , BUNDLED_SERVER_FORM_CARD_CODE ));
234
+ customServerRadioButton .addActionListener (e ->
235
+ cardLayout .show (formPanelCards , CUSTOM_SERVER_FORM_CARD_CODE ));
236
+
237
+ return formPanelCards ;
238
+ }
239
+
240
+ private JPanel createCustomServerForm () {
241
+ var customModelHelpText = ComponentPanelBuilder .createCommentComponent (
242
+ CodeGPTBundle .get ("settingsConfigurable.service.llama.customServerPath.comment" ),
243
+ true );
244
+ customModelHelpText .setBorder (JBUI .Borders .empty (0 , 4 ));
245
+
246
+ return FormBuilder .createFormBuilder ()
247
+ .addLabeledComponent (
248
+ CodeGPTBundle .get ("settingsConfigurable.service.llama.customServerPath.label" ),
249
+ browsableCustomServerTextField )
250
+ .addComponentToRightColumn (customModelHelpText )
251
+ .addVerticalGap (4 )
252
+ .addComponentFillVertically (new JPanel (), 0 )
253
+ .getPanel ();
254
+ }
255
+
256
+ private TextFieldWithBrowseButton createBrowsableCustomServerTextField (boolean enabled ) {
257
+ var browseButton = new TextFieldWithBrowseButton ();
258
+ browseButton .setEnabled (enabled );
259
+
260
+ var fileChooserDescriptor = FileChooserDescriptorFactory .createSingleFileDescriptor ();
261
+ fileChooserDescriptor .setForcedToUseIdeaFileChooser (true );
262
+ fileChooserDescriptor .setHideIgnored (false );
263
+ browseButton .addBrowseFolderListener (new TextBrowseFolderListener (fileChooserDescriptor ));
264
+ return browseButton ;
265
+ }
266
+
168
267
private JLabel createComment (String messageKey ) {
169
268
var comment = ComponentPanelBuilder .createCommentComponent (
170
269
CodeGPTBundle .get (messageKey ), true );
@@ -193,6 +292,8 @@ private JButton getServerButton(
193
292
disableForm (serverButton , serverProgressPanel );
194
293
llamaServerAgent .startAgent (
195
294
new LlamaServerStartupParams (
295
+ getActualServerPath (),
296
+ isUseCustomServer (),
196
297
llamaModelPreferencesForm .getActualModelPath (),
197
298
getContextSize (),
198
299
getThreads (),
0 commit comments