Skip to content

Commit

Permalink
add feedback functionality with thumbs up/down
Browse files Browse the repository at this point in the history
h
  • Loading branch information
chungjac committed Feb 11, 2025
1 parent 5213237 commit 505ad34
Show file tree
Hide file tree
Showing 11 changed files with 95 additions and 7 deletions.
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
"mergeReports": "ts-node ./scripts/mergeReports.ts"
},
"devDependencies": {
"@aws-toolkits/telemetry": "^1.0.295",
"@aws-toolkits/telemetry": "^1.0.296",
"@playwright/browser-chromium": "^1.43.1",
"@stylistic/eslint-plugin": "^2.11.0",
"@types/he": "^1.2.3",
Expand Down
1 change: 1 addition & 0 deletions packages/amazonq/src/app/amazonqScan/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export function init(appContext: AmazonQAppInitContext) {
processResponseBodyLinkClick: new vscode.EventEmitter<any>(),
fileClicked: new vscode.EventEmitter<any>(),
scanCancelled: new vscode.EventEmitter<any>(),
processChatItemVotedMessage: new vscode.EventEmitter<any>(),
}
const dispatcher = new AppToWebViewMessageDispatcher(appContext.getAppsToWebViewMessagePublisher())
const messenger = new Messenger(dispatcher)
Expand Down
10 changes: 10 additions & 0 deletions packages/amazonq/src/app/amazonqScan/chat/controller/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import {
scanSummaryMessage,
} from '../../models/constants'
import path from 'path'
import { telemetry } from 'aws-core-vscode/telemetry'

export class ScanController {
private readonly messenger: Messenger
Expand Down Expand Up @@ -98,6 +99,15 @@ export class ScanController {
this.chatControllerMessageListeners.scanCancelled.event((data) => {
return this.handleScanCancelled(data)
})

this.chatControllerMessageListeners.processChatItemVotedMessage.event((data) => {
telemetry.amazonq_feedback.emit({
featureId: 'amazonQReview',
amazonqConversationId: this.sessionStorage.getSession().scanUuid,
credentialStartUrl: AuthUtil.instance.startUrl,
interactionType: data.vote,
})
})
}

private async tabOpened(message: any) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ export class UIMessageListener {
case 'file-click':
this.processFileClick(msg)
break
case 'chat-item-voted':
this.chatItemVoted(msg)
break
}
}

Expand Down Expand Up @@ -112,4 +115,13 @@ export class UIMessageListener {
filePath: msg.filePath,
})
}

private chatItemVoted(msg: any) {
this.scanControllerEventsEmitters?.processChatItemVotedMessage.fire({
tabID: msg.tabID,
command: msg.command,
vote: msg.vote,
messageId: msg.messageId,
})
}
}
3 changes: 3 additions & 0 deletions packages/core/src/amazonq/webview/ui/connector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -602,6 +602,9 @@ export class Connector {
case 'featuredev':
this.featureDevChatConnector.sendFeedback(tabId, feedbackPayload)
break
case 'testgen':
this.testChatConnector.onSendFeedback(tabId, feedbackPayload)
break
case 'cwc':
this.cwChatConnector.onSendFeedback(tabId, feedbackPayload)
break
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/amazonqScan/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@ export interface ScanChatControllerEventEmitters {
readonly processResponseBodyLinkClick: vscode.EventEmitter<any>
readonly fileClicked: vscode.EventEmitter<any>
readonly scanCancelled: vscode.EventEmitter<any>
readonly processChatItemVotedMessage: vscode.EventEmitter<any>
}
2 changes: 2 additions & 0 deletions packages/core/src/amazonqTest/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ export function init(appContext: AmazonQAppInitContext) {
errorThrown: new vscode.EventEmitter<any>(),
insertCodeAtCursorPosition: new vscode.EventEmitter<any>(),
processResponseBodyLinkClick: new vscode.EventEmitter<any>(),
processChatItemVotedMessage: new vscode.EventEmitter<any>(),
processChatItemFeedbackMessage: new vscode.EventEmitter<any>(),
}
const dispatcher = new AppToWebViewMessageDispatcher(appContext.getAppsToWebViewMessagePublisher())
const messenger = new Messenger(dispatcher)
Expand Down
42 changes: 41 additions & 1 deletion packages/core/src/amazonqTest/chat/controller/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,15 @@ import {
import { UserIntent } from '@amzn/codewhisperer-streaming'
import { getSelectedCustomization } from '../../../codewhisperer/util/customizationUtil'
import { createCodeWhispererChatStreamingClient } from '../../../shared/clients/codewhispererChatClient'
import { ChatTriggerType } from '../../../codewhispererChat/controllers/chat/model'
import { ChatItemVotedMessage, ChatTriggerType } from '../../../codewhispererChat/controllers/chat/model'
import { triggerPayloadToChatRequest } from '../../../codewhispererChat/controllers/chat/chatRequest/converter'
import { EditorContentController } from '../../../amazonq/commons/controllers/contentController'
import { amazonQTabSuffix } from '../../../shared/constants'
import { applyChanges } from '../../../shared/utilities/textDocumentUtilities'
import { telemetry } from '../../../shared/telemetry/telemetry'
import { CodeReference } from '../../../amazonq'
import { CodeWhispererSettings } from '../../../codewhisperer/util/codewhispererSettings'
import globals from '../../../shared/extensionGlobals'

export interface TestChatControllerEventEmitters {
readonly tabOpened: vscode.EventEmitter<any>
Expand All @@ -82,6 +83,8 @@ export interface TestChatControllerEventEmitters {
readonly errorThrown: vscode.EventEmitter<any>
readonly insertCodeAtCursorPosition: vscode.EventEmitter<any>
readonly processResponseBodyLinkClick: vscode.EventEmitter<any>
readonly processChatItemVotedMessage: vscode.EventEmitter<any>
readonly processChatItemFeedbackMessage: vscode.EventEmitter<any>
}

type OpenDiffMessage = {
Expand Down Expand Up @@ -160,6 +163,18 @@ export class TestController {
return this.processLink(data)
})

this.chatControllerMessageListeners.processChatItemVotedMessage.event((data) => {
this.processChatItemVotedMessage(data).catch((e) => {
getLogger().error('processChatItemVotedMessage failed: %s', (e as Error).message)
})
})

this.chatControllerMessageListeners.processChatItemFeedbackMessage.event((data) => {
this.processChatItemFeedbackMessage(data).catch((e) => {
getLogger().error('processChatItemFeedbackMessage failed: %s', (e as Error).message)
})
})

this.chatControllerMessageListeners.followUpClicked.event((data) => {
switch (data.followUp.type) {
case FollowUpTypes.ViewDiff:
Expand Down Expand Up @@ -209,6 +224,31 @@ export class TestController {
}
}

private async processChatItemVotedMessage(message: ChatItemVotedMessage) {
const session = this.sessionStorage.getSession()

telemetry.amazonq_feedback.emit({
featureId: 'amazonQTest',
amazonqConversationId: session.startTestGenerationRequestId,
credentialStartUrl: AuthUtil.instance.startUrl,
interactionType: message.vote,
})
}

private async processChatItemFeedbackMessage(message: any) {
const session = this.sessionStorage.getSession()

await globals.telemetry.postFeedback({
comment: `${JSON.stringify({
type: 'testgen-chat-answer-feedback',
amazonqConversationId: session.startTestGenerationRequestId,
reason: message?.selectedOption,
userComment: message?.comment,
})}`,
sentiment: 'Negative',
})
}

private async tabClosed(data: any) {
getLogger().debug('Tab closed with data tab id: %s', data.tabID)
await this.sessionCleanUp()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@ export class UIMessageListener {
case 'response-body-link-click':
this.processResponseBodyLinkClick(msg)
break
case 'chat-item-voted':
this.chatItemVoted(msg)
break
case 'chat-item-feedback':
this.chatItemFeedback(msg)
break
}
}

Expand Down Expand Up @@ -140,4 +146,17 @@ export class UIMessageListener {
link: msg.link,
})
}

private chatItemVoted(msg: any) {
this.testControllerEventsEmitters?.processChatItemVotedMessage.fire({
tabID: msg.tabID,
command: msg.command,
vote: msg.vote,
messageId: msg.messageId,
})
}

private chatItemFeedback(msg: any) {
this.testControllerEventsEmitters?.processChatItemFeedbackMessage.fire(msg)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export async function startTestGenerationProcess(
return
}
/**
* Zip the project
* Step 1: Zip the project
*/

const zipUtil = new ZipUtil()
Expand Down

0 comments on commit 505ad34

Please sign in to comment.