Skip to content

Commit 0ecf43a

Browse files
committed
fix(amazonq): fix increased latency due to inline completion API is called in a blocking manner
1 parent eb3ceee commit 0ecf43a

File tree

1 file changed

+32
-13
lines changed

1 file changed

+32
-13
lines changed

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

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export class RecommendationService {
8080
nextToken: request.partialResultToken,
8181
},
8282
})
83-
let result: InlineCompletionListWithReferences = await languageClient.sendRequest(
83+
const result: InlineCompletionListWithReferences = await languageClient.sendRequest(
8484
inlineCompletionWithReferencesRequestType.method,
8585
request,
8686
token
@@ -120,18 +120,10 @@ export class RecommendationService {
120120
getLogger().info(
121121
'Suggestion type is COMPLETIONS. Start fetching for more items if partialResultToken exists.'
122122
)
123-
try {
124-
while (result.partialResultToken) {
125-
const paginatedRequest = { ...request, partialResultToken: result.partialResultToken }
126-
result = await languageClient.sendRequest(
127-
inlineCompletionWithReferencesRequestType.method,
128-
paginatedRequest,
129-
token
130-
)
131-
this.sessionManager.updateSessionSuggestions(result.items)
132-
}
133-
} catch (error) {
134-
languageClient.warn(`Error when getting suggestions: ${error}`)
123+
if (result.partialResultToken) {
124+
this.processRemainingRequests(languageClient, request, result, token).catch((error) => {
125+
languageClient.warn(`Error when getting suggestions: ${error}`)
126+
})
135127
}
136128
} else {
137129
// Skip fetching for more items if the suggesion is EDITS. If it is EDITS suggestion, only fetching for more
@@ -167,4 +159,31 @@ export class RecommendationService {
167159
}
168160
}
169161
}
162+
163+
private async processRemainingRequests(
164+
languageClient: LanguageClient,
165+
initialRequest: InlineCompletionWithReferencesParams,
166+
firstResult: InlineCompletionListWithReferences,
167+
token: CancellationToken
168+
): Promise<void> {
169+
let nextToken = firstResult.partialResultToken
170+
while (nextToken) {
171+
const request = { ...initialRequest, partialResultToken: nextToken }
172+
173+
const result: InlineCompletionListWithReferences = await languageClient.sendRequest(
174+
inlineCompletionWithReferencesRequestType.method,
175+
request,
176+
token
177+
)
178+
179+
this.sessionManager.updateSessionSuggestions(result.items)
180+
nextToken = result.partialResultToken
181+
}
182+
183+
this.sessionManager.closeSession()
184+
185+
// All pagination requests completed
186+
TelemetryHelper.instance.setAllPaginationEndTime()
187+
TelemetryHelper.instance.tryRecordClientComponentLatency()
188+
}
170189
}

0 commit comments

Comments
 (0)