Skip to content

Commit fefcb99

Browse files
committed
Adding Language to user events
1 parent 4fb43b7 commit fefcb99

File tree

7 files changed

+60
-14
lines changed

7 files changed

+60
-14
lines changed

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class ChatPromptHandler(private val telemetryHelper: TelemetryHelper) {
3333
private val codeReferences = mutableListOf<CodeReference>()
3434
private var requestId: String = ""
3535
private var statusCode: Int = 0
36+
private var codeBlockLanguage: String = "plaintext"
3637

3738
companion object {
3839
private val CODE_BLOCK_PATTERN = Regex("<pre>\\s*<code")
@@ -143,6 +144,24 @@ class ChatPromptHandler(private val telemetryHelper: TelemetryHelper) {
143144
}
144145
}
145146

147+
private fun extractCodeBlockLanguage(message: String): String {
148+
// This fulfills both the cases of unit test generation(java, python) and general use case(Non java and Non python) languages.
149+
val codeBlockStart = message.indexOf("```")
150+
if (codeBlockStart == -1) {
151+
return "plaintext"
152+
}
153+
154+
val languageStart = codeBlockStart + 3
155+
val languageEnd = message.indexOf('\n', languageStart)
156+
157+
if (languageEnd == -1) {
158+
return "plaintext"
159+
}
160+
161+
val language = message.substring(languageStart, languageEnd).trim()
162+
return if (language.isNotEmpty()) language else "plaintext"
163+
}
164+
146165
private fun processChatEvent(
147166
tabId: String,
148167
triggerId: String,
@@ -209,6 +228,10 @@ class ChatPromptHandler(private val telemetryHelper: TelemetryHelper) {
209228
} else {
210229
responseText.toString()
211230
}
231+
if (codeBlockLanguage === "plaintext") {
232+
// To get the language of generated code in Q chat.
233+
codeBlockLanguage = extractCodeBlockLanguage(message)
234+
}
212235
ChatMessage(
213236
tabId = tabId,
214237
triggerId = triggerId,
@@ -217,6 +240,7 @@ class ChatPromptHandler(private val telemetryHelper: TelemetryHelper) {
217240
message = message,
218241
codeReference = codeReferences,
219242
userIntent = data.userIntent,
243+
codeBlockLanguage = codeBlockLanguage,
220244
)
221245
} else {
222246
null

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,8 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
219219
credentialStartUrl = getStartUrl(context.project),
220220
cwsprChatCodeBlockIndex = message.codeBlockIndex?.toLong(),
221221
cwsprChatTotalCodeBlocks = message.totalCodeBlocks?.toLong(),
222-
cwsprChatHasProjectContext = getMessageHasProjectContext(message.messageId)
222+
cwsprChatHasProjectContext = getMessageHasProjectContext(message.messageId),
223+
cwsprChatProgrammingLanguage = message.codeBlockLanguage,
223224
)
224225
ChatInteractWithMessageEvent.builder().apply {
225226
conversationId(getConversationId(message.tabId).orEmpty())
@@ -244,7 +245,8 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se
244245
credentialStartUrl = getStartUrl(context.project),
245246
cwsprChatCodeBlockIndex = message.codeBlockIndex?.toLong(),
246247
cwsprChatTotalCodeBlocks = message.totalCodeBlocks?.toLong(),
247-
cwsprChatHasProjectContext = getMessageHasProjectContext(message.messageId)
248+
cwsprChatHasProjectContext = getMessageHasProjectContext(message.messageId),
249+
cwsprChatProgrammingLanguage = message.codeBlockLanguage,
248250
)
249251
ChatInteractWithMessageEvent.builder().apply {
250252
conversationId(getConversationId(message.tabId).orEmpty())

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/messages/CwcMessage.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ sealed interface IncomingCwcMessage : CwcMessage {
7272
val eventId: String?,
7373
val codeBlockIndex: Int?,
7474
val totalCodeBlocks: Int?,
75+
val codeBlockLanguage: String?,
7576
) : IncomingCwcMessage
7677

7778
data class InsertCodeAtCursorPosition(
@@ -84,6 +85,7 @@ sealed interface IncomingCwcMessage : CwcMessage {
8485
val eventId: String?,
8586
val codeBlockIndex: Int?,
8687
val totalCodeBlocks: Int?,
88+
val codeBlockLanguage: String?,
8789
) : IncomingCwcMessage
8890

8991
data class TriggerTabIdReceived(
@@ -214,6 +216,7 @@ data class ChatMessage(
214216
val relatedSuggestions: List<Suggestion>? = null,
215217
val codeReference: List<CodeReference>? = null,
216218
val userIntent: UserIntent? = null,
219+
val codeBlockLanguage: String? = "plaintext",
217220
) : UiMessage(
218221
tabId = tabId,
219222
type = "chatMessage",

plugins/amazonq/mynah-ui/src/mynah-ui/ui/apps/cwChatConnector.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ export class Connector {
101101
codeBlockIndex?: number,
102102
totalCodeBlocks?: number,
103103
userIntent?: string,
104+
codeBlockLanguage?: string,
104105
): void => {
105106
this.sendMessageToExtension({
106107
tabID: tabID,
@@ -113,7 +114,8 @@ export class Connector {
113114
eventId,
114115
codeBlockIndex,
115116
totalCodeBlocks,
116-
userIntent
117+
userIntent,
118+
codeBlockLanguage
117119
})
118120
}
119121

@@ -127,6 +129,7 @@ export class Connector {
127129
codeBlockIndex?: number,
128130
totalCodeBlocks?: number,
129131
userIntent?: string,
132+
codeBlockLanguage?: string,
130133
): void => {
131134
this.sendMessageToExtension({
132135
tabID: tabID,
@@ -139,7 +142,8 @@ export class Connector {
139142
eventId,
140143
codeBlockIndex,
141144
totalCodeBlocks,
142-
userIntent
145+
userIntent,
146+
codeBlockLanguage
143147
})
144148
}
145149

@@ -271,6 +275,7 @@ export class Connector {
271275
canBeVoted: true,
272276
codeReference: messageData.codeReference,
273277
userIntent: messageData.userIntent,
278+
codeBlockLanguage: messageData.codeBlockLanguage,
274279
}
275280

276281
// If it is not there we will not set it
@@ -304,6 +309,7 @@ export class Connector {
304309
messageId: messageData.messageId,
305310
codeReference: messageData.codeReference,
306311
userIntent: messageData.userIntent,
312+
codeBlockLanguage: messageData.codeBlockLanguage,
307313
followUp:
308314
messageData.followUps !== undefined && messageData.followUps.length > 0
309315
? {

plugins/amazonq/mynah-ui/src/mynah-ui/ui/connector.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ export interface ChatPayload {
3131
}
3232

3333
export interface CWCChatItem extends ChatItem {
34-
userIntent?: string
34+
userIntent?: string,
35+
codeBlockLanguage?: string,
3536
}
3637

3738
export interface ConnectorProps {
@@ -235,7 +236,8 @@ export class Connector {
235236
eventId?: string,
236237
codeBlockIndex?: number,
237238
totalCodeBlocks?: number,
238-
userIntent?: string
239+
userIntent?: string,
240+
codeBlockLanguage?: string
239241
): void => {
240242
switch (this.tabsStorage.getTab(tabID)?.type) {
241243
case 'cwc':
@@ -248,7 +250,8 @@ export class Connector {
248250
eventId,
249251
codeBlockIndex,
250252
totalCodeBlocks,
251-
userIntent
253+
userIntent,
254+
codeBlockLanguage
252255
)
253256
break
254257
case 'featuredev':
@@ -266,7 +269,8 @@ export class Connector {
266269
eventId?: string,
267270
codeBlockIndex?: number,
268271
totalCodeBlocks?: number,
269-
userIntent?: string
272+
userIntent?: string,
273+
codeBlockLanguage?: string
270274
): void => {
271275
switch (this.tabsStorage.getTab(tabID)?.type) {
272276
case 'cwc':
@@ -279,7 +283,8 @@ export class Connector {
279283
eventId,
280284
codeBlockIndex,
281285
totalCodeBlocks,
282-
userIntent
286+
userIntent,
287+
codeBlockLanguage
283288
)
284289
break
285290
case 'featuredev':

plugins/amazonq/mynah-ui/src/mynah-ui/ui/main.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export const createMynahUI = (ideApi: any, featureDevInitEnabled: boolean, codeT
2424
let mynahUI: MynahUI
2525
// eslint-disable-next-line prefer-const
2626
let connector: Connector
27-
const messageUserIntentMap = new Map<string, string>()
27+
const messageUserIntentMap = new Map<string, string[]>()
2828

2929
const tabsStorage = new TabsStorage({
3030
onTabTimeout: tabID => {
@@ -254,8 +254,8 @@ export const createMynahUI = (ideApi: any, featureDevInitEnabled: boolean, codeT
254254
? { type: ChatItemType.CODE_RESULT, fileList: item.fileList }
255255
: {}),
256256
})
257-
if (item.messageId !== undefined && item.userIntent !== undefined) {
258-
messageUserIntentMap.set(item.messageId, item.userIntent)
257+
if (item.messageId !== undefined && item.userIntent !== undefined && item.codeBlockLanguage !== undefined) {
258+
messageUserIntentMap.set(item.messageId, [item.userIntent, item.codeBlockLanguage])
259259
}
260260
return
261261
}
@@ -466,7 +466,8 @@ export const createMynahUI = (ideApi: any, featureDevInitEnabled: boolean, codeT
466466
eventId,
467467
codeBlockIndex,
468468
totalCodeBlocks,
469-
messageUserIntentMap.get(messageId) ?? undefined
469+
messageUserIntentMap.get(messageId)?.[0] ?? undefined,
470+
messageUserIntentMap.get(messageId)?.[1] ?? undefined
470471
)
471472
break
472473
case 'copy':
@@ -479,7 +480,8 @@ export const createMynahUI = (ideApi: any, featureDevInitEnabled: boolean, codeT
479480
eventId,
480481
codeBlockIndex,
481482
totalCodeBlocks,
482-
messageUserIntentMap.get(messageId) ?? undefined
483+
messageUserIntentMap.get(messageId)?.[0] ?? undefined,
484+
messageUserIntentMap.get(messageId)?.[1] ?? undefined
483485
)
484486
mynahUI.notify({
485487
type: NotificationType.SUCCESS,

plugins/core/jetbrains-community/resources/telemetryOverride.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,10 @@
692692
{
693693
"type": "cwsprChatHasProjectContext",
694694
"required": false
695+
},
696+
{
697+
"type": "cwsprChatProgrammingLanguage",
698+
"required": false
695699
}
696700
]
697701
},

0 commit comments

Comments
 (0)