in packages/core/src/codewhisperer/service/inlineCompletionService.ts [78:165]
async getPaginatedRecommendation(
client: DefaultCodeWhispererClient,
editor: vscode.TextEditor,
triggerType: CodewhispererTriggerType,
config: ConfigurationEntry,
autoTriggerType?: CodewhispererAutomatedTriggerType,
event?: vscode.TextDocumentChangeEvent
): Promise<GetRecommendationsResponse> {
if (vsCodeState.isCodeWhispererEditing || RecommendationHandler.instance.isSuggestionVisible()) {
return {
result: 'Failed',
errorMessage: 'Amazon Q is already running',
recommendationCount: 0,
}
}
// Call report user decisions once to report recommendations leftover from last invocation.
RecommendationHandler.instance.reportUserDecisions(-1)
TelemetryHelper.instance.setInvokeSuggestionStartTime()
ClassifierTrigger.instance.recordClassifierResultForAutoTrigger(editor, autoTriggerType, event)
const triggerChar = event?.contentChanges[0]?.text
if (autoTriggerType === 'SpecialCharacters' && triggerChar) {
TelemetryHelper.instance.setTriggerCharForUserTriggerDecision(triggerChar)
}
const isAutoTrigger = triggerType === 'AutoTrigger'
if (AuthUtil.instance.isConnectionExpired()) {
await AuthUtil.instance.notifyReauthenticate(isAutoTrigger)
return {
result: 'Failed',
errorMessage: 'auth',
recommendationCount: 0,
}
}
await this.setState('loading')
RecommendationHandler.instance.checkAndResetCancellationTokens()
RecommendationHandler.instance.documentUri = editor.document.uri
let response: GetRecommendationsResponse = {
result: 'Failed',
errorMessage: undefined,
recommendationCount: 0,
}
try {
let page = 0
while (page < this.maxPage) {
response = await RecommendationHandler.instance.getRecommendations(
client,
editor,
triggerType,
config,
autoTriggerType,
true,
page
)
if (RecommendationHandler.instance.checkAndResetCancellationTokens()) {
RecommendationHandler.instance.reportUserDecisions(-1)
await vscode.commands.executeCommand('aws.amazonq.refreshStatusBar')
if (triggerType === 'OnDemand' && session.recommendations.length === 0) {
void showTimedMessage(response.errorMessage ? response.errorMessage : noSuggestions, 2000)
}
return {
result: 'Failed',
errorMessage: 'cancelled',
recommendationCount: 0,
}
}
if (!RecommendationHandler.instance.hasNextToken()) {
break
}
page++
}
} catch (error) {
getLogger().error(`Error ${error} in getPaginatedRecommendation`)
}
await vscode.commands.executeCommand('aws.amazonq.refreshStatusBar')
if (triggerType === 'OnDemand' && session.recommendations.length === 0) {
void showTimedMessage(response.errorMessage ? response.errorMessage : noSuggestions, 2000)
}
TelemetryHelper.instance.tryRecordClientComponentLatency()
return {
result: 'Succeeded',
errorMessage: undefined,
recommendationCount: session.recommendations.length,
}
}