From 9457318b9bd6ff7d6a6cebdffbee5596aaf8b8e2 Mon Sep 17 00:00:00 2001 From: Will Lo Date: Thu, 6 Feb 2025 11:06:16 -0800 Subject: [PATCH 1/4] fix empty string customization arn passed which causes service throwing validation error --- .../codewhisperer/credentials/CodeWhispererClientAdaptor.kt | 4 ++-- .../telemetry/CodeWhispererUserModificationTracker.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt index 9d638fc60ae..f1633e4db6f 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt @@ -146,7 +146,7 @@ interface CodeWhispererClientAdaptor : Disposable { sessionId: String, requestId: String, language: CodeWhispererProgrammingLanguage, - customizationArn: String, + customizationArn: String?, acceptedCharacterCount: Int, unmodifiedAcceptedTokenCount: Int, ): SendTelemetryEventResponse @@ -512,7 +512,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW sessionId: String, requestId: String, language: CodeWhispererProgrammingLanguage, - customizationArn: String, + customizationArn: String?, acceptedCharacterCount: Int, unmodifiedAcceptedTokenCount: Int, ): SendTelemetryEventResponse = bearerClient().sendTelemetryEvent { requestBuilder -> diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererUserModificationTracker.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererUserModificationTracker.kt index b5ce5048c4a..5f8fcbc044a 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererUserModificationTracker.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererUserModificationTracker.kt @@ -264,7 +264,7 @@ class CodeWhispererUserModificationTracker(private val project: Project) : Dispo suggestion.sessionId, suggestion.requestId, CodeWhispererLanguageManager.getInstance().getLanguage(suggestion.vFile), - CodeWhispererModelConfigurator.getInstance().activeCustomization(project)?.arn.orEmpty(), + CodeWhispererModelConfigurator.getInstance().activeCustomization(project)?.arn, suggestion.suggestion.length, getUnmodifiedAcceptedCharsCount(suggestion.suggestion, modifiedSuggestion) ) From da305c5fa14b1b92bb2fd436edc0f4cc16608253 Mon Sep 17 00:00:00 2001 From: Will Lo Date: Thu, 6 Feb 2025 11:13:36 -0800 Subject: [PATCH 2/4] patch --- .../credentials/CodeWhispererClientAdaptor.kt | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt index f1633e4db6f..d02ebd88928 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt @@ -427,7 +427,11 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW it.timestamp(Instant.now()) it.suggestionReferenceCount(suggestionReferenceCount) it.generatedLine(lineCount) - it.customizationArn(requestContext.customizationArn) + requestContext.customizationArn?.let { arn -> + if (arn.isNotBlank()) { + it.customizationArn(arn) + } + } it.numberOfRecommendations(numberOfRecommendations) it.acceptedCharacterCount(acceptedCharCount) } @@ -473,7 +477,11 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW it.timestamp(Instant.now()) it.suggestionReferenceCount(suggestionReferenceCount) it.generatedLine(lineCount) - it.customizationArn(requestContext.customizationArn) + requestContext.customizationArn?.let { arn -> + if (arn.isNotBlank()) { + it.customizationArn(arn) + } + } it.numberOfRecommendations(numberOfRecommendations) it.acceptedCharacterCount(acceptedCharCount) } @@ -495,7 +503,11 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW requestBuilder.telemetryEvent { telemetryEventBuilder -> telemetryEventBuilder.codeCoverageEvent { it.programmingLanguage { languageBuilder -> languageBuilder.languageName(language.toCodeWhispererRuntimeLanguage().languageId) } - it.customizationArn(customizationArn) + customizationArn?.let { arn -> + if (arn.isNotBlank()) { + it.customizationArn(arn) + } + } it.acceptedCharacterCount(acceptedTokenCount.toInt()) it.totalCharacterCount(totalTokenCount.toInt()) it.timestamp(Instant.now()) @@ -523,7 +535,11 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW it.programmingLanguage { languageBuilder -> languageBuilder.languageName(language.toCodeWhispererRuntimeLanguage().languageId) } - it.customizationArn(customizationArn) + customizationArn?.let { arn -> + if (arn.isNotBlank()) { + it.customizationArn(arn) + } + } // deprecated field, service side should not use this % anymore it.modificationPercentage(0.0) it.timestamp(Instant.now()) From f642878d9bc420e4453fa5ed2d4d1961b58f026a Mon Sep 17 00:00:00 2001 From: Will Lo Date: Mon, 10 Feb 2025 09:19:57 -0800 Subject: [PATCH 3/4] String.nullize() --- .../credentials/CodeWhispererClientAdaptor.kt | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt index d02ebd88928..32291f58440 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt @@ -7,6 +7,7 @@ import com.intellij.openapi.Disposable import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.components.service import com.intellij.openapi.project.Project +import com.intellij.util.text.nullize import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider import software.amazon.awssdk.services.codewhisperer.CodeWhispererClient import software.amazon.awssdk.services.codewhisperer.model.CreateCodeScanRequest @@ -428,9 +429,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW it.suggestionReferenceCount(suggestionReferenceCount) it.generatedLine(lineCount) requestContext.customizationArn?.let { arn -> - if (arn.isNotBlank()) { - it.customizationArn(arn) - } + it.customizationArn(arn.nullize(nullizeSpaces = true)) } it.numberOfRecommendations(numberOfRecommendations) it.acceptedCharacterCount(acceptedCharCount) @@ -478,9 +477,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW it.suggestionReferenceCount(suggestionReferenceCount) it.generatedLine(lineCount) requestContext.customizationArn?.let { arn -> - if (arn.isNotBlank()) { - it.customizationArn(arn) - } + it.customizationArn(arn.nullize(nullizeSpaces = true)) } it.numberOfRecommendations(numberOfRecommendations) it.acceptedCharacterCount(acceptedCharCount) @@ -504,9 +501,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW telemetryEventBuilder.codeCoverageEvent { it.programmingLanguage { languageBuilder -> languageBuilder.languageName(language.toCodeWhispererRuntimeLanguage().languageId) } customizationArn?.let { arn -> - if (arn.isNotBlank()) { - it.customizationArn(arn) - } + it.customizationArn(arn.nullize(nullizeSpaces = true)) } it.acceptedCharacterCount(acceptedTokenCount.toInt()) it.totalCharacterCount(totalTokenCount.toInt()) @@ -536,9 +531,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW languageBuilder.languageName(language.toCodeWhispererRuntimeLanguage().languageId) } customizationArn?.let { arn -> - if (arn.isNotBlank()) { - it.customizationArn(arn) - } + it.customizationArn(arn.nullize(nullizeSpaces = true)) } // deprecated field, service side should not use this % anymore it.modificationPercentage(0.0) @@ -777,7 +770,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW it.numberOfCodeBlocks(numberOfCodeBlocks) it.hasProjectLevelContext(hasProjectLevelContext) customization?.arn?.let { arn -> - it.customizationArn(arn) + it.customizationArn(arn.nullize(nullizeSpaces = true)) } } } @@ -832,7 +825,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW it.modificationPercentage(modificationPercentage) it.hasProjectLevelContext(hasProjectLevelContext) customization?.arn?.let { arn -> - it.customizationArn(arn) + it.customizationArn(arn.nullize(nullizeSpaces = true)) } } } From 00628b73e7b84650d563c17a74c379ea3742f667 Mon Sep 17 00:00:00 2001 From: Will Lo Date: Mon, 10 Feb 2025 09:27:08 -0800 Subject: [PATCH 4/4] patch --- .../credentials/CodeWhispererClientAdaptor.kt | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt index 32291f58440..f81e18a56a8 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt @@ -428,9 +428,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW it.timestamp(Instant.now()) it.suggestionReferenceCount(suggestionReferenceCount) it.generatedLine(lineCount) - requestContext.customizationArn?.let { arn -> - it.customizationArn(arn.nullize(nullizeSpaces = true)) - } + it.customizationArn(requestContext.customizationArn.nullize(nullizeSpaces = true)) it.numberOfRecommendations(numberOfRecommendations) it.acceptedCharacterCount(acceptedCharCount) } @@ -476,9 +474,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW it.timestamp(Instant.now()) it.suggestionReferenceCount(suggestionReferenceCount) it.generatedLine(lineCount) - requestContext.customizationArn?.let { arn -> - it.customizationArn(arn.nullize(nullizeSpaces = true)) - } + it.customizationArn(requestContext.customizationArn.nullize(nullizeSpaces = true)) it.numberOfRecommendations(numberOfRecommendations) it.acceptedCharacterCount(acceptedCharCount) } @@ -500,9 +496,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW requestBuilder.telemetryEvent { telemetryEventBuilder -> telemetryEventBuilder.codeCoverageEvent { it.programmingLanguage { languageBuilder -> languageBuilder.languageName(language.toCodeWhispererRuntimeLanguage().languageId) } - customizationArn?.let { arn -> - it.customizationArn(arn.nullize(nullizeSpaces = true)) - } + it.customizationArn(customizationArn.nullize(nullizeSpaces = true)) it.acceptedCharacterCount(acceptedTokenCount.toInt()) it.totalCharacterCount(totalTokenCount.toInt()) it.timestamp(Instant.now()) @@ -530,9 +524,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW it.programmingLanguage { languageBuilder -> languageBuilder.languageName(language.toCodeWhispererRuntimeLanguage().languageId) } - customizationArn?.let { arn -> - it.customizationArn(arn.nullize(nullizeSpaces = true)) - } + it.customizationArn(customizationArn.nullize(nullizeSpaces = true)) // deprecated field, service side should not use this % anymore it.modificationPercentage(0.0) it.timestamp(Instant.now()) @@ -769,9 +761,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW it.responseLength(responseLength) it.numberOfCodeBlocks(numberOfCodeBlocks) it.hasProjectLevelContext(hasProjectLevelContext) - customization?.arn?.let { arn -> - it.customizationArn(arn.nullize(nullizeSpaces = true)) - } + it.customizationArn(customization?.arn.nullize(nullizeSpaces = true)) } } requestBuilder.optOutPreference(getTelemetryOptOutPreference()) @@ -824,9 +814,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW } it.modificationPercentage(modificationPercentage) it.hasProjectLevelContext(hasProjectLevelContext) - customization?.arn?.let { arn -> - it.customizationArn(arn.nullize(nullizeSpaces = true)) - } + it.customizationArn(customization?.arn.nullize(nullizeSpaces = true)) } } requestBuilder.optOutPreference(getTelemetryOptOutPreference())