Skip to content

Commit 4674d76

Browse files
committed
feat(amazonq): passing partialResultToken for the next trigger if user accepts EDITS suggestion
1 parent bea4abc commit 4674d76

File tree

3 files changed

+39
-14
lines changed

3 files changed

+39
-14
lines changed

packages/amazonq/src/app/inline/EditRendering/displayImage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ export async function displaySvgDecoration(
326326
selectedCompletionInfo: undefined,
327327
},
328328
new vscode.CancellationTokenSource().token,
329-
{ emitTelemetry: false, showUi: false }
329+
{ emitTelemetry: false, showUi: false, editsStreakToken: session.editsStreakPartialResultToken }
330330
)
331331
}
332332
},

packages/amazonq/src/app/inline/recommendationService.ts

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { globals, getLogger } from 'aws-core-vscode/shared'
2020
export interface GetAllRecommendationsOptions {
2121
emitTelemetry?: boolean
2222
showUi?: boolean
23+
editsStreakToken?: number | string
2324
}
2425

2526
export class RecommendationService {
@@ -47,13 +48,16 @@ export class RecommendationService {
4748
// Record that a regular request is being made
4849
this.cursorUpdateRecorder?.recordCompletionRequest()
4950

50-
const request: InlineCompletionWithReferencesParams = {
51+
let request: InlineCompletionWithReferencesParams = {
5152
textDocument: {
5253
uri: document.uri.toString(),
5354
},
5455
position,
5556
context,
5657
}
58+
if (options.editsStreakToken) {
59+
request = { ...request, partialResultToken: options.editsStreakToken }
60+
}
5761
const requestStartTime = globals.clock.Date.now()
5862
const statusBar = CodeWhispererStatusBarManager.instance
5963

@@ -112,19 +116,31 @@ export class RecommendationService {
112116
firstCompletionDisplayLatency
113117
)
114118

115-
// If there are more results to fetch, handle them in the background
116-
try {
117-
while (result.partialResultToken) {
118-
const paginatedRequest = { ...request, partialResultToken: result.partialResultToken }
119-
result = await languageClient.sendRequest(
120-
inlineCompletionWithReferencesRequestType.method,
121-
paginatedRequest,
122-
token
123-
)
124-
this.sessionManager.updateSessionSuggestions(result.items)
119+
const isInlineEdit = result.items.some((item) => item.isInlineEdit)
120+
if (!isInlineEdit) {
121+
// If the suggestion is COMPLETIONS and there are more results to fetch, handle them in the background
122+
getLogger().info(
123+
'Suggestion type is COMPLETIONS. Start fetching for more items if partialResultToken exists.'
124+
)
125+
try {
126+
while (result.partialResultToken) {
127+
const paginatedRequest = { ...request, partialResultToken: result.partialResultToken }
128+
result = await languageClient.sendRequest(
129+
inlineCompletionWithReferencesRequestType.method,
130+
paginatedRequest,
131+
token
132+
)
133+
this.sessionManager.updateSessionSuggestions(result.items)
134+
}
135+
} catch (error) {
136+
languageClient.warn(`Error when getting suggestions: ${error}`)
125137
}
126-
} catch (error) {
127-
languageClient.warn(`Error when getting suggestions: ${error}`)
138+
} else {
139+
// Skip fetching for more items if the suggesion is EDITS. If it is EDITS suggestion, only fetching for more
140+
// suggestions when the user start to accept a suggesion.
141+
// Save editsStreakPartialResultToken for the next EDITS suggestion trigger if user accepts.
142+
getLogger().info('Suggestion type is EDITS. Skip fetching for more items.')
143+
this.sessionManager.updateActiveEditsStreakToken(result.partialResultToken)
128144
}
129145

130146
// Close session and finalize telemetry regardless of pagination path

packages/amazonq/src/app/inline/sessionManager.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export interface CodeWhispererSession {
1414
requestStartTime: number
1515
firstCompletionDisplayLatency?: number
1616
startPosition: vscode.Position
17+
// partialResultToken for the next trigger if user accepts an EDITS suggestion
18+
editsStreakPartialResultToken?: number | string
1719
}
1820

1921
export class SessionManager {
@@ -69,6 +71,13 @@ export class SessionManager {
6971
this._acceptedSuggestionCount += 1
7072
}
7173

74+
public updateActiveEditsStreakToken(partialResultToken?: number | string) {
75+
if (!this.activeSession || !partialResultToken) {
76+
return
77+
}
78+
this.activeSession.editsStreakPartialResultToken = partialResultToken
79+
}
80+
7281
public clear() {
7382
this.activeSession = undefined
7483
}

0 commit comments

Comments
 (0)