From 81da6b108622cc7be19cdd6b3120d801f17a1357 Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Thu, 24 Jul 2025 14:12:45 -0700 Subject: [PATCH 1/4] fix: early stop pagination requests --- packages/amazonq/src/app/inline/recommendationService.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/amazonq/src/app/inline/recommendationService.ts b/packages/amazonq/src/app/inline/recommendationService.ts index 1329c68a51c..3b0911c40fb 100644 --- a/packages/amazonq/src/app/inline/recommendationService.ts +++ b/packages/amazonq/src/app/inline/recommendationService.ts @@ -12,7 +12,7 @@ import { import { CancellationToken, InlineCompletionContext, Position, TextDocument } from 'vscode' import { LanguageClient } from 'vscode-languageclient' import { SessionManager } from './sessionManager' -import { AuthUtil, CodeWhispererStatusBarManager } from 'aws-core-vscode/codewhisperer' +import { AuthUtil, CodeWhispererStatusBarManager, vsCodeState } from 'aws-core-vscode/codewhisperer' import { TelemetryHelper } from './telemetryHelper' import { ICursorUpdateRecorder } from './cursorUpdateManager' import { globals, getLogger } from 'aws-core-vscode/shared' @@ -183,6 +183,11 @@ export class RecommendationService { request, token ) + // when pagination is in progress, but user has already accepted or rejected an inline completion + // then stop pagination + if (this.sessionManager.getActiveSession() === undefined || vsCodeState.isCodeWhispererEditing) { + break + } this.sessionManager.updateSessionSuggestions(result.items) nextToken = result.partialResultToken } From 8449b3df4a4d4856780f062b0d1700e01b1ad140 Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Thu, 24 Jul 2025 14:47:51 -0700 Subject: [PATCH 2/4] also fix the codewhispererTotalShownTime in telemetry --- packages/amazonq/src/app/inline/recommendationService.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/amazonq/src/app/inline/recommendationService.ts b/packages/amazonq/src/app/inline/recommendationService.ts index 3b0911c40fb..5f4e406e2d5 100644 --- a/packages/amazonq/src/app/inline/recommendationService.ts +++ b/packages/amazonq/src/app/inline/recommendationService.ts @@ -15,7 +15,7 @@ import { SessionManager } from './sessionManager' import { AuthUtil, CodeWhispererStatusBarManager, vsCodeState } from 'aws-core-vscode/codewhisperer' import { TelemetryHelper } from './telemetryHelper' import { ICursorUpdateRecorder } from './cursorUpdateManager' -import { globals, getLogger } from 'aws-core-vscode/shared' +import { getLogger } from 'aws-core-vscode/shared' export interface GetAllRecommendationsOptions { emitTelemetry?: boolean @@ -68,7 +68,7 @@ export class RecommendationService { if (options.editsStreakToken) { request = { ...request, partialResultToken: options.editsStreakToken } } - const requestStartTime = globals.clock.Date.now() + const requestStartTime = performance.now() const statusBar = CodeWhispererStatusBarManager.instance // Only track telemetry if enabled @@ -117,7 +117,7 @@ export class RecommendationService { } TelemetryHelper.instance.setFirstSuggestionShowTime() - const firstCompletionDisplayLatency = globals.clock.Date.now() - requestStartTime + const firstCompletionDisplayLatency = performance.now() - requestStartTime this.sessionManager.startSession( result.sessionId, result.items, From 565e08495c67d581cf56b9579d1262eff2704653 Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Thu, 24 Jul 2025 14:58:36 -0700 Subject: [PATCH 3/4] add session display time for reject --- packages/amazonq/src/app/inline/completion.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/amazonq/src/app/inline/completion.ts b/packages/amazonq/src/app/inline/completion.ts index be49a0654cc..29731020f94 100644 --- a/packages/amazonq/src/app/inline/completion.ts +++ b/packages/amazonq/src/app/inline/completion.ts @@ -164,6 +164,11 @@ export class InlineCompletionManager implements Disposable { const onInlineRejection = async () => { try { vsCodeState.isCodeWhispererEditing = true + if (this.sessionManager.getActiveSession() === undefined) { + return + } + const requestStartTime = this.sessionManager.getActiveSession()!.requestStartTime + const totalSessionDisplayTime = performance.now() - requestStartTime await commands.executeCommand('editor.action.inlineSuggest.hide') // TODO: also log the seen state for other suggestions in session this.disposable.dispose() @@ -185,6 +190,7 @@ export class InlineCompletionManager implements Disposable { discarded: false, }, }, + totalSessionDisplayTime: totalSessionDisplayTime, } this.languageClient.sendNotification(this.logSessionResultMessageName, params) // clear session manager states once rejected From f48f56fd95c0497b3ca1df84702bec967fcadcff Mon Sep 17 00:00:00 2001 From: Lei Gao Date: Thu, 24 Jul 2025 15:17:34 -0700 Subject: [PATCH 4/4] reject case display time --- packages/amazonq/src/app/inline/completion.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/amazonq/src/app/inline/completion.ts b/packages/amazonq/src/app/inline/completion.ts index 29731020f94..14b0c518ba2 100644 --- a/packages/amazonq/src/app/inline/completion.ts +++ b/packages/amazonq/src/app/inline/completion.ts @@ -319,6 +319,7 @@ export class AmazonQInlineCompletionItemProvider implements InlineCompletionItem discarded: false, }, }, + totalSessionDisplayTime: performance.now() - prevSession.requestStartTime, } this.languageClient.sendNotification(this.logSessionResultMessageName, params) this.sessionManager.clear()