Skip to content

Commit 0afdf3e

Browse files
committed
local indexing
1 parent a5599a7 commit 0afdf3e

File tree

8 files changed

+58
-37
lines changed

8 files changed

+58
-37
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
1+
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33

44
package software.aws.toolkits.jetbrains.services.codewhisperer.credentials
@@ -79,8 +79,6 @@ interface CodeWhispererClientAdaptor {
7979

8080
fun getCodeFixJob(request: GetCodeFixJobRequest): GetCodeFixJobResponse
8181

82-
fun listAvailableCustomizations(profile: QRegionProfile): List<CodeWhispererCustomization>
83-
8482
fun startTestGeneration(uploadId: String, targetCode: List<TargetCode>, userInput: String): StartTestGenerationResponse
8583

8684
fun getTestGeneration(jobId: String, jobGroupName: String): GetTestGenerationResponse
@@ -282,29 +280,6 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW
282280

283281
override fun getCodeFixJob(request: GetCodeFixJobRequest): GetCodeFixJobResponse = bearerClient().getCodeFixJob(request)
284282

285-
// DO NOT directly use this method to fetch customizations, use wrapper [CodeWhispererModelConfigurator.listCustomization()] instead
286-
override fun listAvailableCustomizations(profile: QRegionProfile): List<CodeWhispererCustomization> =
287-
QRegionProfileManager.getInstance().getQClient<CodeWhispererRuntimeClient>(project, profile).listAvailableCustomizationsPaginator(
288-
ListAvailableCustomizationsRequest.builder().profileArn(profile.arn).build()
289-
)
290-
.stream()
291-
.toList()
292-
.flatMap { resp ->
293-
LOG.debug {
294-
"listAvailableCustomizations: requestId: ${resp.responseMetadata().requestId()}, customizations: ${
295-
resp.customizations().map { it.name() }
296-
}"
297-
}
298-
resp.customizations().map {
299-
CodeWhispererCustomization(
300-
arn = it.arn(),
301-
name = it.name(),
302-
description = it.description(),
303-
profile = profile
304-
)
305-
}
306-
}
307-
308283
override fun startTestGeneration(uploadId: String, targetCode: List<TargetCode>, userInput: String): StartTestGenerationResponse =
309284
bearerClient().startTestGeneration { builder ->
310285
builder.uploadId(uploadId)

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/util/CodeWhispererConstants.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ object CodeWhispererConstants {
5959
val scanResultsKey = DataKey.create<CodeScanResponse>("amazonq.codescan.result")
6060
val scanScopeKey = DataKey.create<CodeAnalysisScope>("amazonq.codescan.scope")
6161

62-
const val Q_CUSTOM_LEARN_MORE_URI = "https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/customizations.html"
6362
const val Q_SUPPORTED_LANG_URI = "https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-language-ide-support.html"
6463
const val CODEWHISPERER_CODE_SCAN_LEARN_MORE_URI = "https://docs.aws.amazon.com/codewhisperer/latest/userguide/security-scans.html"
6564
const val CODEWHISPERER_ONBOARDING_DOCUMENTATION_URI = "https://docs.aws.amazon.com/codewhisperer/latest/userguide/features.html"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
1+
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33

44
package migration.software.aws.toolkits.jetbrains.services.codewhisperer.customization

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credential
1919
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.SsoProfileData
2020
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
2121
import java.util.concurrent.CompletableFuture
22-
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileManager
22+
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator
23+
2324
/**
2425
* Concrete implementation of [AmazonQLanguageClient] to handle messages sent from server
2526
*/
@@ -78,22 +79,31 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
7879

7980
return CompletableFuture.completedFuture(
8081
buildList {
82+
val qSettings = CodeWhispererSettings.getInstance()
8183
params.items.forEach {
8284
when (it.section) {
8385
AmazonQLspConstants.LSP_CW_CONFIGURATION_KEY -> {
8486
add(
8587
CodeWhispererLspConfiguration(
86-
shouldShareData = CodeWhispererSettings.getInstance().isMetricOptIn(),
87-
shouldShareCodeReferences = CodeWhispererSettings.getInstance().isIncludeCodeWithReference(),
88-
shouldEnableWorkspaceContext = CodeWhispererSettings.getInstance().isWorkspaceContextEnabled()
88+
shouldShareData = qSettings.isMetricOptIn(),
89+
shouldShareCodeReferences = qSettings.isIncludeCodeWithReference(),
90+
// server context
91+
shouldEnableWorkspaceContext = qSettings.isWorkspaceContextEnabled()
8992
)
9093
)
9194
}
9295
AmazonQLspConstants.LSP_Q_CONFIGURATION_KEY -> {
9396
add(
9497
AmazonQLspConfiguration(
9598
optOutTelemetry = AwsSettings.getInstance().isTelemetryEnabled,
96-
customization = QRegionProfileManager.getInstance().activeProfile(project)?.arn
99+
customization = CodeWhispererModelConfigurator.getInstance().activeCustomization(project)?.arn,
100+
// local context
101+
enableLocalIndexing = qSettings.isProjectContextEnabled(),
102+
indexWorkerThreads = qSettings.getProjectContextIndexThreadCount(),
103+
enableGpuAcceleration = qSettings.isProjectContextGpu(),
104+
localIndexing = LocalIndexingConfiguration(
105+
maxIndexSizeMB = qSettings.getProjectContextIndexMaxSize()
106+
)
97107
)
98108
)
99109
}

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspConfiguration.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,19 @@ data class AmazonQLspConfiguration(
1414

1515
@SerializedName(AmazonQLspConstants.LSP_CUSTOMIZATION_CONFIGURATION_KEY)
1616
val customization: String? = null,
17+
18+
val enableLocalIndexing: Boolean? = null,
19+
20+
val enableGpuAcceleration: Boolean? = null,
21+
22+
val indexWorkerThreads: Int? = null,
23+
24+
val localIndexing: LocalIndexingConfiguration? = null,
25+
)
26+
27+
data class LocalIndexingConfiguration(
28+
val ignoreFilePatterns: List<String>? = null,
29+
val maxFileSizeMB: Int? = null,
30+
val maxIndexSizeMB: Int? = null,
31+
val indexCacheDirPath: String? = null,
1732
)
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import software.aws.toolkits.core.utils.tryOrNull
2929
import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileSwitchIntent
3030
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfile
3131
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileManager
32-
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.Q_CUSTOM_LEARN_MORE_URI
3332
import software.aws.toolkits.jetbrains.ui.AsyncComboBox
3433
import software.aws.toolkits.jetbrains.utils.notifyInfo
3534
import software.aws.toolkits.resources.message
@@ -174,7 +173,7 @@ class CodeWhispererCustomizationDialog(
174173
lateinit var customizationComment: Row
175174
indent {
176175
noCustomizationComment = row("") {
177-
rowComment(message("codewhisperer.custom.dialog.option.customization.description.no_customization", Q_CUSTOM_LEARN_MORE_URI))
176+
rowComment(message("codewhisperer.custom.dialog.option.customization.description.no_customization", "https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/customizations.html"))
178177
}.visible(false)
179178

180179
customizationComment = row("") {
Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import com.intellij.openapi.project.Project
1717
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
1818
import com.intellij.util.xmlb.annotations.MapAnnotation
1919
import com.intellij.util.xmlb.annotations.Property
20+
import software.amazon.awssdk.services.codewhispererruntime.CodeWhispererRuntimeClient
2021
import software.amazon.awssdk.services.codewhispererruntime.model.CodeWhispererRuntimeException
2122
import software.aws.toolkits.core.utils.debug
2223
import software.aws.toolkits.core.utils.getLogger
@@ -25,7 +26,6 @@ import software.aws.toolkits.jetbrains.services.amazonq.calculateIfIamIdentityCe
2526
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfile
2627
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileManager
2728
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileSelectedListener
28-
import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererClientAdaptor
2929
import software.aws.toolkits.jetbrains.utils.notifyInfo
3030
import software.aws.toolkits.jetbrains.utils.notifyWarn
3131
import software.aws.toolkits.jetbrains.utils.pluginAwareExecuteOnPooledThread
@@ -105,6 +105,29 @@ class DefaultCodeWhispererModelConfigurator : CodeWhispererModelConfigurator, Pe
105105
}
106106
}
107107

108+
/**
109+
* DO NOT directly use this method to fetch customizations, use wrapper [listCustomizations] instead
110+
*/
111+
private fun listAvailableCustomizations(project: Project, profile: QRegionProfile): List<CodeWhispererCustomization> =
112+
QRegionProfileManager.getInstance().getQClient<CodeWhispererRuntimeClient>(project, profile).listAvailableCustomizationsPaginator {
113+
it.profileArn(profile.arn)
114+
}.flatMap { resp ->
115+
LOG.debug {
116+
"listAvailableCustomizations: requestId: ${resp.responseMetadata().requestId()}, customizations: ${
117+
resp.customizations().map { it.name() }
118+
}"
119+
}
120+
121+
resp.customizations().map {
122+
CodeWhispererCustomization(
123+
arn = it.arn(),
124+
name = it.name(),
125+
description = it.description(),
126+
profile = profile
127+
)
128+
}
129+
}
130+
108131
@RequiresBackgroundThread
109132
override fun listCustomizations(project: Project, passive: Boolean): List<CustomizationUiItem>? =
110133
calculateIfIamIdentityCenterConnection(project) {
@@ -114,7 +137,7 @@ class DefaultCodeWhispererModelConfigurator : CodeWhispererModelConfigurator, Pe
114137

115138
val aggregatedCustomizations = listAvailableProfilesResult.flatMap { profile ->
116139
runCatching {
117-
CodeWhispererClientAdaptor.getInstance(project).listAvailableCustomizations(profile)
140+
listAvailableCustomizations(project, profile)
118141
}.onFailure { e ->
119142
val requestId = (e as? CodeWhispererRuntimeException)?.requestId()
120143
val logMessage = "ListAvailableCustomizations: failed due to unknown error ${e.message}, " +

0 commit comments

Comments
 (0)