Skip to content

Commit fecba69

Browse files
committed
telemetry(amazonq chat): numberOfCodeBlocks
1 parent a09777b commit fecba69

File tree

4 files changed

+19
-5
lines changed

4 files changed

+19
-5
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/messenger/ChatPromptHandler.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,15 @@ class ChatPromptHandler(private val telemetryHelper: TelemetryHelper) {
3232
private var requestId: String = ""
3333
private var statusCode: Int = 0
3434

35+
private fun countTotalNumberOfCodeBlocks(message: StringBuilder): Int {
36+
if (message.isEmpty()) {
37+
return 0
38+
}
39+
val countOfCodeBlocks = Regex("^```", RegexOption.MULTILINE).findAll(message)
40+
val numberOfTripleBackTicksInMarkdown = countOfCodeBlocks.count()
41+
return numberOfTripleBackTicksInMarkdown / 2
42+
}
43+
3544
fun handle(
3645
tabId: String,
3746
triggerId: String,
@@ -75,7 +84,7 @@ class ChatPromptHandler(private val telemetryHelper: TelemetryHelper) {
7584
ChatMessage(tabId = tabId, triggerId = triggerId, messageId = requestId, messageType = ChatMessageType.Answer, followUps = followUps)
7685

7786
telemetryHelper.setResponseStreamTotalTime(tabId)
78-
telemetryHelper.recordAddMessage(data, response, responseText.length, statusCode)
87+
telemetryHelper.recordAddMessage(data, response, responseText.length, statusCode, countTotalNumberOfCodeBlocks(responseText))
7988
emit(response)
8089
}
8190
.catch { exception ->

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
8383
}
8484

8585
// When Chat API responds to a user message (full response streamed)
86-
fun recordAddMessage(data: ChatRequestData, response: ChatMessage, responseLength: Int, statusCode: Int) {
86+
fun recordAddMessage(data: ChatRequestData, response: ChatMessage, responseLength: Int, statusCode: Int, numberOfCodeBlocks: Int) {
8787
AmazonqTelemetry.addMessage(
8888
cwsprChatConversationId = getConversationId(response.tabId).orEmpty(),
8989
cwsprChatMessageId = response.messageId,
@@ -96,7 +96,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
9696
cwsprChatResponseCodeSnippetCount = 0,
9797
cwsprChatResponseCode = statusCode,
9898
cwsprChatSourceLinkCount = response.relatedSuggestions?.size,
99-
cwsprChatReferencesCount = 0, // TODO
99+
cwsprChatReferencesCount = numberOfCodeBlocks,
100100
cwsprChatFollowUpCount = response.followUps?.size,
101101
cwsprChatTimeToFirstChunk = getResponseStreamTimeToFirstChunk(response.tabId).toInt(),
102102
cwsprChatTimeBetweenChunks = "[${getResponseStreamTimeBetweenChunks(response.tabId).joinToString(",")}]",
@@ -122,6 +122,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
122122
(responseStreamTotalTime[response.tabId] ?: 0).toDouble(),
123123
data.message.length,
124124
responseLength,
125+
numberOfCodeBlocks
125126
)
126127
}
127128

plugins/core/sdk-codegen/codegen-resources/codewhispererruntime/service-2.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,8 @@
370370
"timeBetweenChunks": { "shape": "TimeBetweenChunks" },
371371
"fullResponselatency": { "shape": "Double" },
372372
"requestLength": { "shape": "Integer" },
373-
"responseLength": { "shape": "Integer" }
373+
"responseLength": { "shape": "Integer" },
374+
"numberOfCodeBlocks": { "shape": "Integer" }
374375
}
375376
},
376377
"ChatHistory":{

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ interface CodeWhispererClientAdaptor : Disposable {
149149
fullResponselatency: Double?,
150150
requestLength: Int?,
151151
responseLength: Int?,
152+
numberOfCodeBlocks: Int?
152153
): SendTelemetryEventResponse
153154

154155
fun sendChatInteractWithMessageTelemetry(
@@ -447,7 +448,8 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW
447448
timeBetweenChunks: List<Double>?,
448449
fullResponselatency: Double?,
449450
requestLength: Int?,
450-
responseLength: Int?
451+
responseLength: Int?,
452+
numberOfCodeBlocks: Int?
451453
): SendTelemetryEventResponse = bearerClient().sendTelemetryEvent { requestBuilder ->
452454
requestBuilder.telemetryEvent { telemetryEventBuilder ->
453455
telemetryEventBuilder.chatAddMessageEvent {
@@ -462,6 +464,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW
462464
it.fullResponselatency(fullResponselatency)
463465
it.requestLength(requestLength)
464466
it.responseLength(responseLength)
467+
it.numberOfCodeBlocks(numberOfCodeBlocks)
465468
}
466469
}
467470
requestBuilder.optOutPreference(getTelemetryOptOutPreference())

0 commit comments

Comments
 (0)