Skip to content

Commit 9d83107

Browse files
plinkrcarlrobertoh
andauthored
Add support for some extended parameters of llama.cpp(top_k, top_p, min_p, and repeat_penalty) (#311)
* Add support for some extended parameters of llama.cpp(top_k, top_p, min_p, and repeat_penalty) Added 'top_k,' 'top_p,' 'min_p,' and 'repeat_penalty' fields to the llama.cpp request configuration. The default values for these fields match the defaults of llama.cpp. If left untouched, they do not affect the model's response to the request. * Bump llm-client --------- Co-authored-by: Carl-Robert Linnupuu <carlrobertoh@gmail.com>
1 parent 52c1b5d commit 9d83107

File tree

6 files changed

+142
-1
lines changed

6 files changed

+142
-1
lines changed

buildSrc/src/main/kotlin/codegpt.java-conventions.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ checkstyle {
2323
}
2424

2525
dependencies {
26-
implementation("ee.carlrobert:llm-client:0.1.2")
26+
implementation("ee.carlrobert:llm-client:0.1.3")
2727
}
2828

2929
tasks {

src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ public LlamaCompletionRequest buildLlamaCompletionRequest(Message message) {
109109
return new LlamaCompletionRequest.Builder(prompt)
110110
.setN_predict(configuration.getMaxTokens())
111111
.setTemperature(configuration.getTemperature())
112+
.setTop_k(configuration.getTopK())
113+
.setTop_p(configuration.getTopP())
114+
.setMin_p(configuration.getMinP())
115+
.setRepeat_penalty(configuration.getRepeatPenalty())
112116
.build();
113117
}
114118

src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationComponent.java

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ public class ConfigurationComponent {
5050
private final JTextArea commitMessagePromptTextArea;
5151
private final IntegerField maxTokensField;
5252
private final JBTextField temperatureField;
53+
private final IntegerField topKField;
54+
private final JBTextField topPField;
55+
private final JBTextField minPField;
56+
private final JBTextField repeatPenaltyField;
5357

5458
public ConfigurationComponent(Disposable parentDisposable, ConfigurationState configuration) {
5559
table = new JBTable(new DefaultTableModel(
@@ -68,6 +72,19 @@ public ConfigurationComponent(Disposable parentDisposable, ConfigurationState co
6872
temperatureField = new JBTextField(12);
6973
temperatureField.setText(String.valueOf(configuration.getTemperature()));
7074

75+
topKField = new IntegerField();
76+
topKField.setColumns(12);
77+
topKField.setValue(configuration.getTopK());
78+
79+
topPField = new JBTextField(12);
80+
topPField.setText(String.valueOf(configuration.getTopP()));
81+
82+
minPField = new JBTextField(12);
83+
minPField.setText(String.valueOf(configuration.getMinP()));
84+
85+
repeatPenaltyField = new JBTextField(12);
86+
repeatPenaltyField.setText(String.valueOf(configuration.getRepeatPenalty()));
87+
7188
var temperatureFieldValidator = createInputValidator(parentDisposable, temperatureField);
7289
temperatureField.getDocument().addDocumentListener(new DocumentListener() {
7390
@Override
@@ -131,6 +148,9 @@ public void changedUpdate(DocumentEvent e) {
131148
CodeGPTBundle.get("configurationConfigurable.section.assistant.title")))
132149
.addComponent(createAssistantConfigurationForm())
133150
.addComponentFillVertically(new JPanel(), 0)
151+
.addComponent(new TitledSeparator(
152+
CodeGPTBundle.get("configurationConfigurable.section.assistant.llamacppParams.title")))
153+
.addComponent(createLlamaAssistantConfigurationForm())
134154
.addComponent(new TitledSeparator(
135155
CodeGPTBundle.get("configurationConfigurable.section.commitMessage.title")))
136156
.addComponent(createCommitMessageConfigurationForm())
@@ -210,6 +230,34 @@ private JPanel createAssistantConfigurationForm() {
210230
return form;
211231
}
212232

233+
private JPanel createLlamaAssistantConfigurationForm() {
234+
var formBuilder = FormBuilder.createFormBuilder();
235+
addAssistantFormLabeledComponent(
236+
formBuilder,
237+
"configurationConfigurable.section.assistant.topKField.label",
238+
"configurationConfigurable.section.assistant.topKField.comment",
239+
topKField);
240+
addAssistantFormLabeledComponent(
241+
formBuilder,
242+
"configurationConfigurable.section.assistant.topPField.label",
243+
"configurationConfigurable.section.assistant.topPField.comment",
244+
topPField);
245+
addAssistantFormLabeledComponent(
246+
formBuilder,
247+
"configurationConfigurable.section.assistant.minPField.label",
248+
"configurationConfigurable.section.assistant.minPField.comment",
249+
minPField);
250+
addAssistantFormLabeledComponent(
251+
formBuilder,
252+
"configurationConfigurable.section.assistant.repeatPenaltyField.label",
253+
"configurationConfigurable.section.assistant.repeatPenaltyField.comment",
254+
repeatPenaltyField);
255+
256+
var form = formBuilder.getPanel();
257+
form.setBorder(JBUI.Borders.emptyLeft(16));
258+
return form;
259+
}
260+
213261
private JPanel createCommitMessageConfigurationForm() {
214262
var formBuilder = FormBuilder.createFormBuilder();
215263
addAssistantFormLabeledComponent(
@@ -296,6 +344,38 @@ public void setMaxTokens(int maxTokens) {
296344
maxTokensField.setValue(maxTokens);
297345
}
298346

347+
public int getTopK() {
348+
return topKField.getValue();
349+
}
350+
351+
public void setTopK(int topK) {
352+
topKField.setValue(topK);
353+
}
354+
355+
public double getTopP() {
356+
return Double.parseDouble(topPField.getText());
357+
}
358+
359+
public void setTopP(double topP) {
360+
topPField.setText(String.valueOf(topP));
361+
}
362+
363+
public double getMinP() {
364+
return Double.parseDouble(minPField.getText());
365+
}
366+
367+
public void setMinP(double minP) {
368+
minPField.setText(String.valueOf(minP));
369+
}
370+
371+
public double getRepeatPenalty() {
372+
return Double.parseDouble(repeatPenaltyField.getText());
373+
}
374+
375+
public void setRepeatPenalty(double repeatPenalty) {
376+
repeatPenaltyField.setText(String.valueOf(repeatPenalty));
377+
}
378+
299379
public boolean isCheckForPluginUpdates() {
300380
return checkForPluginUpdatesCheckBox.isSelected();
301381
}

src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationConfigurable.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ public boolean isModified() {
3636
return !configurationComponent.getTableData().equals(configuration.getTableData())
3737
|| configurationComponent.getMaxTokens() != configuration.getMaxTokens()
3838
|| configurationComponent.getTemperature() != configuration.getTemperature()
39+
|| configurationComponent.getTopK() != configuration.getTopK()
40+
|| configurationComponent.getTopP() != configuration.getTopP()
41+
|| configurationComponent.getMinP() != configuration.getMinP()
42+
|| configurationComponent.getRepeatPenalty() != configuration.getRepeatPenalty()
3943
|| !configurationComponent.getSystemPrompt().equals(configuration.getSystemPrompt())
4044
|| !configurationComponent.getCommitMessagePrompt()
4145
.equals(configuration.getCommitMessagePrompt())
@@ -55,6 +59,10 @@ public void apply() {
5559
configuration.setTableData(configurationComponent.getTableData());
5660
configuration.setMaxTokens(configurationComponent.getMaxTokens());
5761
configuration.setTemperature(configurationComponent.getTemperature());
62+
configuration.setTopK(configurationComponent.getTopK());
63+
configuration.setTopP(configurationComponent.getTopP());
64+
configuration.setMinP(configurationComponent.getMinP());
65+
configuration.setRepeatPenalty(configurationComponent.getRepeatPenalty());
5866
configuration.setSystemPrompt(configurationComponent.getSystemPrompt());
5967
configuration.setCommitMessagePrompt(configurationComponent.getCommitMessagePrompt());
6068
configuration.setCheckForPluginUpdates(configurationComponent.isCheckForPluginUpdates());
@@ -72,6 +80,10 @@ public void reset() {
7280
configurationComponent.setTableData(configuration.getTableData());
7381
configurationComponent.setMaxTokens(configuration.getMaxTokens());
7482
configurationComponent.setTemperature(configuration.getTemperature());
83+
configurationComponent.setTopK(configuration.getTopK());
84+
configurationComponent.setTopP(configuration.getTopP());
85+
configurationComponent.setMinP(configuration.getMinP());
86+
configurationComponent.setRepeatPenalty(configuration.getRepeatPenalty());
7587
configurationComponent.setSystemPrompt(configuration.getSystemPrompt());
7688
configurationComponent.setCommitMessagePrompt(configuration.getCommitMessagePrompt());
7789
configurationComponent.setCheckForPluginUpdates(configuration.isCheckForPluginUpdates());

src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationState.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ public class ConfigurationState implements PersistentStateComponent<Configuratio
2222
private String commitMessagePrompt = COMPLETION_COMMIT_MESSAGE_PROMPT;
2323
private int maxTokens = 1000;
2424
private double temperature = 0.1;
25+
private int topK = 40;
26+
private double topP = 0.9;
27+
private double minP = 0.05;
28+
private double repeatPenalty = 1.1;
2529
private boolean checkForPluginUpdates = true;
2630
private boolean createNewChatOnEachAction;
2731
private boolean ignoreGitCommitTokenLimit;
@@ -76,6 +80,38 @@ public void setTemperature(double temperature) {
7680
this.temperature = temperature;
7781
}
7882

83+
public int getTopK() {
84+
return topK;
85+
}
86+
87+
public void setTopK(int topK) {
88+
this.topK = topK;
89+
}
90+
91+
public double getTopP() {
92+
return topP;
93+
}
94+
95+
public void setTopP(double topP) {
96+
this.topP = topP;
97+
}
98+
99+
public double getMinP() {
100+
return minP;
101+
}
102+
103+
public void setMinP(double minP) {
104+
this.minP = minP;
105+
}
106+
107+
public double getRepeatPenalty() {
108+
return repeatPenalty;
109+
}
110+
111+
public void setRepeatPenalty(double repeatPenalty) {
112+
this.repeatPenalty = repeatPenalty;
113+
}
114+
79115
public boolean isCreateNewChatOnEachAction() {
80116
return createNewChatOnEachAction;
81117
}

src/main/resources/messages/codegpt.properties

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,15 @@ configurationConfigurable.section.assistant.temperatureField.label=Temperature:
8686
configurationConfigurable.section.assistant.temperatureField.comment=The value of randomness. Must be between 0 and 1
8787
configurationConfigurable.section.assistant.maxTokensField.label=Max completion tokens:
8888
configurationConfigurable.section.assistant.maxTokensField.comment=The maximum capacity for completion.
89+
configurationConfigurable.section.assistant.llamacppParams.title=Configuration Options for llama.cpp
90+
configurationConfigurable.section.assistant.topKField.label=Top-k:
91+
configurationConfigurable.section.assistant.topKField.comment=Limit the next token selection to the K most probable tokens (default: 40)
92+
configurationConfigurable.section.assistant.topPField.label=Top-p:
93+
configurationConfigurable.section.assistant.topPField.comment=Limit the next token selection to a subset of tokens with a cumulative probability above a threshold P (default: 0.9)
94+
configurationConfigurable.section.assistant.minPField.label=Min-p:
95+
configurationConfigurable.section.assistant.minPField.comment=Sets a minimum base probability threshold for token selection (default: 0.05)
96+
configurationConfigurable.section.assistant.repeatPenaltyField.label=Repeat penalty:
97+
configurationConfigurable.section.assistant.repeatPenaltyField.comment=Control the repetition of token sequences in the generated text (default: 1.1)
8998
configurationConfigurable.section.commitMessage.title=Commit Message
9099
configurationConfigurable.section.commitMessage.systemPromptField.label=Prompt:
91100
configurationConfigurable.section.commitMessage.systemPromptField.comment=Custom system prompt used for commit message generation.

0 commit comments

Comments
 (0)