Skip to content

Commit 223df45

Browse files
committed
feat: passing partialResultToken for the next trigger if user accepts EDITS suggestion
1 parent bea4abc commit 223df45

File tree

4 files changed

+40
-16
lines changed

4 files changed

+40
-16
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,8 @@ export async function displaySvgDecoration(
326326
selectedCompletionInfo: undefined,
327327
},
328328
new vscode.CancellationTokenSource().token,
329-
{ emitTelemetry: false, showUi: false }
329+
{ emitTelemetry: false, showUi: false },
330+
session.editsStreakPartialResultToken
330331
)
331332
}
332333
},

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,8 @@ export class AmazonQInlineCompletionItemProvider implements InlineCompletionItem
221221
position: Position,
222222
context: InlineCompletionContext,
223223
token: CancellationToken,
224-
getAllRecommendationsOptions?: GetAllRecommendationsOptions
224+
getAllRecommendationsOptions?: GetAllRecommendationsOptions,
225+
editsStreakPartialResultToken?: number | string
225226
): Promise<InlineCompletionItem[]> {
226227
getLogger().info('_provideInlineCompletionItems called with: %O', {
227228
documentUri: document.uri.toString(),
@@ -323,7 +324,8 @@ export class AmazonQInlineCompletionItemProvider implements InlineCompletionItem
323324
position,
324325
context,
325326
token,
326-
getAllRecommendationsOptions
327+
getAllRecommendationsOptions,
328+
editsStreakPartialResultToken
327329
)
328330
// get active item from session for displaying
329331
const items = this.sessionManager.getActiveRecommendation()

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

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,22 @@ export class RecommendationService {
4242
position: Position,
4343
context: InlineCompletionContext,
4444
token: CancellationToken,
45-
options: GetAllRecommendationsOptions = { emitTelemetry: true, showUi: true }
45+
options: GetAllRecommendationsOptions = { emitTelemetry: true, showUi: true },
46+
editsStreakPartialResultToken?: number | string
4647
) {
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 (editsStreakPartialResultToken) {
59+
request = { ...request, partialResultToken: editsStreakPartialResultToken }
60+
}
5761
const requestStartTime = globals.clock.Date.now()
5862
const statusBar = CodeWhispererStatusBarManager.instance
5963

@@ -113,18 +117,26 @@ export class RecommendationService {
113117
)
114118

115119
// 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)
120+
const isInlineEdit = result.items.find((item) => item.isInlineEdit) ? true : false
121+
// Skip fetching for more items if the suggesion is EDITS. If it is EDITS suggestion, only fetching for more
122+
// suggestions when the user start to accept a suggesion.
123+
if (!isInlineEdit) {
124+
try {
125+
while (result.partialResultToken) {
126+
const paginatedRequest = { ...request, partialResultToken: result.partialResultToken }
127+
result = await languageClient.sendRequest(
128+
inlineCompletionWithReferencesRequestType.method,
129+
paginatedRequest,
130+
token
131+
)
132+
this.sessionManager.updateSessionSuggestions(result.items)
133+
}
134+
} catch (error) {
135+
languageClient.warn(`Error when getting suggestions: ${error}`)
125136
}
126-
} catch (error) {
127-
languageClient.warn(`Error when getting suggestions: ${error}`)
137+
} else {
138+
// save editsStreakPartialResultToken for the next EDITS suggestion trigger if user accepts
139+
this.sessionManager.updateActiveEditsStreakPartialResultToken(result.partialResultToken)
128140
}
129141

130142
// 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 updateActiveEditsStreakPartialResultToken(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)