diff --git a/gradle.properties b/gradle.properties index 90edf55..c7ec4e6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ pluginGroup=com.intellij.ml.llm.template pluginName=LLM Extract Function pluginRepositoryUrl=https://github.com/JetBrains/intellij-platform-plugin-template -pluginVersion=0.2.1 +pluginVersion=0.2.2 # Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html pluginSinceBuild = 231 diff --git a/src/main/kotlin/com/intellij/ml/llm/template/intentions/ApplyExtractFunctionTransformationIntention.kt b/src/main/kotlin/com/intellij/ml/llm/template/intentions/ApplyExtractFunctionTransformationIntention.kt index 70a6b75..c5cfea5 100644 --- a/src/main/kotlin/com/intellij/ml/llm/template/intentions/ApplyExtractFunctionTransformationIntention.kt +++ b/src/main/kotlin/com/intellij/ml/llm/template/intentions/ApplyExtractFunctionTransformationIntention.kt @@ -40,6 +40,7 @@ abstract class ApplyExtractFunctionTransformationIntention( private val logger = Logger.getInstance("#com.intellij.ml.llm") private val codeTransformer = CodeTransformer() private val telemetryDataManager = EFTelemetryDataManager() + private var llmResponseTime = 0L init { codeTransformer.addObserver(EFLoggerObserver(logger)) @@ -86,11 +87,13 @@ abstract class ApplyExtractFunctionTransformationIntention( project, LLMBundle.message("intentions.request.extract.function.background.process.title") ) { override fun run(indicator: ProgressIndicator) { + val now = System.currentTimeMillis() val response = sendChatRequest( project, messageList, efLLMRequestProvider.chatModel, efLLMRequestProvider ) if (response != null) { invokeLater { + llmResponseTime = System.currentTimeMillis() - now if (response.getSuggestions().isEmpty()) { showEFNotification( project, @@ -123,6 +126,7 @@ abstract class ApplyExtractFunctionTransformationIntention( } private fun processLLMResponse(response: LLMBaseResponse, project: Project, editor: Editor, file: PsiFile) { + val now = System.currentTimeMillis() val llmResponse = response.getSuggestions()[0] val efSuggestionList = identifyExtractFunctionSuggestions(llmResponse.text) val candidates = EFCandidateFactory().buildCandidates(efSuggestionList.suggestionList, editor, file).toList() @@ -133,6 +137,7 @@ abstract class ApplyExtractFunctionTransformationIntention( NotificationType.INFORMATION ) telemetryDataManager.addCandidatesTelemetryData(buildCandidatesTelemetryData(0, emptyList())) + buildProcessingTimeTelemetryData(llmResponseTime, System.currentTimeMillis() - now) sendTelemetryData() } else { val candidatesApplicationTelemetryObserver = EFCandidatesApplicationTelemetryObserver() @@ -144,6 +149,7 @@ abstract class ApplyExtractFunctionTransformationIntention( candidatesApplicationTelemetryObserver.getData() ) ) + buildProcessingTimeTelemetryData(llmResponseTime, System.currentTimeMillis() - now) if (filteredCandidates.isEmpty()) { showEFNotification( @@ -232,6 +238,17 @@ abstract class ApplyExtractFunctionTransformationIntention( } } + private fun buildProcessingTimeTelemetryData(llmResponseTime: Long, pluginProcessingTime: Long) { + val efTelemetryData = telemetryDataManager.getData() + if (efTelemetryData != null) { + efTelemetryData.processingTime = EFTelemetryDataProcessingTime( + llmResponseTime = llmResponseTime, + pluginProcessingTime = pluginProcessingTime, + totalTime = llmResponseTime + pluginProcessingTime + ) + } + } + private fun buildCandidatesTelemetryData( numberOfSuggestions: Int, notificationPayloadList: List ): EFCandidatesTelemetryData { diff --git a/src/main/kotlin/com/intellij/ml/llm/template/telemetry/EFTelemetryData.kt b/src/main/kotlin/com/intellij/ml/llm/template/telemetry/EFTelemetryData.kt index d86d12e..9a10445 100644 --- a/src/main/kotlin/com/intellij/ml/llm/template/telemetry/EFTelemetryData.kt +++ b/src/main/kotlin/com/intellij/ml/llm/template/telemetry/EFTelemetryData.kt @@ -27,6 +27,9 @@ data class EFTelemetryData( @SerializedName("elapsedTime") lateinit var elapsedTime: List + + @SerializedName("processingTime") + lateinit var processingTime: EFTelemetryDataProcessingTime } data class EFHostFunctionTelemetryData( @@ -124,6 +127,17 @@ data class EFTelemetryDataElapsedTimeNotificationPayload( var selectionIndex: Int ) +data class EFTelemetryDataProcessingTime( + @SerializedName("llmResponseTime") + var llmResponseTime: Long, + + @SerializedName("pluginProcessingTime") + var pluginProcessingTime: Long, + + @SerializedName("totalTime") + var totalTime: Long +) + class EFTelemetryDataManager { private var currentSessionId: String = "" private val data: MutableMap = mutableMapOf()