in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererTelemetryService.kt [193:286]
fun sendUserTriggerDecisionEvent(
requestContext: RequestContext,
responseContext: ResponseContext,
recommendationContext: RecommendationContext,
suggestionState: CodewhispererSuggestionState,
popupShownTime: Duration?,
suggestionReferenceCount: Int,
generatedLineCount: Int,
acceptedCharCount: Int,
) {
val project = requestContext.project
val totalImportCount = recommendationContext.details.fold(0) { grandTotal, detail ->
grandTotal + detail.recommendation.mostRelevantMissingImports().size
}
val automatedTriggerType = requestContext.triggerTypeInfo.automatedTriggerType
val triggerChar = if (automatedTriggerType is CodeWhispererAutomatedTriggerType.SpecialChar) {
automatedTriggerType.specialChar.toString()
} else {
null
}
val language = requestContext.fileContextInfo.programmingLanguage
val classifierResult = requestContext.triggerTypeInfo.automatedTriggerType.calculationResult
val classifierThreshold = CodeWhispererAutoTriggerService.getThreshold()
val supplementalContext = requestContext.supplementalContext
val completionType = if (recommendationContext.details.isEmpty()) CodewhispererCompletionType.Line else recommendationContext.details[0].completionType
// only send if it's a pro tier user
projectCoroutineScope(project).launch {
runIfIdcConnectionOrTelemetryEnabled(project) {
try {
val response = CodeWhispererClientAdaptor.getInstance(project)
.sendUserTriggerDecisionTelemetry(
requestContext,
responseContext,
completionType,
suggestionState,
suggestionReferenceCount,
generatedLineCount,
recommendationContext.details.size,
acceptedCharCount
)
LOG.debug {
"Successfully sent user trigger decision telemetry. RequestId: ${response.responseMetadata().requestId()}"
}
} catch (e: Exception) {
val requestId = if (e is CodeWhispererRuntimeException) e.requestId() else null
LOG.debug {
"Failed to send user trigger decision telemetry. RequestId: $requestId, ErrorMessage: ${e.message}"
}
}
}
}
CodewhispererTelemetry.userTriggerDecision(
project = project,
codewhispererSessionId = responseContext.sessionId,
codewhispererFirstRequestId = requestContext.latencyContext.firstRequestId,
credentialStartUrl = getConnectionStartUrl(requestContext.connection),
codewhispererIsPartialAcceptance = null,
codewhispererPartialAcceptanceCount = null,
codewhispererCharactersAccepted = acceptedCharCount.toLong(),
codewhispererCharactersRecommended = null,
codewhispererCompletionType = completionType,
codewhispererLanguage = language.toTelemetryType(),
codewhispererTriggerType = requestContext.triggerTypeInfo.triggerType,
codewhispererAutomatedTriggerType = automatedTriggerType.telemetryType,
codewhispererLineNumber = requestContext.caretPosition.line.toLong(),
codewhispererCursorOffset = requestContext.caretPosition.offset.toLong(),
codewhispererSuggestionCount = recommendationContext.details.size.toLong(),
codewhispererSuggestionImportCount = totalImportCount.toLong(),
codewhispererTotalShownTime = popupShownTime?.toMillis()?.toDouble(),
codewhispererTriggerCharacter = triggerChar,
codewhispererTypeaheadLength = recommendationContext.userInputSinceInvocation.length.toLong(),
codewhispererTimeSinceLastDocumentChange = CodeWhispererInvocationStatus.getInstance().getTimeSinceDocumentChanged(),
codewhispererTimeSinceLastUserDecision = codewhispererTimeSinceLastUserDecision,
codewhispererTimeToFirstRecommendation = requestContext.latencyContext.paginationFirstCompletionTime,
codewhispererPreviousSuggestionState = previousUserTriggerDecision,
codewhispererSuggestionState = suggestionState,
codewhispererClassifierResult = classifierResult,
codewhispererClassifierThreshold = classifierThreshold,
codewhispererCustomizationArn = requestContext.customizationArn,
codewhispererSupplementalContextIsUtg = supplementalContext?.isUtg,
codewhispererSupplementalContextLength = supplementalContext?.contentLength?.toLong(),
codewhispererSupplementalContextTimeout = supplementalContext?.isProcessTimeout,
codewhispererSupplementalContextStrategyId = supplementalContext?.strategy.toString(),
codewhispererGettingStartedTask = getGettingStartedTaskType(requestContext.editor),
codewhispererFeatureEvaluations = CodeWhispererFeatureConfigService.getInstance().getFeatureConfigsTelemetry()
)
}