Skip to content

Commit 467e33b

Browse files
authored
feat(amazonq): support pagination for inline suggestions (#831)
1 parent ab26caf commit 467e33b

File tree

6 files changed

+339
-205
lines changed

6 files changed

+339
-205
lines changed

app/aws-lsp-antlr4-runtimes/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"webpack": "webpack"
1313
},
1414
"dependencies": {
15-
"@aws/language-server-runtimes": "^0.2.40",
15+
"@aws/language-server-runtimes": "^0.2.44",
1616
"@aws/lsp-antlr4": "*",
1717
"antlr4-c3": "^3.4.1",
1818
"antlr4ng": "^3.0.4"

package-lock.json

+14-14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/aws-lsp-codewhisperer/src/language-server/codeWhispererServer.test.ts

+59-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
import { CodeWhispererSession, SessionData, SessionManager } from './session/sessionManager'
2121
import {
2222
EMPTY_RESULT,
23+
EXPECTED_NEXT_TOKEN,
2324
EXPECTED_REFERENCE,
2425
EXPECTED_RESPONSE_CONTEXT,
2526
EXPECTED_RESULT,
@@ -31,6 +32,7 @@ import {
3132
HELLO_WORLD_IN_CSHARP,
3233
HELLO_WORLD_LINE,
3334
HELLO_WORLD_WITH_WINDOWS_ENDING,
35+
SAMPLE_SESSION_DATA,
3436
SINGLE_LINE_FILE_CUTOFF_INDEX,
3537
SOME_CLOSED_FILE,
3638
SOME_FILE,
@@ -334,6 +336,7 @@ describe('CodeWhisperer Server', () => {
334336
references: undefined,
335337
},
336338
],
339+
partialResultToken: undefined,
337340
}
338341

339342
const result = await features.doInlineCompletionWithReferences(
@@ -414,6 +417,7 @@ describe('CodeWhisperer Server', () => {
414417
references: undefined,
415418
},
416419
],
420+
partialResultToken: undefined,
417421
}
418422

419423
const result = await features.doInlineCompletionWithReferences(
@@ -446,6 +450,7 @@ describe('CodeWhisperer Server', () => {
446450
references: undefined,
447451
},
448452
],
453+
partialResultToken: undefined,
449454
}
450455

451456
const result = await features.doInlineCompletionWithReferences(
@@ -476,6 +481,57 @@ describe('CodeWhisperer Server', () => {
476481
assert.deepEqual(result, EMPTY_RESULT)
477482
})
478483

484+
// pagination
485+
it('returns next token from service', async () => {
486+
service.generateSuggestions.returns(
487+
Promise.resolve({
488+
suggestions: EXPECTED_SUGGESTION,
489+
responseContext: {
490+
...EXPECTED_RESPONSE_CONTEXT,
491+
nextToken: EXPECTED_NEXT_TOKEN,
492+
},
493+
})
494+
)
495+
496+
const result = await features.doInlineCompletionWithReferences(
497+
{
498+
textDocument: { uri: SOME_FILE.uri },
499+
position: { line: 0, character: 0 },
500+
context: { triggerKind: InlineCompletionTriggerKind.Invoked },
501+
},
502+
CancellationToken.None
503+
)
504+
505+
assert.deepEqual(result, { ...EXPECTED_RESULT, partialResultToken: EXPECTED_NEXT_TOKEN })
506+
})
507+
508+
it('handles partialResultToken in request', async () => {
509+
const manager = SessionManager.getInstance()
510+
manager.createSession(SAMPLE_SESSION_DATA)
511+
await features.doInlineCompletionWithReferences(
512+
{
513+
textDocument: { uri: SOME_FILE.uri },
514+
position: { line: 0, character: 0 },
515+
context: { triggerKind: InlineCompletionTriggerKind.Invoked },
516+
partialResultToken: EXPECTED_NEXT_TOKEN,
517+
},
518+
CancellationToken.None
519+
)
520+
521+
const expectedGenerateSuggestionsRequest = {
522+
fileContext: {
523+
filename: SOME_FILE.uri,
524+
programmingLanguage: { languageName: 'csharp' },
525+
leftFileContent: '',
526+
rightFileContent: HELLO_WORLD_IN_CSHARP,
527+
},
528+
maxResults: 5,
529+
nextToken: EXPECTED_NEXT_TOKEN,
530+
}
531+
532+
sinon.assert.calledOnceWithExactly(service.generateSuggestions, expectedGenerateSuggestionsRequest)
533+
})
534+
479535
describe('Supplemental Context', () => {
480536
it('should send supplemental context when using token authentication', async () => {
481537
const test_service = sinon.createStubInstance(
@@ -787,6 +843,7 @@ describe('CodeWhisperer Server', () => {
787843
],
788844
},
789845
],
846+
partialResultToken: undefined,
790847
}
791848
service.generateSuggestions.returns(
792849
Promise.resolve({
@@ -846,6 +903,7 @@ describe('CodeWhisperer Server', () => {
846903
references: undefined,
847904
},
848905
],
906+
partialResultToken: undefined,
849907
}
850908
service.generateSuggestions.returns(
851909
Promise.resolve({
@@ -1703,7 +1761,7 @@ describe('CodeWhisperer Server', () => {
17031761
const EXPECTED_COMPLETION_RESPONSES = [
17041762
{ sessionId: '', items: [] },
17051763
{ sessionId: '', items: [] },
1706-
{ sessionId: SESSION_IDS_LOG[2], items: EXPECTED_RESULT.items }, // Last session wins
1764+
{ sessionId: SESSION_IDS_LOG[2], items: EXPECTED_RESULT.items, partialResultToken: undefined }, // Last session wins
17071765
]
17081766
// Only last request must return completion items
17091767
assert.deepEqual(getCompletionsResponses, EXPECTED_COMPLETION_RESPONSES)

0 commit comments

Comments
 (0)