@@ -20,6 +20,7 @@ import { globals, getLogger } from 'aws-core-vscode/shared'
20
20
export interface GetAllRecommendationsOptions {
21
21
emitTelemetry ?: boolean
22
22
showUi ?: boolean
23
+ editsStreakToken ?: number | string
23
24
}
24
25
25
26
export class RecommendationService {
@@ -47,13 +48,16 @@ export class RecommendationService {
47
48
// Record that a regular request is being made
48
49
this . cursorUpdateRecorder ?. recordCompletionRequest ( )
49
50
50
- const request : InlineCompletionWithReferencesParams = {
51
+ let request : InlineCompletionWithReferencesParams = {
51
52
textDocument : {
52
53
uri : document . uri . toString ( ) ,
53
54
} ,
54
55
position,
55
56
context,
56
57
}
58
+ if ( options . editsStreakToken ) {
59
+ request = { ...request , partialResultToken : options . editsStreakToken }
60
+ }
57
61
const requestStartTime = globals . clock . Date . now ( )
58
62
const statusBar = CodeWhispererStatusBarManager . instance
59
63
@@ -112,19 +116,31 @@ export class RecommendationService {
112
116
firstCompletionDisplayLatency
113
117
)
114
118
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 } ` )
125
137
}
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 )
128
144
}
129
145
130
146
// Close session and finalize telemetry regardless of pagination path
0 commit comments