Skip to content

Commit f3d0f9b

Browse files
authored
telemetry(amazonq): cwsprChatProgrammingLanguage on insertAtCursor, CopyAtClipboard #5768
## Problem - Client side telemetry event `interactWithMessage` is missing `cwsprChatProgrammingLanguage` parameter which helps to understand the language of generated code. ## Solution - Added `cwsprChatProgrammingLanguage` parameter for insertAtCursor and CopyAtClipboard events. - No Test cases were added in this PR. - Added `extractCodeBlockLanguage` function as current UTG Sync API sends python and java in the first chunk of generated code but thats the not case for other languages. To counter this, I am checking entire response for generated code language and emitting those metrics. - Added `cwsprChatProgrammingLanguage` in [commons](https://github.com/aws/aws-toolkit-common) package: aws/aws-toolkit-common#883 - Added `cwsprChatHasProjectContext and cwsprChatTotalCodeBlocks` in in [commons](https://github.com/aws/aws-toolkit-common) package: aws/aws-toolkit-common#884
1 parent ebcb987 commit f3d0f9b

File tree

13 files changed

+110
-74
lines changed

13 files changed

+110
-74
lines changed

package-lock.json

Lines changed: 6 additions & 5 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
@@ -39,7 +39,7 @@
3939
"generateNonCodeFiles": "npm run generateNonCodeFiles -w packages/ --if-present"
4040
},
4141
"devDependencies": {
42-
"@aws-toolkits/telemetry": "^1.0.267",
42+
"@aws-toolkits/telemetry": "^1.0.272",
4343
"@playwright/browser-chromium": "^1.43.1",
4444
"@types/vscode": "^1.68.0",
4545
"@types/vscode-webview": "^1.57.1",

packages/core/src/amazonq/webview/ui/apps/cwChatConnector.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ export class Connector {
111111
eventId?: string,
112112
codeBlockIndex?: number,
113113
totalCodeBlocks?: number,
114-
userIntent?: string
114+
userIntent?: string,
115+
codeBlockLanguage?: string
115116
): void => {
116117
this.sendMessageToExtension({
117118
tabID: tabID,
@@ -125,6 +126,7 @@ export class Connector {
125126
codeBlockIndex,
126127
totalCodeBlocks,
127128
userIntent,
129+
codeBlockLanguage,
128130
})
129131
}
130132

@@ -137,7 +139,8 @@ export class Connector {
137139
eventId?: string,
138140
codeBlockIndex?: number,
139141
totalCodeBlocks?: number,
140-
userIntent?: string
142+
userIntent?: string,
143+
codeBlockLanguage?: string
141144
): void => {
142145
this.sendMessageToExtension({
143146
tabID: tabID,
@@ -151,6 +154,7 @@ export class Connector {
151154
codeBlockIndex,
152155
totalCodeBlocks,
153156
userIntent,
157+
codeBlockLanguage,
154158
})
155159
}
156160

@@ -295,6 +299,7 @@ export class Connector {
295299
canBeVoted: true,
296300
codeReference: messageData.codeReference,
297301
userIntent: messageData.userIntent,
302+
codeBlockLanguage: messageData.codeBlockLanguage,
298303
}
299304

300305
// If it is not there we will not set it
@@ -328,6 +333,7 @@ export class Connector {
328333
messageId: messageData.messageID,
329334
codeReference: messageData.codeReference,
330335
userIntent: messageData.userIntent,
336+
codeBlockLanguage: messageData.codeBlockLanguage,
331337
followUp:
332338
messageData.followUps !== undefined && messageData.followUps.length > 0
333339
? {

packages/core/src/amazonq/webview/ui/connector.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export interface ChatPayload {
5151
export interface CWCChatItem extends ChatItem {
5252
traceId?: string
5353
userIntent?: UserIntent
54+
codeBlockLanguage?: string
5455
}
5556

5657
export interface ConnectorProps {
@@ -242,7 +243,8 @@ export class Connector {
242243
eventId?: string,
243244
codeBlockIndex?: number,
244245
totalCodeBlocks?: number,
245-
userIntent?: string
246+
userIntent?: string,
247+
codeBlockLanguage?: string
246248
): void => {
247249
switch (this.tabsStorage.getTab(tabID)?.type) {
248250
case 'cwc':
@@ -255,7 +257,8 @@ export class Connector {
255257
eventId,
256258
codeBlockIndex,
257259
totalCodeBlocks,
258-
userIntent
260+
userIntent,
261+
codeBlockLanguage
259262
)
260263
break
261264
case 'featuredev':
@@ -331,7 +334,8 @@ export class Connector {
331334
eventId?: string,
332335
codeBlockIndex?: number,
333336
totalCodeBlocks?: number,
334-
userIntent?: string
337+
userIntent?: string,
338+
codeBlockLanguage?: string
335339
): void => {
336340
switch (this.tabsStorage.getTab(tabID)?.type) {
337341
case 'cwc':
@@ -344,7 +348,8 @@ export class Connector {
344348
eventId,
345349
codeBlockIndex,
346350
totalCodeBlocks,
347-
userIntent
351+
userIntent,
352+
codeBlockLanguage
348353
)
349354
break
350355
case 'featuredev':

packages/core/src/amazonq/webview/ui/main.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export const createMynahUI = (
3838
// eslint-disable-next-line prefer-const
3939
let connector: Connector
4040
//Store the mapping between messageId and messageUserIntent for amazonq_interactWithMessage telemetry
41-
const messageUserIntentMap = new Map<string, string>()
41+
const responseMetadata = new Map<string, string[]>()
4242

4343
window.addEventListener('error', (e) => {
4444
const { error, message } = e
@@ -252,8 +252,12 @@ export const createMynahUI = (
252252
? { type: ChatItemType.CODE_RESULT, fileList: item.fileList }
253253
: {}),
254254
})
255-
if (item.messageId !== undefined && item.userIntent !== undefined) {
256-
messageUserIntentMap.set(item.messageId, item.userIntent)
255+
if (
256+
item.messageId !== undefined &&
257+
item.userIntent !== undefined &&
258+
item.codeBlockLanguage !== undefined
259+
) {
260+
responseMetadata.set(item.messageId, [item.userIntent, item.codeBlockLanguage])
257261
}
258262
ideApi.postMessage({
259263
command: 'update-chat-message-telemetry',
@@ -515,7 +519,8 @@ export const createMynahUI = (
515519
eventId,
516520
codeBlockIndex,
517521
totalCodeBlocks,
518-
messageUserIntentMap.get(messageId) ?? undefined
522+
responseMetadata.get(messageId)?.[0] ?? undefined,
523+
responseMetadata.get(messageId)?.[1] ?? undefined
519524
)
520525
},
521526
onCodeBlockActionClicked: (
@@ -582,7 +587,8 @@ export const createMynahUI = (
582587
eventId,
583588
codeBlockIndex,
584589
totalCodeBlocks,
585-
messageUserIntentMap.get(messageId) ?? undefined
590+
responseMetadata.get(messageId)?.[0] ?? undefined,
591+
responseMetadata.get(messageId)?.[1] ?? undefined
586592
)
587593
mynahUI.notify({
588594
type: NotificationType.SUCCESS,

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { CodeScanIssue } from '../../../../codewhisperer/models/model'
3333
import { marked } from 'marked'
3434
import { JSDOM } from 'jsdom'
3535
import { LspController } from '../../../../amazonq/lsp/lspController'
36+
import { extractCodeBlockLanguage } from '../../../../shared/markdown'
3637

3738
export type StaticTextResponseType = 'quick-action-help' | 'onboarding-help' | 'transform' | 'help'
3839

@@ -87,6 +88,7 @@ export class Messenger {
8788
triggerID,
8889
messageID: '',
8990
userIntent: undefined,
91+
codeBlockLanguage: undefined,
9092
},
9193
tabID
9294
)
@@ -131,6 +133,7 @@ export class Messenger {
131133
let codeReference: CodeReference[] = []
132134
let followUps: FollowUp[] = []
133135
let relatedSuggestions: Suggestion[] = []
136+
let codeBlockLanguage: string = 'plaintext'
134137

135138
if (response.generateAssistantResponseResponse === undefined) {
136139
throw new ToolkitError(
@@ -182,7 +185,9 @@ export class Messenger {
182185
chatEvent.assistantResponseEvent.content.length > 0
183186
) {
184187
message += chatEvent.assistantResponseEvent.content
185-
188+
if (codeBlockLanguage === 'plaintext') {
189+
codeBlockLanguage = extractCodeBlockLanguage(message)
190+
}
186191
this.dispatcher.sendChatMessage(
187192
new ChatMessage(
188193
{
@@ -195,6 +200,7 @@ export class Messenger {
195200
triggerID,
196201
messageID,
197202
userIntent: triggerPayload.userIntent,
203+
codeBlockLanguage: codeBlockLanguage,
198204
},
199205
tabID
200206
)
@@ -272,6 +278,7 @@ export class Messenger {
272278
triggerID,
273279
messageID,
274280
userIntent: triggerPayload.userIntent,
281+
codeBlockLanguage: codeBlockLanguage,
275282
},
276283
tabID
277284
)
@@ -290,6 +297,7 @@ export class Messenger {
290297
triggerID,
291298
messageID,
292299
userIntent: triggerPayload.userIntent,
300+
codeBlockLanguage: undefined,
293301
},
294302
tabID
295303
)
@@ -307,6 +315,7 @@ export class Messenger {
307315
triggerID,
308316
messageID,
309317
userIntent: triggerPayload.userIntent,
318+
codeBlockLanguage: undefined,
310319
},
311320
tabID
312321
)
@@ -431,6 +440,7 @@ export class Messenger {
431440
triggerID,
432441
messageID: 'static_message_' + triggerID,
433442
userIntent: undefined,
443+
codeBlockLanguage: undefined,
434444
},
435445
tabID
436446
)

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export interface InsertCodeAtCursorPosition {
4646
eventId: string
4747
codeBlockIndex: number
4848
totalCodeBlocks: number
49+
codeBlockLanguage: string
4950
}
5051

5152
export interface CopyCodeToClipboard {
@@ -59,6 +60,7 @@ export interface CopyCodeToClipboard {
5960
eventId: string
6061
codeBlockIndex: number
6162
totalCodeBlocks: number
63+
codeBlockLanguage: string
6264
}
6365

6466
export interface AcceptDiff {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ export class CWCTelemetryHelper {
203203
cwsprChatCodeBlockIndex: message.codeBlockIndex,
204204
cwsprChatTotalCodeBlocks: message.totalCodeBlocks,
205205
cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId),
206+
cwsprChatProgrammingLanguage: message.codeBlockLanguage,
206207
}
207208
break
208209
case 'code_was_copied_to_clipboard':
@@ -220,6 +221,7 @@ export class CWCTelemetryHelper {
220221
cwsprChatCodeBlockIndex: message.codeBlockIndex,
221222
cwsprChatTotalCodeBlocks: message.totalCodeBlocks,
222223
cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId),
224+
cwsprChatProgrammingLanguage: message.codeBlockLanguage,
223225
}
224226
break
225227
case 'accept_diff':

packages/core/src/codewhispererChat/view/connector/connector.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ export interface ChatMessageProps {
142142
readonly triggerID: string
143143
readonly messageID: string
144144
readonly userIntent: string | undefined
145+
readonly codeBlockLanguage: string | undefined
145146
}
146147

147148
export class ChatMessage extends UiMessage {
@@ -155,6 +156,7 @@ export class ChatMessage extends UiMessage {
155156
readonly triggerID: string
156157
readonly messageID: string | undefined
157158
readonly userIntent: string | undefined
159+
readonly codeBlockLanguage: string | undefined
158160
override type = 'chatMessage'
159161

160162
constructor(props: ChatMessageProps, tabID: string) {
@@ -168,6 +170,7 @@ export class ChatMessage extends UiMessage {
168170
this.triggerID = props.triggerID
169171
this.messageID = props.messageID
170172
this.userIntent = props.userIntent
173+
this.codeBlockLanguage = props.codeBlockLanguage
171174
}
172175
}
173176

packages/core/src/codewhispererChat/view/messages/messageListener.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ export class UIMessageListener {
165165
eventId: msg.eventId,
166166
codeBlockIndex: msg.codeBlockIndex,
167167
totalCodeBlocks: msg.totalCodeBlocks,
168+
codeBlockLanguage: msg.codeBlockLanguage,
168169
})
169170
}
170171

@@ -196,6 +197,7 @@ export class UIMessageListener {
196197
eventId: msg.eventId,
197198
codeBlockIndex: msg.codeBlockIndex,
198199
totalCodeBlocks: msg.totalCodeBlocks,
200+
codeBlockLanguage: msg.codeBlockLanguage,
199201
})
200202
}
201203

0 commit comments

Comments
 (0)