Skip to content

Commit 44d8407

Browse files
committed
telemetry(amazonq): add to amazonq_interactwithmessage
1 parent 93d3f90 commit 44d8407

File tree

6 files changed

+45
-25
lines changed

6 files changed

+45
-25
lines changed

package-lock.json

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"skippedTestReport": "ts-node ./scripts/skippedTestReport.ts ./packages/amazonq/test/e2e/"
4242
},
4343
"devDependencies": {
44-
"@aws-toolkits/telemetry": "^1.0.296",
44+
"@aws-toolkits/telemetry": "^1.0.301",
4545
"@playwright/browser-chromium": "^1.43.1",
4646
"@stylistic/eslint-plugin": "^2.11.0",
4747
"@types/he": "^1.2.3",

packages/core/src/codewhispererChat/controllers/chat/controller.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,6 @@ export class ChatController {
581581
}
582582
private async processFileClickMessage(message: FileClick) {
583583
const session = this.sessionStorage.getSession(message.tabID)
584-
// TODO remove currentContextId but use messageID to track context for each answer message
585584
const lineRanges = session.contexts.get(session.currentContextId)?.get(message.filePath)
586585

587586
if (!lineRanges) {
@@ -889,7 +888,6 @@ export class ChatController {
889888
const workspaceFolderPath = vscode.workspace.getWorkspaceFolder(rule)?.uri?.path || ''
890889
return {
891890
workspaceFolder: workspaceFolderPath,
892-
// todo: add 'prompt' type to LSP model
893891
type: 'file' as ContextCommandItemType,
894892
relativePath: path.relative(workspaceFolderPath, rule.path),
895893
}
@@ -901,7 +899,6 @@ export class ChatController {
901899
// Add context commands added by user to context
902900
if (triggerPayload.context !== undefined && triggerPayload.context.length > 0) {
903901
for (const context of triggerPayload.context) {
904-
// todo: add handling of 'prompt' type (dependent on LSP changes)
905902
if (typeof context !== 'string' && context.route && context.route.length === 2) {
906903
contextCommands.push({
907904
workspaceFolder: context.route[0] || '',
@@ -915,8 +912,13 @@ export class ChatController {
915912
return []
916913
}
917914
const workspaceFolder = contextCommands[0].workspaceFolder
918-
const prompts = await LspClient.instance.getContextCommandPrompt(contextCommands)
919-
if (prompts.length === 0) {
915+
let prompts = []
916+
try {
917+
prompts = await LspClient.instance.getContextCommandPrompt(contextCommands)
918+
} catch {
919+
return []
920+
}
921+
if (!Array.isArray(prompts) || prompts.length === 0) {
920922
return []
921923
}
922924

@@ -929,7 +931,6 @@ export class ChatController {
929931
ruleContextLength: 0,
930932
}
931933
for (const prompt of prompts.slice(0, 20)) {
932-
// Todo: add mechanism for sorting/prioritization of additional context
933934
const entry = {
934935
name: prompt.name.substring(0, aditionalContentNameLimit),
935936
description: prompt.description.substring(0, aditionalContentNameLimit),

packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,24 @@ export class Messenger {
136136
)
137137
}
138138
this.telemetryHelper.setResponseStreamStartTime(tabID)
139+
140+
let cwsprChatHasProjectContext
139141
if (
140142
triggerPayload.relevantTextDocuments &&
141143
triggerPayload.relevantTextDocuments.length > 0 &&
142144
triggerPayload.useRelevantDocuments === true
143145
) {
144-
this.telemetryHelper.setResponseFromProjectContext(messageID)
146+
cwsprChatHasProjectContext = true
145147
}
148+
const additionalCounts = this.telemetryHelper.getAdditionalContextCounts(triggerPayload)
149+
150+
this.telemetryHelper.setResponseFromAdditionalContext(messageID, {
151+
cwsprChatHasProjectContext,
152+
cwsprChatRuleContextCount: triggerPayload.workspaceRulesCount,
153+
cwsprChatFileContextCount: additionalCounts.fileContextCount,
154+
cwsprChatFolderContextCount: additionalCounts.folderContextCount,
155+
cwsprChatPromptContextCount: additionalCounts.promptContextCount,
156+
})
146157

147158
const eventCounts = new Map<string, number>()
148159
waitUntil(

packages/core/src/codewhispererChat/controllers/chat/model.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,14 @@ export type AdditionalContextLengths = {
205205
ruleContextLength: number
206206
}
207207

208+
export type AdditionalContextInfo = {
209+
cwsprChatFileContextCount?: number
210+
cwsprChatFolderContextCount?: number
211+
cwsprChatPromptContextCount?: number
212+
cwsprChatRuleContextCount?: number
213+
cwsprChatHasProjectContext?: boolean
214+
}
215+
208216
// TODO move this to API definition (or just use this across the codebase)
209217
export type RelevantTextDocumentAddition = RelevantTextDocument & { startLine: number; endLine: number }
210218

packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {
2828
SourceLinkClickMessage,
2929
TriggerPayload,
3030
AdditionalContextLengths,
31+
AdditionalContextInfo,
3132
} from './model'
3233
import { TriggerEvent, TriggerEventsStorage } from '../../storages/triggerEvents'
3334
import globals from '../../../shared/extensionGlobals'
@@ -71,7 +72,7 @@ export class CWCTelemetryHelper {
7172
private conversationStreamStartTime: Map<string, number> = new Map()
7273
private conversationStreamTotalTime: Map<string, number> = new Map()
7374
private responseStreamTimeForChunks: Map<string, number[]> = new Map()
74-
private responseWithProjectContext: Map<string, boolean> = new Map()
75+
private responseWithContextInfo: Map<string, AdditionalContextInfo> = new Map()
7576

7677
// Keeps track of when chunks of data were displayed in a tab
7778
private displayTimeForChunks: Map<string, number[]> = new Map()
@@ -224,6 +225,11 @@ export class CWCTelemetryHelper {
224225
) {
225226
const conversationId = this.getConversationId(message.tabID)
226227
let event: AmazonqInteractWithMessage | undefined
228+
let additionalContextInfo = undefined
229+
const messageId = (message as any).messageId
230+
if (messageId) {
231+
additionalContextInfo = this.responseWithContextInfo.get(messageId)
232+
}
227233
switch (message.command) {
228234
case 'insert_code_at_cursor_position':
229235
message = message as InsertCodeAtCursorPosition
@@ -240,7 +246,6 @@ export class CWCTelemetryHelper {
240246
cwsprChatHasReference: message.codeReference && message.codeReference.length > 0,
241247
cwsprChatCodeBlockIndex: message.codeBlockIndex,
242248
cwsprChatTotalCodeBlocks: message.totalCodeBlocks,
243-
cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId),
244249
cwsprChatProgrammingLanguage: message.codeBlockLanguage,
245250
}
246251
break
@@ -258,7 +263,6 @@ export class CWCTelemetryHelper {
258263
cwsprChatHasReference: message.codeReference && message.codeReference.length > 0,
259264
cwsprChatCodeBlockIndex: message.codeBlockIndex,
260265
cwsprChatTotalCodeBlocks: message.totalCodeBlocks,
261-
cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId),
262266
cwsprChatProgrammingLanguage: message.codeBlockLanguage,
263267
}
264268
break
@@ -275,7 +279,6 @@ export class CWCTelemetryHelper {
275279
message.referenceTrackerInformation && message.referenceTrackerInformation.length > 0,
276280
cwsprChatCodeBlockIndex: message.codeBlockIndex,
277281
cwsprChatTotalCodeBlocks: message.totalCodeBlocks,
278-
cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId),
279282
}
280283
break
281284
case 'view_diff':
@@ -291,7 +294,6 @@ export class CWCTelemetryHelper {
291294
message.referenceTrackerInformation && message.referenceTrackerInformation.length > 0,
292295
cwsprChatCodeBlockIndex: message.codeBlockIndex,
293296
cwsprChatTotalCodeBlocks: message.totalCodeBlocks,
294-
cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId),
295297
}
296298
break
297299
case 'follow-up-was-clicked':
@@ -302,7 +304,6 @@ export class CWCTelemetryHelper {
302304
credentialStartUrl: AuthUtil.instance.startUrl,
303305
cwsprChatMessageId: message.messageId,
304306
cwsprChatInteractionType: 'clickFollowUp',
305-
cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId),
306307
}
307308
break
308309
case 'chat-item-voted':
@@ -313,7 +314,6 @@ export class CWCTelemetryHelper {
313314
cwsprChatConversationId: conversationId ?? '',
314315
credentialStartUrl: AuthUtil.instance.startUrl,
315316
cwsprChatInteractionType: message.vote,
316-
cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId),
317317
}
318318
break
319319
case 'source-link-click':
@@ -325,7 +325,6 @@ export class CWCTelemetryHelper {
325325
credentialStartUrl: AuthUtil.instance.startUrl,
326326
cwsprChatInteractionType: 'clickLink',
327327
cwsprChatInteractionTarget: message.link,
328-
cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId),
329328
}
330329
break
331330
case 'response-body-link-click':
@@ -337,7 +336,6 @@ export class CWCTelemetryHelper {
337336
credentialStartUrl: AuthUtil.instance.startUrl,
338337
cwsprChatInteractionType: 'clickBodyLink',
339338
cwsprChatInteractionTarget: message.link,
340-
cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId),
341339
}
342340
break
343341
case 'footer-info-link-click':
@@ -356,7 +354,7 @@ export class CWCTelemetryHelper {
356354
if (!event) {
357355
return
358356
}
359-
telemetry.amazonq_interactWithMessage.emit(event)
357+
telemetry.amazonq_interactWithMessage.emit({ ...event, ...additionalContextInfo })
360358

361359
codeWhispererClient
362360
.sendTelemetryEvent({
@@ -369,7 +367,8 @@ export class CWCTelemetryHelper {
369367
acceptedCharacterCount: event.cwsprChatAcceptedCharactersLength,
370368
acceptedLineCount: event.cwsprChatAcceptedNumberOfLines,
371369
acceptedSnippetHasReference: false,
372-
hasProjectLevelContext: this.responseWithProjectContext.get(event.cwsprChatMessageId),
370+
hasProjectLevelContext: this.responseWithContextInfo.get(event.cwsprChatMessageId)
371+
?.cwsprChatHasProjectContext,
373372
customizationArn: undefinedIfEmpty(getSelectedCustomization().arn),
374373
},
375374
},
@@ -456,7 +455,7 @@ export class CWCTelemetryHelper {
456455
})
457456
}
458457

459-
private getAdditionalContextCounts(triggerPayload: TriggerPayload) {
458+
public getAdditionalContextCounts(triggerPayload: TriggerPayload) {
460459
const counts = {
461460
fileContextCount: 0,
462461
folderContextCount: 0,
@@ -631,8 +630,8 @@ export class CWCTelemetryHelper {
631630
this.displayTimeForChunks.set(tabID, [...chunkTimes, time])
632631
}
633632

634-
public setResponseFromProjectContext(messageId: string) {
635-
this.responseWithProjectContext.set(messageId, true)
633+
public setResponseFromAdditionalContext(messageId: string, additionalContextInfo: AdditionalContextInfo) {
634+
this.responseWithContextInfo.set(messageId, additionalContextInfo)
636635
}
637636

638637
public setConversationStreamStartTime(tabID: string) {

0 commit comments

Comments
 (0)