Skip to content

Commit bd7e60f

Browse files
committed
fix(prompts): project specific option does not work
Closes #229
1 parent ada14e3 commit bd7e60f

File tree

6 files changed

+46
-38
lines changed

6 files changed

+46
-38
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## [Unreleased]
44

5+
### Fixed
6+
7+
- Setting LLM client configuration or prompt as project specific does not work.
8+
59
## [2.4.0] - 2024-09-13
610

711
### Added

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@ package com.github.blarc.ai.commits.intellij.plugin
22

33
import com.github.blarc.ai.commits.intellij.plugin.notifications.Notification
44
import com.github.blarc.ai.commits.intellij.plugin.notifications.sendNotification
5-
import com.github.blarc.ai.commits.intellij.plugin.settings.AppSettings2
5+
import com.github.blarc.ai.commits.intellij.plugin.settings.ProjectSettings
66
import com.intellij.openapi.actionSystem.AnAction
77
import com.intellij.openapi.actionSystem.AnActionEvent
8+
import com.intellij.openapi.components.service
89
import com.intellij.openapi.project.DumbAware
910
import com.intellij.openapi.vcs.VcsDataKeys
1011
import com.intellij.openapi.vcs.ui.CommitMessage
1112
import com.intellij.vcs.commit.AbstractCommitWorkflowHandler
1213

1314
class AICommitAction : AnAction(), DumbAware {
1415
override fun actionPerformed(e: AnActionEvent) {
15-
val llmClient = AppSettings2.instance.getActiveLLMClientConfiguration()
16+
val project = e.project ?: return
17+
18+
val llmClient = project.service<ProjectSettings>().getActiveLLMClientConfiguration()
1619
if (llmClient == null) {
1720
sendNotification(Notification.clientNotSet())
1821
return
@@ -30,7 +33,6 @@ class AICommitAction : AnAction(), DumbAware {
3033
return
3134
}
3235

33-
val project = e.project ?: return
3436
llmClient.generateCommitMessage(commitWorkflowHandler, commitMessage, project)
3537
}
3638
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class AppSettings2 : PersistentStateComponent<AppSettings2> {
6868

6969
@XMap
7070
var prompts = DefaultPrompts.toPromptsMap()
71-
var activePrompt = prompts["basic"]!!
71+
var activePrompt = DefaultPrompts.BASIC.prompt
7272

7373
var appExclusions: Set<String> = setOf()
7474

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

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import java.util.*
2020
// Most of the settings are global, but we use project configurable to set isProjectSpecificLLMClient property
2121
class AppSettingsConfigurable(val project: Project, cs: CoroutineScope) : BoundConfigurable(message("settings.general.group.title")) {
2222

23+
private val projectSettings = project.service<ProjectSettings>()
2324
private val llmClientTable = LLMClientTable()
2425
private lateinit var llmClientConfigurationComboBox: ComboBox<LLMClientConfiguration>
2526
private var isProjectSpecificLLMClientCheckBox = JBCheckBox(message("settings.llmClient.projectSpecific"))
@@ -34,7 +35,7 @@ class AppSettingsConfigurable(val project: Project, cs: CoroutineScope) : BoundC
3435
row {
3536
label(message("settings.llmClient")).widthGroup("labelPrompt")
3637
llmClientConfigurationComboBox = comboBox(AppSettings2.instance.llmClientConfigurations, AICommitsListCellRenderer())
37-
.bindItem(getter = { getActiveLLMClientConfiguration() }, setter = { setActiveLLMClientConfiguration(it) })
38+
.bindItem(getter = { projectSettings.getActiveLLMClientConfiguration() }, setter = { setActiveLLMClientConfiguration(it) })
3839
.widthGroup("input")
3940
.component
4041
cell(isProjectSpecificLLMClientCheckBox)
@@ -79,15 +80,15 @@ class AppSettingsConfigurable(val project: Project, cs: CoroutineScope) : BoundC
7980
AICommitsListCellRenderer()
8081
)
8182
.widthGroup("input")
82-
.bindItem(getter = { getActiveLocale() }, setter = { setActiveLocale(it)} )
83+
.bindItem(getter = { projectSettings.locale }, setter = { setActiveLocale(it)} )
8384

8485
browserLink(message("settings.more-prompts"), AICommitsBundle.URL_PROMPTS_DISCUSSION.toString())
8586
.align(AlignX.RIGHT)
8687
}
8788
row {
8889
label(message("settings.prompt")).widthGroup("labelPrompt")
8990
promptComboBox = comboBox(AppSettings2.instance.prompts.values, AICommitsListCellRenderer())
90-
.bindItem(getter = { getActivePrompt() }, { setActivePrompt(it) })
91+
.bindItem(getter = { projectSettings.activePrompt }, { setActivePrompt(it) })
9192
.widthGroup("input")
9293
.component
9394
cell(isProjectSpecificPromptCheckBox)
@@ -137,14 +138,6 @@ class AppSettingsConfigurable(val project: Project, cs: CoroutineScope) : BoundC
137138
}
138139
}
139140

140-
private fun getActiveLLMClientConfiguration(): LLMClientConfiguration? {
141-
return if (isProjectSpecificLLMClientCheckBox.isSelected) {
142-
project.service<ProjectSettings>().getActiveLLMClientConfiguration()
143-
} else {
144-
AppSettings2.instance.getActiveLLMClientConfiguration()
145-
}
146-
}
147-
148141
private fun setActiveLLMClientConfiguration(llmClientConfiguration: LLMClientConfiguration?) {
149142
llmClientConfiguration?.let {
150143
if (isProjectSpecificLLMClientCheckBox.isSelected) {
@@ -155,38 +148,22 @@ class AppSettingsConfigurable(val project: Project, cs: CoroutineScope) : BoundC
155148
}
156149
}
157150

158-
private fun getActivePrompt(): Prompt? {
159-
return if (isProjectSpecificPromptCheckBox.isSelected) {
160-
project.service<ProjectSettings>().activePrompt
161-
} else {
162-
AppSettings2.instance.activePrompt
163-
}
164-
}
165-
166151
private fun setActivePrompt(prompt: Prompt?) {
167152
prompt?.let {
168153
if (isProjectSpecificPromptCheckBox.isSelected) {
169-
project.service<ProjectSettings>().activePrompt = prompt
154+
project.service<ProjectSettings>().activePrompt = it
170155
} else {
171-
AppSettings2.instance.activePrompt = prompt
156+
AppSettings2.instance.activePrompt = it
172157
}
173158
}
174159
}
175160

176-
private fun getActiveLocale(): Locale {
177-
return if (isProjectSpecificPromptCheckBox.isSelected) {
178-
project.service<ProjectSettings>().locale
179-
} else {
180-
AppSettings2.instance.locale
181-
}
182-
}
183-
184161
private fun setActiveLocale(locale: Locale?) {
185162
locale?.let {
186163
if (isProjectSpecificPromptCheckBox.isSelected) {
187-
project.service<ProjectSettings>().locale = locale
164+
project.service<ProjectSettings>().locale = it
188165
} else {
189-
AppSettings2.instance.locale = locale
166+
AppSettings2.instance.locale = it
190167
}
191168
}
192169
}

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

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.github.blarc.ai.commits.intellij.plugin.settings
33
import com.github.blarc.ai.commits.intellij.plugin.AICommitsUtils
44
import com.github.blarc.ai.commits.intellij.plugin.settings.AppSettings2.LocaleConverter
55
import com.github.blarc.ai.commits.intellij.plugin.settings.clients.LLMClientConfiguration
6+
import com.github.blarc.ai.commits.intellij.plugin.settings.prompts.DefaultPrompts
67
import com.github.blarc.ai.commits.intellij.plugin.settings.prompts.Prompt
78
import com.intellij.openapi.components.PersistentStateComponent
89
import com.intellij.openapi.components.Service
@@ -31,9 +32,12 @@ class ProjectSettings : PersistentStateComponent<ProjectSettings?> {
3132
@Attribute
3233
var isProjectSpecificLLMClient: Boolean = false
3334

34-
var activePrompt: Prompt? = null
35+
var activePrompt = DefaultPrompts.BASIC.prompt
36+
get() = getActivePrompt(field)
37+
3538
@OptionTag(converter = LocaleConverter::class)
3639
var locale: Locale = Locale.ENGLISH
40+
get() = getActiveLocale(field)
3741
@Attribute
3842
var isProjectSpecificPrompt: Boolean = false
3943

@@ -48,7 +52,26 @@ class ProjectSettings : PersistentStateComponent<ProjectSettings?> {
4852
}
4953

5054
fun getActiveLLMClientConfiguration(): LLMClientConfiguration? {
51-
return AppSettings2.instance.getActiveLLMClientConfiguration(activeLlmClientId)
55+
return if (isProjectSpecificLLMClient) {
56+
AppSettings2.instance.getActiveLLMClientConfiguration(activeLlmClientId)
57+
} else {
58+
AppSettings2.instance.getActiveLLMClientConfiguration()
59+
}
60+
}
61+
62+
private fun getActivePrompt(activePrompt: Prompt): Prompt {
63+
return if (isProjectSpecificPrompt) {
64+
activePrompt
65+
} else {
66+
AppSettings2.instance.activePrompt
67+
}
5268
}
5369

70+
private fun getActiveLocale(locale: Locale): Locale {
71+
return if (isProjectSpecificPrompt) {
72+
locale
73+
} else {
74+
AppSettings2.instance.locale
75+
}
76+
}
5477
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ import com.github.blarc.ai.commits.intellij.plugin.AICommitsUtils.constructPromp
77
import com.github.blarc.ai.commits.intellij.plugin.notifications.Notification
88
import com.github.blarc.ai.commits.intellij.plugin.notifications.sendNotification
99
import com.github.blarc.ai.commits.intellij.plugin.settings.AppSettings2
10+
import com.github.blarc.ai.commits.intellij.plugin.settings.ProjectSettings
1011
import com.github.blarc.ai.commits.intellij.plugin.wrap
1112
import com.intellij.icons.AllIcons
1213
import com.intellij.openapi.application.EDT
1314
import com.intellij.openapi.application.ModalityState
1415
import com.intellij.openapi.application.asContextElement
16+
import com.intellij.openapi.components.service
1517
import com.intellij.openapi.project.Project
1618
import com.intellij.openapi.vcs.changes.Change
1719
import com.intellij.openapi.vcs.ui.CommitMessage
@@ -54,7 +56,7 @@ abstract class LLMClientService<C : LLMClientConfiguration>(private val cs: Coro
5456
}
5557

5658
val branch = commonBranch(includedChanges, project)
57-
val prompt = constructPrompt(AppSettings2.instance.activePrompt.content, diff, branch, commitMessage.text, project)
59+
val prompt = constructPrompt(project.service<ProjectSettings>().activePrompt.content, diff, branch, commitMessage.text, project)
5860

5961
sendRequest(clientConfiguration, prompt, onSuccess = {
6062
withContext(Dispatchers.EDT) {

0 commit comments

Comments
 (0)