|
2 | 2 | // SPDX-License-Identifier: Apache-2.0
|
3 | 3 |
|
4 | 4 | package software.aws.toolkits.jetbrains.services.amazonqCodeTest.controller
|
5 |
| - |
| 5 | +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper |
6 | 6 | import com.intellij.diff.DiffContentFactory
|
7 | 7 | import com.intellij.diff.DiffManager
|
8 | 8 | import com.intellij.diff.DiffManagerEx
|
@@ -44,8 +44,11 @@ import software.amazon.awssdk.services.codewhispererstreaming.model.TextDocument
|
44 | 44 | import software.amazon.awssdk.services.codewhispererstreaming.model.UserInputMessage
|
45 | 45 | import software.amazon.awssdk.services.codewhispererstreaming.model.UserInputMessageContext
|
46 | 46 | import software.amazon.awssdk.services.codewhispererstreaming.model.UserIntent
|
| 47 | +import software.amazon.awssdk.services.toolkittelemetry.model.Sentiment |
47 | 48 | import software.aws.toolkits.core.utils.debug
|
48 | 49 | import software.aws.toolkits.core.utils.getLogger
|
| 50 | +import software.aws.toolkits.core.utils.info |
| 51 | +import software.aws.toolkits.core.utils.warn |
49 | 52 | import software.aws.toolkits.jetbrains.core.AwsClientManager
|
50 | 53 | import software.aws.toolkits.jetbrains.core.coroutines.EDT
|
51 | 54 | import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
|
@@ -81,14 +84,19 @@ import software.aws.toolkits.jetbrains.services.cwc.clients.chat.model.TriggerTy
|
81 | 84 | import software.aws.toolkits.jetbrains.services.cwc.clients.chat.v1.ChatSessionV1.Companion.validLanguages
|
82 | 85 | import software.aws.toolkits.jetbrains.services.cwc.controller.chat.StaticPrompt
|
83 | 86 | import software.aws.toolkits.jetbrains.services.cwc.controller.chat.StaticTextResponse
|
| 87 | +import software.aws.toolkits.jetbrains.services.cwc.controller.chat.telemetry.FeedbackComment |
84 | 88 | import software.aws.toolkits.jetbrains.services.cwc.controller.chat.telemetry.getStartUrl
|
85 | 89 | import software.aws.toolkits.jetbrains.services.cwc.editor.context.ActiveFileContext
|
86 | 90 | import software.aws.toolkits.jetbrains.services.cwc.editor.context.ActiveFileContextExtractor
|
87 | 91 | import software.aws.toolkits.jetbrains.services.cwc.editor.context.ExtractionTriggerType
|
88 | 92 | import software.aws.toolkits.jetbrains.services.cwc.editor.context.file.FileContext
|
89 | 93 | import software.aws.toolkits.jetbrains.services.cwc.messages.ChatMessageType
|
| 94 | +import software.aws.toolkits.jetbrains.services.telemetry.TelemetryService |
| 95 | +import software.aws.toolkits.jetbrains.utils.notifyError |
90 | 96 | import software.aws.toolkits.resources.message
|
91 | 97 | import software.aws.toolkits.telemetry.AmazonqTelemetry
|
| 98 | +import software.aws.toolkits.telemetry.FeatureId |
| 99 | +import software.aws.toolkits.telemetry.InteractionType |
92 | 100 | import software.aws.toolkits.telemetry.MetricResult
|
93 | 101 | import software.aws.toolkits.telemetry.UiTelemetry
|
94 | 102 | import java.io.File
|
@@ -403,6 +411,57 @@ class CodeTestChatController(
|
403 | 411 | .build()
|
404 | 412 | }
|
405 | 413 |
|
| 414 | + override suspend fun processChatItemFeedBack(message: IncomingCodeTestMessage.ChatItemFeedback) { |
| 415 | + LOG.debug { "$FEATURE_NAME: Processing ChatItemFeedBackMessage: ${message.comment}" } |
| 416 | + |
| 417 | + val session = codeTestChatHelper.getActiveSession() |
| 418 | + |
| 419 | + val comment = FeedbackComment( |
| 420 | + conversationId = session.startTestGenerationRequestId, |
| 421 | + userComment = message.comment.orEmpty(), |
| 422 | + reason = message.selectedOption, |
| 423 | + type = "testgen-chat-answer-feedback", |
| 424 | + messageId = "", |
| 425 | + ) |
| 426 | + |
| 427 | + try { |
| 428 | + TelemetryService.getInstance().sendFeedback( |
| 429 | + sentiment = Sentiment.NEGATIVE, |
| 430 | + comment = objectMapper.writeValueAsString(comment), |
| 431 | + ) |
| 432 | + LOG.info { "$FEATURE_NAME answer feedback sent: \"Negative\"" } |
| 433 | + } catch (e: Throwable) { |
| 434 | + e.notifyError(message("feedback.submit_failed", e)) |
| 435 | + LOG.warn(e) { "Failed to submit feedback" } |
| 436 | + return |
| 437 | + } |
| 438 | + } |
| 439 | + |
| 440 | + override suspend fun processChatItemVoted(message: IncomingCodeTestMessage.ChatItemVoted) { |
| 441 | + LOG.debug { "$FEATURE_NAME: Processing ChatItemVotedMessage: $message" } |
| 442 | + |
| 443 | + val session = codeTestChatHelper.getActiveSession() |
| 444 | + when (message.vote) { |
| 445 | + "upvote" -> { |
| 446 | + AmazonqTelemetry.feedback( |
| 447 | + featureId = FeatureId.AmazonQTest, |
| 448 | + interactionType = InteractionType.Upvote, |
| 449 | + credentialStartUrl = getStartUrl(project = context.project), |
| 450 | + amazonqConversationId = session.startTestGenerationRequestId |
| 451 | + |
| 452 | + ) |
| 453 | + } |
| 454 | + "downvote" -> { |
| 455 | + AmazonqTelemetry.feedback( |
| 456 | + featureId = FeatureId.AmazonQTest, |
| 457 | + interactionType = InteractionType.Downvote, |
| 458 | + credentialStartUrl = getStartUrl(project = context.project), |
| 459 | + amazonqConversationId = session.startTestGenerationRequestId |
| 460 | + ) |
| 461 | + } |
| 462 | + } |
| 463 | + } |
| 464 | + |
406 | 465 | override suspend fun processNewTabCreatedMessage(message: IncomingCodeTestMessage.NewTabCreated) {
|
407 | 466 | newTabOpened(message.tabId)
|
408 | 467 | LOG.debug { "$FEATURE_NAME: New tab created: $message" }
|
@@ -1312,5 +1371,7 @@ class CodeTestChatController(
|
1312 | 1371 |
|
1313 | 1372 | companion object {
|
1314 | 1373 | private val LOG = getLogger<CodeTestChatController>()
|
| 1374 | + |
| 1375 | + private val objectMapper = jacksonObjectMapper() |
1315 | 1376 | }
|
1316 | 1377 | }
|
0 commit comments