@@ -43,6 +43,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
43
43
private val responseStreamStartTime: MutableMap <String , Instant > = mutableMapOf ()
44
44
private val responseStreamTotalTime: MutableMap <String , Int > = mutableMapOf ()
45
45
private val responseStreamTimeForChunks: MutableMap <String , MutableList <Instant >> = mutableMapOf ()
46
+ private val responseHasProjectContext: MutableMap <String , Boolean > = mutableMapOf ()
46
47
47
48
private val customization: CodeWhispererCustomization ?
48
49
get() = CodeWhispererModelConfigurator .getInstance().activeCustomization(context.project)
@@ -65,7 +66,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
65
66
TriggerType .ContextMenu , TriggerType .Hotkeys -> CwsprChatTriggerInteraction .ContextMenu
66
67
}
67
68
68
- private fun getIsProjectContextEnabled () = CodeWhispererSettings .getInstance().isProjectContextEnabled()
69
+ fun getIsProjectContextEnabled () = CodeWhispererSettings .getInstance().isProjectContextEnabled()
69
70
70
71
// When chat panel is focused
71
72
fun recordEnterFocusChat () {
@@ -116,7 +117,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
116
117
cwsprChatConversationType = CwsprChatConversationType .Chat ,
117
118
credentialStartUrl = getStartUrl(context.project),
118
119
codewhispererCustomizationArn = data.customization?.arn,
119
- cwsprChatHasProjectContext = getIsProjectContextEnabled() && data.useRelevantDocuments && data.relevantTextDocuments.isNotEmpty( )
120
+ cwsprChatHasProjectContext = getMessageHasProjectContext(response.messageId )
120
121
)
121
122
122
123
val programmingLanguage = data.activeFileContext.fileContext?.fileLanguage
@@ -135,7 +136,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
135
136
data.message.length,
136
137
responseLength,
137
138
numberOfCodeBlocks,
138
- getIsProjectContextEnabled() && data.useRelevantDocuments && data.relevantTextDocuments.isNotEmpty( ),
139
+ getMessageHasProjectContext(response.messageId ),
139
140
data.customization
140
141
).also {
141
142
logger.debug {
@@ -173,7 +174,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
173
174
else -> CwsprChatInteractionType .Unknown
174
175
},
175
176
credentialStartUrl = getStartUrl(context.project),
176
- cwsprChatHasProjectContext = getIsProjectContextEnabled( )
177
+ cwsprChatHasProjectContext = getMessageHasProjectContext(message.messageId )
177
178
)
178
179
ChatInteractWithMessageEvent .builder().apply {
179
180
conversationId(getConversationId(message.tabId).orEmpty())
@@ -185,6 +186,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
185
186
else -> ChatMessageInteractionType .UNKNOWN_TO_SDK_VERSION
186
187
}
187
188
)
189
+ hasProjectLevelContext(getMessageHasProjectContext(message.messageId))
188
190
}.build()
189
191
}
190
192
@@ -194,12 +196,13 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
194
196
cwsprChatMessageId = message.messageId.orEmpty(),
195
197
cwsprChatInteractionType = CwsprChatInteractionType .ClickFollowUp ,
196
198
credentialStartUrl = getStartUrl(context.project),
197
- cwsprChatHasProjectContext = getIsProjectContextEnabled( )
199
+ cwsprChatHasProjectContext = getMessageHasProjectContext(message.messageId.orEmpty() )
198
200
)
199
201
ChatInteractWithMessageEvent .builder().apply {
200
202
conversationId(getConversationId(message.tabId).orEmpty())
201
203
messageId(message.messageId.orEmpty())
202
204
interactionType(ChatMessageInteractionType .CLICK_FOLLOW_UP )
205
+ hasProjectLevelContext(getMessageHasProjectContext(message.messageId.orEmpty()))
203
206
}.build()
204
207
}
205
208
@@ -214,14 +217,15 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
214
217
credentialStartUrl = getStartUrl(context.project),
215
218
cwsprChatCodeBlockIndex = message.codeBlockIndex,
216
219
cwsprChatTotalCodeBlocks = message.totalCodeBlocks,
217
- cwsprChatHasProjectContext = getIsProjectContextEnabled( )
220
+ cwsprChatHasProjectContext = getMessageHasProjectContext(message.messageId )
218
221
)
219
222
ChatInteractWithMessageEvent .builder().apply {
220
223
conversationId(getConversationId(message.tabId).orEmpty())
221
224
messageId(message.messageId)
222
225
interactionType(ChatMessageInteractionType .COPY_SNIPPET )
223
226
interactionTarget(message.insertionTargetType)
224
227
acceptedCharacterCount(message.code.length)
228
+ hasProjectLevelContext(getMessageHasProjectContext(message.messageId))
225
229
}.build()
226
230
}
227
231
@@ -237,7 +241,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
237
241
credentialStartUrl = getStartUrl(context.project),
238
242
cwsprChatCodeBlockIndex = message.codeBlockIndex,
239
243
cwsprChatTotalCodeBlocks = message.totalCodeBlocks,
240
- cwsprChatHasProjectContext = getIsProjectContextEnabled( )
244
+ cwsprChatHasProjectContext = getMessageHasProjectContext(message.messageId )
241
245
)
242
246
ChatInteractWithMessageEvent .builder().apply {
243
247
conversationId(getConversationId(message.tabId).orEmpty())
@@ -246,6 +250,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
246
250
interactionTarget(message.insertionTargetType)
247
251
acceptedCharacterCount(message.code.length)
248
252
acceptedLineCount(message.code.lines().size)
253
+ hasProjectLevelContext(getMessageHasProjectContext(message.messageId))
249
254
}.build()
250
255
}
251
256
@@ -265,7 +270,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
265
270
cwsprChatInteractionTarget = message.link,
266
271
cwsprChatHasReference = null ,
267
272
credentialStartUrl = getStartUrl(context.project),
268
- cwsprChatHasProjectContext = getIsProjectContextEnabled( )
273
+ cwsprChatHasProjectContext = getMessageHasProjectContext(message.messageId )
269
274
)
270
275
ChatInteractWithMessageEvent .builder().apply {
271
276
conversationId(getConversationId(message.tabId).orEmpty())
@@ -278,6 +283,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
278
283
}
279
284
)
280
285
interactionTarget(message.link)
286
+ hasProjectLevelContext(getMessageHasProjectContext(message.messageId))
281
287
}.build()
282
288
}
283
289
@@ -364,6 +370,12 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
364
370
responseStreamTotalTime[tabId] = totalTime
365
371
}
366
372
373
+ fun setResponseHasProjectContext (messageId : String , hasProjectContext : Boolean ) {
374
+ responseHasProjectContext[messageId] = hasProjectContext
375
+ }
376
+
377
+ private fun getMessageHasProjectContext (messageId : String ) = responseHasProjectContext.getOrDefault(messageId, false )
378
+
367
379
@VisibleForTesting
368
380
fun getResponseStreamTimeToFirstChunk (tabId : String ): Double {
369
381
val chunkTimes = responseStreamTimeForChunks[tabId] ? : return 0.0
0 commit comments