Skip to content

Commit 16d0ad1

Browse files
committed
feat(clients): show background progress
1 parent 20bd53c commit 16d0ad1

File tree

7 files changed

+40
-38
lines changed

7 files changed

+40
-38
lines changed
Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.github.blarc.ai.commits.intellij.plugin
22

3-
import com.github.blarc.ai.commits.intellij.plugin.AICommitsBundle.message
43
import com.github.blarc.ai.commits.intellij.plugin.AICommitsUtils.commonBranch
54
import com.github.blarc.ai.commits.intellij.plugin.AICommitsUtils.computeDiff
65
import com.github.blarc.ai.commits.intellij.plugin.AICommitsUtils.constructPrompt
@@ -9,7 +8,6 @@ import com.github.blarc.ai.commits.intellij.plugin.notifications.sendNotificatio
98
import com.github.blarc.ai.commits.intellij.plugin.settings.AppSettings2
109
import com.intellij.openapi.actionSystem.AnAction
1110
import com.intellij.openapi.actionSystem.AnActionEvent
12-
import com.intellij.openapi.progress.runBackgroundableTask
1311
import com.intellij.openapi.project.DumbAware
1412
import com.intellij.openapi.vcs.VcsDataKeys
1513
import com.intellij.openapi.vcs.ui.CommitMessage
@@ -33,30 +31,27 @@ class AICommitAction : AnAction(), DumbAware {
3331
val includedChanges = commitWorkflowHandler.ui.getIncludedChanges()
3432
val commitMessage = VcsDataKeys.COMMIT_MESSAGE_CONTROL.getData(e.dataContext) as CommitMessage?
3533

36-
// FIXME @Blarc: Use coroutine with Dispatchers.IO!!!!!!!!!!!
37-
runBackgroundableTask(message("action.background"), project) {
38-
val diff = computeDiff(includedChanges, false, project)
39-
if (diff.isBlank()) {
40-
sendNotification(Notification.emptyDiff())
41-
return@runBackgroundableTask
42-
}
34+
val diff = computeDiff(includedChanges, false, project)
35+
if (diff.isBlank()) {
36+
sendNotification(Notification.emptyDiff())
37+
return
38+
}
4339

44-
val branch = commonBranch(includedChanges, project)
45-
val hint = commitMessage?.text
46-
val prompt = constructPrompt(AppSettings2.instance.activePrompt.content, diff, branch, hint)
40+
val branch = commonBranch(includedChanges, project)
41+
val hint = commitMessage?.text
42+
val prompt = constructPrompt(AppSettings2.instance.activePrompt.content, diff, branch, hint)
4743

48-
// TODO @Blarc: add support for different clients
44+
// TODO @Blarc: add support for different clients
4945
// if (isPromptTooLarge(prompt)) {
5046
// sendNotification(Notification.promptTooLarge())
5147
// return@runBackgroundableTask
5248
// }
5349

54-
if (commitMessage == null) {
55-
sendNotification(Notification.noCommitMessage())
56-
return@runBackgroundableTask
57-
}
58-
59-
llmClient.generateCommitMessage(prompt, commitMessage)
50+
if (commitMessage == null) {
51+
sendNotification(Notification.noCommitMessage())
52+
return
6053
}
54+
55+
llmClient.generateCommitMessage(prompt, project, commitMessage)
6156
}
6257
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ object AICommitsUtils {
9090
val changesByRepository = includedChanges
9191
.filter {
9292
it.virtualFile?.path?.let { path ->
93-
AICommitsUtils.isPathExcluded(path, project)
93+
isPathExcluded(path, project)
9494
} ?: false
9595
}
9696
.mapNotNull { change ->

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ data class Notification(
2727

2828
fun star() = Notification(
2929
message = """
30-
Finding AI Commit useful? Show your support 💖 and ⭐ the repository 🙏.
30+
Finding AI Commits useful? Show your support 💖 and ⭐ the repository 🙏.
3131
""".trimIndent(),
3232
actions = setOf(
3333
NotificationAction.openRepository() {
@@ -39,7 +39,7 @@ data class Notification(
3939
)
4040
)
4141

42-
fun emptyDiff() = Notification(DEFAULT_TITLE, message = message("notifications.empty-diff"))
42+
fun emptyDiff() = Notification(DEFAULT_TITLE, message = message("notifications.empty-diff"), type = Type.TRANSIENT)
4343
fun promptTooLarge() = Notification(DEFAULT_TITLE, message = message("notifications.prompt-too-large"))
4444
fun unsuccessfulRequest(message: String) = Notification(message = message("notifications.unsuccessful-request", message))
4545
fun noCommitMessage() = Notification(message = message("notifications.no-commit-message"))

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

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

3+
import com.intellij.openapi.project.Project
34
import com.intellij.openapi.ui.ComboBox
45
import com.intellij.openapi.vcs.ui.CommitMessage
56
import com.intellij.util.xmlb.annotations.Attribute
@@ -40,7 +41,7 @@ abstract class LLMClientConfiguration(
4041
getSharedState().modelIds.add(modelId)
4142
}
4243

43-
abstract fun generateCommitMessage(prompt: String, commitMessage: CommitMessage)
44+
abstract fun generateCommitMessage(prompt: String, project: Project, commitMessage: CommitMessage)
4445

4546
abstract fun getRefreshModelsFunction(): ((ComboBox<String>) -> Unit)?
4647

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

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import com.github.blarc.ai.commits.intellij.plugin.settings.AppSettings2
55
import com.github.blarc.ai.commits.intellij.plugin.wrap
66
import com.intellij.icons.AllIcons
77
import com.intellij.openapi.application.EDT
8+
import com.intellij.openapi.project.Project
89
import com.intellij.openapi.vcs.ui.CommitMessage
10+
import com.intellij.platform.ide.progress.withBackgroundProgress
911
import com.intellij.ui.components.JBLabel
1012
import dev.langchain4j.data.message.UserMessage
1113
import dev.langchain4j.model.chat.ChatLanguageModel
@@ -18,18 +20,20 @@ abstract class LLMClientService<T : LLMClientConfiguration>(private val cs: Coro
1820

1921
abstract suspend fun buildChatModel(client: T): ChatLanguageModel
2022

21-
fun generateCommitMessage(client: T, prompt: String, commitMessage: CommitMessage) {
23+
fun generateCommitMessage(client: T, prompt: String, project: Project, commitMessage: CommitMessage) {
2224
cs.launch(Dispatchers.Default) {
23-
sendRequest(client, prompt, onSuccess = {
24-
withContext(Dispatchers.EDT) {
25-
commitMessage.setCommitMessage(it)
26-
}
27-
AppSettings2.instance.recordHit()
28-
}, onError = {
29-
withContext(Dispatchers.EDT) {
30-
commitMessage.setCommitMessage(it)
31-
}
32-
})
25+
withBackgroundProgress(project, "Generating commit") {
26+
sendRequest(client, prompt, onSuccess = {
27+
withContext(Dispatchers.EDT) {
28+
commitMessage.setCommitMessage(it)
29+
}
30+
AppSettings2.instance.recordHit()
31+
}, onError = {
32+
withContext(Dispatchers.EDT) {
33+
commitMessage.setCommitMessage(it)
34+
}
35+
})
36+
}
3337
}
3438
}
3539

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.github.blarc.ai.commits.intellij.plugin.settings.clients.ollama
33
import com.github.blarc.ai.commits.intellij.plugin.Icons
44
import com.github.blarc.ai.commits.intellij.plugin.settings.clients.LLMClientConfiguration
55
import com.github.blarc.ai.commits.intellij.plugin.settings.clients.LLMClientSharedState
6+
import com.intellij.openapi.project.Project
67
import com.intellij.openapi.ui.ComboBox
78
import com.intellij.openapi.vcs.ui.CommitMessage
89
import javax.swing.Icon
@@ -32,8 +33,8 @@ class OllamaClientConfiguration : LLMClientConfiguration(
3233
return OllamaClientSharedState.getInstance()
3334
}
3435

35-
override fun generateCommitMessage(prompt: String, commitMessage: CommitMessage) {
36-
return OllamaClientService.getInstance().generateCommitMessage(this, prompt, commitMessage)
36+
override fun generateCommitMessage(prompt: String, project: Project, commitMessage: CommitMessage) {
37+
return OllamaClientService.getInstance().generateCommitMessage(this, prompt, project, commitMessage)
3738
}
3839

3940
override fun getRefreshModelsFunction() = fun (cb: ComboBox<String>) {

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.github.blarc.ai.commits.intellij.plugin.settings.clients.openAi
22

33
import com.github.blarc.ai.commits.intellij.plugin.Icons
44
import com.github.blarc.ai.commits.intellij.plugin.settings.clients.LLMClientConfiguration
5+
import com.intellij.openapi.project.Project
56
import com.intellij.openapi.vcs.ui.CommitMessage
67
import com.intellij.util.xmlb.annotations.Transient
78
import javax.swing.Icon
@@ -35,8 +36,8 @@ class OpenAiClientConfiguration : LLMClientConfiguration(
3536
return OpenAiClientSharedState.getInstance()
3637
}
3738

38-
override fun generateCommitMessage(prompt: String, commitMessage: CommitMessage) {
39-
return OpenAiClientService.getInstance().generateCommitMessage(this, prompt, commitMessage)
39+
override fun generateCommitMessage(prompt: String, project: Project, commitMessage: CommitMessage) {
40+
return OpenAiClientService.getInstance().generateCommitMessage(this, prompt, project, commitMessage)
4041
}
4142

4243
// Model names are retrieved from Enum and do not need to be refreshed.

0 commit comments

Comments
 (0)