From d59ccd4c395241a1a965d5e7337b38c9f3f699f8 Mon Sep 17 00:00:00 2001 From: laileni Date: Mon, 15 Apr 2024 18:30:16 -0700 Subject: [PATCH 1/6] Adding cwsprChatCodeBlockIndex and cwsprChatTotalCodeBlocks to the Copy and Insert at Cursor events --- .../chat/telemetry/TelemetryHelper.kt | 8 +++++-- .../services/cwc/messages/CwcMessage.kt | 6 +++++ plugins/amazonq/mynah-ui/package-lock.json | 8 +++---- plugins/amazonq/mynah-ui/package.json | 2 +- .../src/mynah-ui/ui/apps/cwChatConnector.ts | 16 ++++++++++++-- .../mynah-ui/src/mynah-ui/ui/connector.ts | 14 ++++++++---- .../amazonq/mynah-ui/src/mynah-ui/ui/main.ts | 22 +++++++++++++++++-- .../resources/telemetryOverride.json | 18 +++++++++++++++ 8 files changed, 79 insertions(+), 15 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt index b2957c7f31f..4bc748b409b 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt @@ -190,7 +190,9 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se cwsprChatAcceptedCharactersLength = message.code.length, cwsprChatInteractionTarget = message.insertionTargetType, cwsprChatHasReference = null, - credentialStartUrl = getStartUrl(context.project) + credentialStartUrl = getStartUrl(context.project), + cwsprChatCodeBlockIndex = message.codeBlockIndex, + cwsprChatTotalCodeBlocks = message.totalCodeBlocks ) ChatInteractWithMessageEvent.builder().apply { conversationId(getConversationId(message.tabId).orEmpty()) @@ -209,7 +211,9 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se cwsprChatAcceptedCharactersLength = message.code.length, cwsprChatInteractionTarget = message.insertionTargetType, cwsprChatHasReference = null, - credentialStartUrl = getStartUrl(context.project) + credentialStartUrl = getStartUrl(context.project), + cwsprChatCodeBlockIndex = message.codeBlockIndex, + cwsprChatTotalCodeBlocks = message.totalCodeBlocks ) ChatInteractWithMessageEvent.builder().apply { conversationId(getConversationId(message.tabId).orEmpty()) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/messages/CwcMessage.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/messages/CwcMessage.kt index a20b2b604e9..b8847c841c7 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/messages/CwcMessage.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/messages/CwcMessage.kt @@ -67,6 +67,9 @@ sealed interface IncomingCwcMessage : CwcMessage { val messageId: String, val code: String, val insertionTargetType: String?, + val eventId: String?, + val codeBlockIndex: Int?, + val totalCodeBlocks: Int? ) : IncomingCwcMessage data class InsertCodeAtCursorPosition( @@ -75,6 +78,9 @@ sealed interface IncomingCwcMessage : CwcMessage { val code: String, val insertionTargetType: String?, val codeReference: List?, + val eventId: String?, + val codeBlockIndex: Int?, + val totalCodeBlocks: Int? ) : IncomingCwcMessage data class TriggerTabIdReceived( diff --git a/plugins/amazonq/mynah-ui/package-lock.json b/plugins/amazonq/mynah-ui/package-lock.json index 43a16ea1483..fd7abe32623 100644 --- a/plugins/amazonq/mynah-ui/package-lock.json +++ b/plugins/amazonq/mynah-ui/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@aws/mynah-ui-chat": "npm:@aws/mynah-ui@4.4.2", + "@aws/mynah-ui-chat": "npm:@aws/mynah-ui@4.5.6", "@types/node": "^14.18.5", "fs-extra": "^10.0.1", "sanitize-html": "^2.12.1", @@ -57,9 +57,9 @@ }, "node_modules/@aws/mynah-ui-chat": { "name": "@aws/mynah-ui", - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@aws/mynah-ui/-/mynah-ui-4.4.2.tgz", - "integrity": "sha512-ctpSGdG2BLPZktzAzvpcGYsm/53eMS7ig9oUxkFrqGcZhYoPoK3Obc/zBGMhxduhYeOcXYhd70laiPO8rTVyCA==", + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/@aws/mynah-ui/-/mynah-ui-4.5.6.tgz", + "integrity": "sha512-aw0hAAS+gs8Vap3uqiLBs6sZ1JT5zXxQxc+WfMGIzd8YUfK+gcDcFyq0QHGFO8jTTAoefdvQPfSxabjJMIuiUw==", "hasInstallScript": true, "dependencies": { "just-clone": "^6.2.0", diff --git a/plugins/amazonq/mynah-ui/package.json b/plugins/amazonq/mynah-ui/package.json index c49cbc06eae..aaf14ce1dd5 100644 --- a/plugins/amazonq/mynah-ui/package.json +++ b/plugins/amazonq/mynah-ui/package.json @@ -12,7 +12,7 @@ "lintfix": "eslint -c .eslintrc.js --fix --ext .ts ." }, "dependencies": { - "@aws/mynah-ui-chat": "npm:@aws/mynah-ui@4.4.2", + "@aws/mynah-ui-chat": "npm:@aws/mynah-ui@4.5.6", "@types/node": "^14.18.5", "fs-extra": "^10.0.1", "ts-node": "^10.7.0", diff --git a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/apps/cwChatConnector.ts b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/apps/cwChatConnector.ts index c6e2432cc4f..d336d9847f8 100644 --- a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/apps/cwChatConnector.ts +++ b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/apps/cwChatConnector.ts @@ -92,7 +92,10 @@ export class Connector { messageId: string, code?: string, type?: 'selection' | 'block', - codeReference?: CodeReference[] + codeReference?: CodeReference[], + eventId?: string, + codeBlockIndex?: number, + totalCodeBlocks?: number ): void => { this.sendMessageToExtension({ tabID: tabID, @@ -102,6 +105,9 @@ export class Connector { tabType: 'cwc', insertionTargetType: type, codeReference, + eventId, + codeBlockIndex, + totalCodeBlocks, }) } @@ -110,7 +116,10 @@ export class Connector { messageId: string, code?: string, type?: 'selection' | 'block', - codeReference?: CodeReference[] + codeReference?: CodeReference[], + eventId?: string, + codeBlockIndex?: number, + totalCodeBlocks?: number ): void => { this.sendMessageToExtension({ tabID: tabID, @@ -120,6 +129,9 @@ export class Connector { tabType: 'cwc', insertionTargetType: type, codeReference, + eventId, + codeBlockIndex, + totalCodeBlocks, }) } diff --git a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/connector.ts b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/connector.ts index 9a18d8813b0..1aee68b2434 100644 --- a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/connector.ts +++ b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/connector.ts @@ -212,11 +212,14 @@ export class Connector { messageId: string, code?: string, type?: 'selection' | 'block', - codeReference?: CodeReference[] + codeReference?: CodeReference[], + eventId?: string, + codeBlockIndex?: number, + totalCodeBlocks?: number ): void => { switch (this.tabsStorage.getTab(tabID)?.type) { case 'cwc': - this.cwChatConnector.onCodeInsertToCursorPosition(tabID, messageId, code, type, codeReference) + this.cwChatConnector.onCodeInsertToCursorPosition(tabID, messageId, code, type, codeReference, eventId, codeBlockIndex, totalCodeBlocks) break case 'featuredev': this.featureDevChatConnector.onCodeInsertToCursorPosition(tabID, code, type, codeReference) @@ -229,11 +232,14 @@ export class Connector { messageId: string, code?: string, type?: 'selection' | 'block', - codeReference?: CodeReference[] + codeReference?: CodeReference[], + eventId?: string, + codeBlockIndex?: number, + totalCodeBlocks?: number ): void => { switch (this.tabsStorage.getTab(tabID)?.type) { case 'cwc': - this.cwChatConnector.onCopyCodeToClipboard(tabID, messageId, code, type, codeReference) + this.cwChatConnector.onCopyCodeToClipboard(tabID, messageId, code, type, codeReference, eventId, codeBlockIndex, totalCodeBlocks) break case 'featuredev': this.featureDevChatConnector.onCopyCodeToClipboard(tabID, code, type, codeReference) diff --git a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/main.ts b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/main.ts index 3c96b69b9e4..50784967ff1 100644 --- a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/main.ts +++ b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/main.ts @@ -393,8 +393,26 @@ export const createMynahUI = (ideApi: any, featureDevInitEnabled: boolean, codeT }) }, onCodeInsertToCursorPosition: connector.onCodeInsertToCursorPosition, - onCopyCodeToClipboard: (tabId, messageId, code, type, referenceTrackerInfo) => { - connector.onCopyCodeToClipboard(tabId, messageId, code, type, referenceTrackerInfo) + onCopyCodeToClipboard: ( + tabId, + messageId, + code, + type, + referenceTrackerInfo, + eventId, + codeBlockIndex, + totalCodeBlocks + ) => { + connector.onCopyCodeToClipboard( + tabId, + messageId, + code, + type, + referenceTrackerInfo, + eventId, + codeBlockIndex, + totalCodeBlocks + ) mynahUI.notify({ type: NotificationType.SUCCESS, content: 'Selected code is copied to clipboard', diff --git a/plugins/core/jetbrains-community/resources/telemetryOverride.json b/plugins/core/jetbrains-community/resources/telemetryOverride.json index f7cf5d101d1..ef0b9752c31 100644 --- a/plugins/core/jetbrains-community/resources/telemetryOverride.json +++ b/plugins/core/jetbrains-community/resources/telemetryOverride.json @@ -165,6 +165,16 @@ "type": "string", "description": "Identifies the entity within the message that user interacts with." }, + { + "name": "cwsprChatCodeBlockIndex", + "type": "int", + "description": "Index of the code block inside a message in the conversation." + }, + { + "name": "cwsprChatTotalCodeBlocks", + "type": "int", + "description": "Total number of code blocks inside a message in the conversation." + }, { "name": "cwsprChatAcceptedCharactersLength", "type": "int", @@ -464,6 +474,14 @@ "type": "cwsprChatInteractionTarget", "required": false }, + { + "type": "cwsprChatCodeBlockIndex", + "required": false + }, + { + "type": "cwsprChatTotalCodeBlocks", + "required": false + }, { "type": "cwsprChatAcceptedCharactersLength", "required": false From be43880463adaed4117cb1462ead915826a35175 Mon Sep 17 00:00:00 2001 From: laileni Date: Mon, 15 Apr 2024 19:06:52 -0700 Subject: [PATCH 2/6] Adding change log. --- .../feature-385d3c2d-cd80-47e6-9a72-d26a7e05fafc.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .changes/next-release/feature-385d3c2d-cd80-47e6-9a72-d26a7e05fafc.json diff --git a/.changes/next-release/feature-385d3c2d-cd80-47e6-9a72-d26a7e05fafc.json b/.changes/next-release/feature-385d3c2d-cd80-47e6-9a72-d26a7e05fafc.json new file mode 100644 index 00000000000..fc14d988d60 --- /dev/null +++ b/.changes/next-release/feature-385d3c2d-cd80-47e6-9a72-d26a7e05fafc.json @@ -0,0 +1,4 @@ +{ + "type" : "feature", + "description" : "Amazon Q Chat: Added additional parameters to onCopyCodeToClipboard and onCodeInsertToCursorPosition events" +} \ No newline at end of file From 1ad015565af3d46911acac4ced7057b0f4e151d6 Mon Sep 17 00:00:00 2001 From: laileni Date: Fri, 19 Apr 2024 14:22:10 -0700 Subject: [PATCH 3/6] telemetry(amazonq chat): numberOfCodeBlocks --- .../controller/chat/messenger/ChatPromptHandler.kt | 11 ++++++++++- .../cwc/controller/chat/telemetry/TelemetryHelper.kt | 5 +++-- .../codewhispererruntime/service-2.json | 3 ++- .../credentials/CodeWhispererClientAdaptor.kt | 5 ++++- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/messenger/ChatPromptHandler.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/messenger/ChatPromptHandler.kt index c51cc82e66c..4460984a1b4 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/messenger/ChatPromptHandler.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/messenger/ChatPromptHandler.kt @@ -32,6 +32,15 @@ class ChatPromptHandler(private val telemetryHelper: TelemetryHelper) { private var requestId: String = "" private var statusCode: Int = 0 + private fun countTotalNumberOfCodeBlocks(message: StringBuilder): Int { + if (message.isEmpty()) { + return 0 + } + val countOfCodeBlocks = Regex("^```", RegexOption.MULTILINE).findAll(message) + val numberOfTripleBackTicksInMarkdown = countOfCodeBlocks.count() + return numberOfTripleBackTicksInMarkdown / 2 + } + fun handle( tabId: String, triggerId: String, @@ -75,7 +84,7 @@ class ChatPromptHandler(private val telemetryHelper: TelemetryHelper) { ChatMessage(tabId = tabId, triggerId = triggerId, messageId = requestId, messageType = ChatMessageType.Answer, followUps = followUps) telemetryHelper.setResponseStreamTotalTime(tabId) - telemetryHelper.recordAddMessage(data, response, responseText.length, statusCode) + telemetryHelper.recordAddMessage(data, response, responseText.length, statusCode, countTotalNumberOfCodeBlocks(responseText)) emit(response) } .catch { exception -> diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt index 4bc748b409b..8e6327e94e0 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt @@ -83,7 +83,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se } // When Chat API responds to a user message (full response streamed) - fun recordAddMessage(data: ChatRequestData, response: ChatMessage, responseLength: Int, statusCode: Int) { + fun recordAddMessage(data: ChatRequestData, response: ChatMessage, responseLength: Int, statusCode: Int, numberOfCodeBlocks: Int) { AmazonqTelemetry.addMessage( cwsprChatConversationId = getConversationId(response.tabId).orEmpty(), cwsprChatMessageId = response.messageId, @@ -96,7 +96,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se cwsprChatResponseCodeSnippetCount = 0, cwsprChatResponseCode = statusCode, cwsprChatSourceLinkCount = response.relatedSuggestions?.size, - cwsprChatReferencesCount = 0, // TODO + cwsprChatReferencesCount = numberOfCodeBlocks, cwsprChatFollowUpCount = response.followUps?.size, cwsprChatTimeToFirstChunk = getResponseStreamTimeToFirstChunk(response.tabId).toInt(), cwsprChatTimeBetweenChunks = "[${getResponseStreamTimeBetweenChunks(response.tabId).joinToString(",")}]", @@ -122,6 +122,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se (responseStreamTotalTime[response.tabId] ?: 0).toDouble(), data.message.length, responseLength, + numberOfCodeBlocks ) } diff --git a/plugins/core/sdk-codegen/codegen-resources/codewhispererruntime/service-2.json b/plugins/core/sdk-codegen/codegen-resources/codewhispererruntime/service-2.json index 71db2e4acfd..bba4d8ddceb 100644 --- a/plugins/core/sdk-codegen/codegen-resources/codewhispererruntime/service-2.json +++ b/plugins/core/sdk-codegen/codegen-resources/codewhispererruntime/service-2.json @@ -370,7 +370,8 @@ "timeBetweenChunks": { "shape": "TimeBetweenChunks" }, "fullResponselatency": { "shape": "Double" }, "requestLength": { "shape": "Integer" }, - "responseLength": { "shape": "Integer" } + "responseLength": { "shape": "Integer" }, + "numberOfCodeBlocks": { "shape": "Integer" } } }, "ChatHistory":{ diff --git a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt index 28bdec64407..debcff45c3b 100644 --- a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt +++ b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt @@ -149,6 +149,7 @@ interface CodeWhispererClientAdaptor : Disposable { fullResponselatency: Double?, requestLength: Int?, responseLength: Int?, + numberOfCodeBlocks: Int? ): SendTelemetryEventResponse fun sendChatInteractWithMessageTelemetry( @@ -447,7 +448,8 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW timeBetweenChunks: List?, fullResponselatency: Double?, requestLength: Int?, - responseLength: Int? + responseLength: Int?, + numberOfCodeBlocks: Int? ): SendTelemetryEventResponse = bearerClient().sendTelemetryEvent { requestBuilder -> requestBuilder.telemetryEvent { telemetryEventBuilder -> telemetryEventBuilder.chatAddMessageEvent { @@ -462,6 +464,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW it.fullResponselatency(fullResponselatency) it.requestLength(requestLength) it.responseLength(responseLength) + it.numberOfCodeBlocks(numberOfCodeBlocks) } } requestBuilder.optOutPreference(getTelemetryOptOutPreference()) From 58c0ab8f5c1a82de161662ae314090350953c001 Mon Sep 17 00:00:00 2001 From: laileni Date: Sat, 20 Apr 2024 13:10:23 -0700 Subject: [PATCH 4/6] Refactoring code --- .../cwc/controller/chat/telemetry/TelemetryHelper.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt index 8e6327e94e0..746a24c7533 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt @@ -93,10 +93,10 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se cwsprChatProgrammingLanguage = data.activeFileContext.fileContext?.fileLanguage, cwsprChatActiveEditorTotalCharacters = data.activeFileContext.focusAreaContext?.codeSelection?.length, cwsprChatActiveEditorImportCount = data.activeFileContext.focusAreaContext?.codeNames?.fullyQualifiedNames?.used?.size, - cwsprChatResponseCodeSnippetCount = 0, + cwsprChatResponseCodeSnippetCount = numberOfCodeBlocks, cwsprChatResponseCode = statusCode, cwsprChatSourceLinkCount = response.relatedSuggestions?.size, - cwsprChatReferencesCount = numberOfCodeBlocks, + cwsprChatReferencesCount = 0, cwsprChatFollowUpCount = response.followUps?.size, cwsprChatTimeToFirstChunk = getResponseStreamTimeToFirstChunk(response.tabId).toInt(), cwsprChatTimeBetweenChunks = "[${getResponseStreamTimeBetweenChunks(response.tabId).joinToString(",")}]", @@ -106,7 +106,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se cwsprChatConversationType = CwsprChatConversationType.Chat, credentialStartUrl = getStartUrl(context.project) ) - + val x=numberOfCodeBlocks val programmingLanguage = data.activeFileContext.fileContext?.fileLanguage val validProgrammingLanguage = if (ChatSessionV1.validLanguages.contains(programmingLanguage)) programmingLanguage else null From ed5ebc2254d73857e24f05f887641085810d483d Mon Sep 17 00:00:00 2001 From: laileni Date: Sat, 20 Apr 2024 13:17:31 -0700 Subject: [PATCH 5/6] Refactoring code --- .../services/cwc/controller/chat/telemetry/TelemetryHelper.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt index 746a24c7533..ea8e812b11c 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/telemetry/TelemetryHelper.kt @@ -96,7 +96,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se cwsprChatResponseCodeSnippetCount = numberOfCodeBlocks, cwsprChatResponseCode = statusCode, cwsprChatSourceLinkCount = response.relatedSuggestions?.size, - cwsprChatReferencesCount = 0, + cwsprChatReferencesCount = 0, // TODO cwsprChatFollowUpCount = response.followUps?.size, cwsprChatTimeToFirstChunk = getResponseStreamTimeToFirstChunk(response.tabId).toInt(), cwsprChatTimeBetweenChunks = "[${getResponseStreamTimeBetweenChunks(response.tabId).joinToString(",")}]", @@ -106,7 +106,7 @@ class TelemetryHelper(private val context: AmazonQAppInitContext, private val se cwsprChatConversationType = CwsprChatConversationType.Chat, credentialStartUrl = getStartUrl(context.project) ) - val x=numberOfCodeBlocks + val programmingLanguage = data.activeFileContext.fileContext?.fileLanguage val validProgrammingLanguage = if (ChatSessionV1.validLanguages.contains(programmingLanguage)) programmingLanguage else null From a8b39845c6594386aa08eaa46ff553fb5463248f Mon Sep 17 00:00:00 2001 From: laileni Date: Mon, 22 Apr 2024 11:36:01 -0700 Subject: [PATCH 6/6] Addressing comments --- .../cwc/controller/chat/messenger/ChatPromptHandler.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/messenger/ChatPromptHandler.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/messenger/ChatPromptHandler.kt index 4460984a1b4..9c14b208af9 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/messenger/ChatPromptHandler.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/chat/messenger/ChatPromptHandler.kt @@ -32,11 +32,15 @@ class ChatPromptHandler(private val telemetryHelper: TelemetryHelper) { private var requestId: String = "" private var statusCode: Int = 0 + companion object { + val CODE_BLOCK_REGEX: Regex = Regex("^```", RegexOption.MULTILINE) + } + private fun countTotalNumberOfCodeBlocks(message: StringBuilder): Int { if (message.isEmpty()) { return 0 } - val countOfCodeBlocks = Regex("^```", RegexOption.MULTILINE).findAll(message) + val countOfCodeBlocks = CODE_BLOCK_REGEX.findAll(message) val numberOfTripleBackTicksInMarkdown = countOfCodeBlocks.count() return numberOfTripleBackTicksInMarkdown / 2 }