Skip to content
This repository was archived by the owner on Nov 4, 2024. It is now read-only.

Commit fb04475

Browse files
committed
feat: Add button for verifying Open AI token in settings.
1 parent 5643442 commit fb04475

4 files changed

Lines changed: 66 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# Changelog
22

33
## [Unreleased]
4+
### Added
5+
- Add button for verifying Open AI token in settings.
6+
47

58
## [0.4.0] - 2023-03-29
69

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

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

33
import com.aallam.openai.api.BetaOpenAI
44
import com.aallam.openai.api.chat.*
5+
import com.aallam.openai.api.completion.CompletionRequest
56
import com.aallam.openai.api.model.ModelId
67
import com.aallam.openai.client.OpenAI
78
import com.github.blarc.ai.commits.intellij.plugin.settings.AppSettings
@@ -46,4 +47,8 @@ class OpenAIService {
4647
return completion.choices[0].message!!.content
4748

4849
}
50+
@Throws(Exception::class)
51+
suspend fun verifyToken(token: String){
52+
OpenAI(token).models()
53+
}
4954
}
Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,81 @@
11
package com.github.blarc.ai.commits.intellij.plugin.settings
22

3+
import com.aallam.openai.api.exception.OpenAIAPIException
34
import com.github.blarc.ai.commits.intellij.plugin.AICommitsBundle.message
5+
import com.github.blarc.ai.commits.intellij.plugin.OpenAIService
6+
import com.intellij.icons.AllIcons
47
import com.intellij.openapi.options.BoundConfigurable
8+
import com.intellij.openapi.progress.runBackgroundableTask
9+
import com.intellij.ui.components.JBLabel
510
import com.intellij.ui.dsl.builder.*
6-
import java.awt.Component
11+
import kotlinx.coroutines.DelicateCoroutinesApi
12+
import kotlinx.coroutines.Dispatchers
13+
import kotlinx.coroutines.GlobalScope
14+
import kotlinx.coroutines.launch
715
import java.util.*
8-
import javax.swing.DefaultListCellRenderer
9-
import javax.swing.JList
16+
import javax.swing.JPasswordField
1017

1118
class AppSettingsConfigurable : BoundConfigurable(message("settings.general.group.title")) {
19+
20+
private val tokenPasswordField = JPasswordField()
21+
private val verifyLabel = JBLabel()
1222
override fun createPanel() = panel {
1323

1424
row {
15-
passwordField()
25+
cell(tokenPasswordField)
1626
.label(message("settings.openAIToken"))
1727
.bindText(
1828
{ AppSettings.instance.getOpenAIToken().orEmpty() },
1929
{ AppSettings.instance.saveOpenAIToken(it)}
2030
)
2131
.align(Align.FILL)
32+
.resizableColumn()
33+
.focused()
34+
button(message("settings.verifyToken")) {
35+
verifyToken()
36+
}.align(AlignX.RIGHT)
2237
}
2338
row {
2439
comment(message("settings.openAITokenComment"))
40+
.align(AlignX.LEFT)
41+
cell(verifyLabel)
42+
.align(AlignX.RIGHT)
2543
}
2644
row {
2745
comboBox(Locale.getAvailableLocales().toList(), AppSettingsListCellRenderer())
2846
.label(message("settings.locale"))
2947
.bindItem(AppSettings.instance::locale.toNullableProperty())
3048
}
3149
}
50+
51+
@OptIn(DelicateCoroutinesApi::class)
52+
private fun verifyToken() {
53+
runBackgroundableTask(message("settings.verify.running")) {
54+
if (tokenPasswordField.password.isEmpty()) {
55+
verifyLabel.icon = AllIcons.General.InspectionsError
56+
verifyLabel.text = message("settings.verify.token-is-empty")
57+
} else {
58+
verifyLabel.icon = AllIcons.General.InlineRefreshHover
59+
verifyLabel.text = message("settings.verify.running")
60+
61+
GlobalScope.launch(Dispatchers.IO) {
62+
try {
63+
println(String(tokenPasswordField.password))
64+
OpenAIService.instance.verifyToken(String(tokenPasswordField.password))
65+
verifyLabel.text = message("settings.verify.valid")
66+
verifyLabel.icon = AllIcons.General.InspectionsOK
67+
}
68+
catch (e: OpenAIAPIException) {
69+
verifyLabel.text = message("settings.verify.invalid", e.statusCode)
70+
verifyLabel.icon = AllIcons.General.InspectionsError
71+
}
72+
catch (e: Exception) {
73+
verifyLabel.text = message("settings.verify.invalid", "Unknown")
74+
verifyLabel.icon = AllIcons.General.InspectionsError
75+
}
76+
}
77+
}
78+
}
79+
80+
}
3281
}

src/main/resources/messages/MyBundle.properties

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@ settings.openAIToken=OpenAI token
66
settings.locale=Locale
77
settings.openAITokenComment=\
88
<p>You can get your token <a href="https://platform.openai.com/account/api-keys">here.</a/></p>
9+
settings.verifyToken=Verify
10+
settings.verify.valid=Open AI token is valid.
11+
settings.verify.invalid=Open AI token is not valid ({0}).
12+
settings.verify.running=Verifying Open AI token...
13+
settings.verify.token-is-empty=Open AI token is empty.
914

1015
action.background=Generating commit message
1116

12-
1317
notifications.title=AI Commits
1418
notifications.welcome=Thanks for installing AI Commits <strong>{0}</strong>
1519
notifications.unsuccessful-request=Error occurred: {0}

0 commit comments

Comments
 (0)