Skip to content

Commit 3075212

Browse files
committed
don't send all rejects for a display session
1 parent 1bb18d2 commit 3075212

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererTelemetryService.kt

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,7 @@ class CodeWhispererTelemetryService {
393393
hasUserAccepted: Boolean,
394394
popupShownTime: Duration? = null,
395395
) {
396+
var hasSentRejectedTrigger = false
396397
CodeWhispererService.getInstance().getAllPaginationSessions().forEach { (jobId, state) ->
397398
if (state == null) return@forEach
398399
val details = state.recommendationContext.details
@@ -405,9 +406,15 @@ class CodeWhispererTelemetryService {
405406
}
406407
LOG.debug { "jobId: $jobId, userDecisions: [${decisions.joinToString(", ")}]" }
407408

408-
with(aggregateUserDecision(decisions)) {
409+
with(aggregateUserDecision(decisions, hasSentRejectedTrigger)) {
409410
// the order of the following matters
410411
// step 1, send out current decision
412+
413+
// if we have sent one reject in this display session(which can contain multiple triggers),
414+
// we will not send rejects for the remaining triggers in this display session.
415+
if (this == CodewhispererSuggestionState.Reject) {
416+
hasSentRejectedTrigger = true
417+
}
411418
LOG.debug { "jobId: $jobId, userTriggerDecision: $this" }
412419
previousUserTriggerDecisionTimestamp = Instant.now()
413420

@@ -455,7 +462,10 @@ class CodeWhispererTelemetryService {
455462
* - Record the accepted suggestion index
456463
* - Discard otherwise
457464
*/
458-
fun aggregateUserDecision(decisions: List<CodewhispererSuggestionState>): CodewhispererSuggestionState {
465+
fun aggregateUserDecision(
466+
decisions: List<CodewhispererSuggestionState>,
467+
hasRejectedTrigger: Boolean,
468+
): CodewhispererSuggestionState {
459469
var isEmpty = true
460470
var isUnseen = true
461471
var isDiscard = true
@@ -464,7 +474,11 @@ class CodeWhispererTelemetryService {
464474
if (decision == CodewhispererSuggestionState.Accept) {
465475
return CodewhispererSuggestionState.Accept
466476
} else if (decision == CodewhispererSuggestionState.Reject) {
467-
return CodewhispererSuggestionState.Reject
477+
return if (!hasRejectedTrigger) {
478+
CodewhispererSuggestionState.Reject
479+
} else {
480+
CodewhispererSuggestionState.Ignore
481+
}
468482
} else if (decision == CodewhispererSuggestionState.Unseen) {
469483
isEmpty = false
470484
isDiscard = false

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererServiceTest.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import com.intellij.testFramework.DisposableRule
1010
import com.intellij.testFramework.replaceService
1111
import com.intellij.testFramework.runInEdtAndWait
1212
import kotlinx.coroutines.async
13-
import kotlinx.coroutines.runBlocking
1413
import kotlinx.coroutines.test.runTest
1514
import org.assertj.core.api.Assertions.assertThat
1615
import org.junit.After
@@ -23,6 +22,7 @@ import org.mockito.kotlin.argumentCaptor
2322
import org.mockito.kotlin.doReturn
2423
import org.mockito.kotlin.mock
2524
import org.mockito.kotlin.spy
25+
import org.mockito.kotlin.timeout
2626
import org.mockito.kotlin.times
2727
import org.mockito.kotlin.verify
2828
import org.mockito.kotlin.whenever
@@ -191,11 +191,9 @@ class CodeWhispererServiceTest {
191191
)
192192
)
193193

194-
runBlocking {
195-
sut.invokeCodeWhispererInBackground(mockRequestContext, 0, LatencyContext())
196-
}
194+
sut.invokeCodeWhispererInBackground(mockRequestContext, 0, LatencyContext())
197195

198-
verify(mockRequestContext, times(1)).awaitSupplementalContext()
196+
verify(mockRequestContext, timeout(5000).atLeastOnce()).awaitSupplementalContext()
199197
verify(clientFacade).generateCompletionsPaginator(any())
200198

201199
argumentCaptor<GenerateCompletionsRequest> {

0 commit comments

Comments
 (0)