Skip to content

Commit 28f3b83

Browse files
nservaisBlarc
authored andcommitted
feat(settings): add option to select OpenAI model
This commit adds the ability to select an OpenAI model from a dropdown in the settings panel. The selected model will be used for generating commit messages. The available models are `gpt-3.5-turbo` and `gpt-4`. The default model is `gpt-3.5-turbo`. The changes include adding a new enum class `OpenAIModel`, updating `AppSettings` to include a `openAIModel` property, updating the `AppSettingsConfigurable` panel to include a dropdown to select the model, and updating `OpenAIService` to use the selected model for generating commit messages.
1 parent ecb6b7b commit 28f3b83

File tree

6 files changed

+24
-8
lines changed

6 files changed

+24
-8
lines changed

src/main/kotlin/com/github/blarc/ai/commits/intellij/plugin/OpenAIService.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,22 @@ import com.github.blarc.ai.commits.intellij.plugin.settings.AppSettings
88
import com.intellij.openapi.application.ApplicationManager
99
import com.intellij.openapi.components.Service
1010

11+
1112
@Service
1213
class OpenAIService {
1314

1415
companion object {
15-
const val model = "gpt-3.5-turbo"
1616
val instance: OpenAIService
1717
get() = ApplicationManager.getApplication().getService(OpenAIService::class.java)
1818
}
1919

2020
@OptIn(BetaOpenAI::class)
2121
suspend fun generateCommitMessage(prompt: String, completions: Int): String {
22+
val openAIModel = AppSettings.instance.openAIModel.id
2223
val openAI = OpenAI(AppSettings.instance.getOpenAIConfig())
2324

2425
val chatCompletionRequest = ChatCompletionRequest(
25-
ModelId(model),
26+
ModelId(openAIModel),
2627
listOf(
2728
ChatMessage(
2829
role = ChatRole.User,
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.github.blarc.ai.commits.intellij.plugin.openaiModel
2+
3+
enum class OpenAIModel(val id: String) {
4+
GPT_3_5_TURBO("gpt-3.5-turbo"),
5+
GPT_4("gpt-4");
6+
}

src/main/kotlin/com/github/blarc/ai/commits/intellij/plugin/settings/AppSettings.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.aallam.openai.client.OpenAIConfig
44
import com.aallam.openai.client.ProxyConfig
55
import com.github.blarc.ai.commits.intellij.plugin.notifications.Notification
66
import com.github.blarc.ai.commits.intellij.plugin.notifications.sendNotification
7+
import com.github.blarc.ai.commits.intellij.plugin.openaiModel.OpenAIModel
78
import com.github.blarc.ai.commits.intellij.plugin.settings.prompt.Prompt
89
import com.intellij.credentialStore.CredentialAttributes
910
import com.intellij.credentialStore.Credentials
@@ -35,6 +36,8 @@ class AppSettings : PersistentStateComponent<AppSettings> {
3536
var prompts: MutableMap<String, Prompt> = initPrompts()
3637
var currentPrompt: Prompt = prompts["basic"]!!
3738

39+
var openAIModel: OpenAIModel = OpenAIModel.GPT_3_5_TURBO
40+
3841
companion object {
3942
const val SERVICE_NAME = "com.github.blarc.ai.commits.intellij.plugin.settings.AppSettings"
4043
val instance: AppSettings

src/main/kotlin/com/github/blarc/ai/commits/intellij/plugin/settings/AppSettingsConfigurable.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ import com.aallam.openai.api.exception.OpenAIAPIException
44
import com.github.blarc.ai.commits.intellij.plugin.AICommitsBundle
55
import com.github.blarc.ai.commits.intellij.plugin.AICommitsBundle.message
66
import com.github.blarc.ai.commits.intellij.plugin.OpenAIService
7+
import com.github.blarc.ai.commits.intellij.plugin.openaiModel.OpenAIModel
78
import com.github.blarc.ai.commits.intellij.plugin.settings.prompt.Prompt
89
import com.github.blarc.ai.commits.intellij.plugin.settings.prompt.PromptTable
910
import com.intellij.icons.AllIcons
10-
import com.intellij.openapi.actionSystem.AnAction
11-
import com.intellij.openapi.actionSystem.AnActionEvent
1211
import com.intellij.openapi.options.BoundConfigurable
1312
import com.intellij.openapi.progress.runBackgroundableTask
1413
import com.intellij.openapi.ui.ComboBox
@@ -17,15 +16,12 @@ import com.intellij.ui.ToolbarDecorator
1716
import com.intellij.ui.components.JBLabel
1817
import com.intellij.ui.dsl.builder.*
1918
import com.intellij.ui.util.minimumWidth
20-
import com.intellij.ui.util.preferredWidth
2119
import kotlinx.coroutines.DelicateCoroutinesApi
2220
import kotlinx.coroutines.Dispatchers
2321
import kotlinx.coroutines.GlobalScope
2422
import kotlinx.coroutines.launch
2523
import java.util.*
26-
import javax.swing.JComponent
2724
import javax.swing.JPasswordField
28-
import javax.swing.JScrollPane
2925

3026
class AppSettingsConfigurable : BoundConfigurable(message("settings.general.group.title")) {
3127

@@ -37,6 +33,12 @@ class AppSettingsConfigurable : BoundConfigurable(message("settings.general.grou
3733
override fun createPanel() = panel {
3834

3935
group(JBLabel("OpenAI")) {
36+
row {
37+
comboBox(OpenAIModel.values().toList(),
38+
AppSettingsListCellRenderer())
39+
.label(message("settings.openAIModel"))
40+
.bindItem(AppSettings.instance::openAIModel.toNullableProperty())
41+
}
4042
row {
4143
cell(tokenPasswordField)
4244
.label(message("settings.openAIToken"))

src/main/kotlin/com/github/blarc/ai/commits/intellij/plugin/settings/AppSettingsListCellRenderer.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.github.blarc.ai.commits.intellij.plugin.settings
22

3-
import ai.grazie.utils.capitalize
3+
import com.github.blarc.ai.commits.intellij.plugin.openaiModel.OpenAIModel
44
import com.github.blarc.ai.commits.intellij.plugin.settings.prompt.Prompt
55
import java.awt.Component
66
import java.util.*
@@ -22,6 +22,9 @@ class AppSettingsListCellRenderer : DefaultListCellRenderer() {
2222
if (value is Prompt) {
2323
text = value.name
2424
}
25+
if (value is OpenAIModel) {
26+
text = value.id
27+
}
2528
return component
2629
}
2730
}

src/main/resources/messages/MyBundle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ settings.general.group.title=AI Commits
55
settings.openAIToken=OpenAI token
66
settings.locale=Locale
77
settings.prompt=Prompt
8+
settings.openAIModel=OpenAI model
89
settings.openAITokenComment=\
910
<p>You can get your token <a href="https://platform.openai.com/account/api-keys">here.</a/></p>
1011
settings.report-bug=Report bug

0 commit comments

Comments
 (0)