From 3f678dcd0e71aeba5f0a729bb7c21b112619a79b Mon Sep 17 00:00:00 2001 From: Will Lo Date: Wed, 6 Aug 2025 02:32:15 -0700 Subject: [PATCH 1/4] chore: add generate completion log --- .../src/shared/codeWhispererService.ts | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts b/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts index d1de3494c4..cf380b54a4 100644 --- a/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts +++ b/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts @@ -421,27 +421,41 @@ export class CodeWhispererServiceToken extends CodeWhispererServiceBase { // add cancellation check // add error check if (this.customizationArn) request.customizationArn = this.customizationArn - const response = await this.client.generateCompletions(this.withProfileArn(request)).promise() + const beforeApiCall = performance.now() this.logging.info( - `GenerateCompletion response: + `GenerateCompletion request: "endpoint": ${this.codeWhispererEndpoint}, - "requestId": ${response.$response.requestId}, - "responseCompletionCount": ${response.completions?.length ?? 0}, - "responsePredictionCount": ${response.predictions?.length ?? 0}, - "suggestionType": ${request.predictionTypes?.toString() ?? ''}, + "predictionType": ${request.predictionTypes?.toString() ?? ''}, "filename": ${request.fileContext.filename}, "language": ${request.fileContext.programmingLanguage.languageName}, - "supplementalContextLength": ${request.supplementalContexts?.length ?? 0}, - "request.nextToken": ${request.nextToken}, - "response.nextToken": ${response.nextToken}` + "supplementalContextCount": ${request.supplementalContexts?.length ?? 0}, + "request.nextToken": ${request.nextToken}` ) + const response = await this.client.generateCompletions(this.withProfileArn(request)).promise() const responseContext = { requestId: response?.$response?.requestId, codewhispererSessionId: response?.$response?.httpResponse?.headers['x-amzn-sessionid'], nextToken: response.nextToken, } - return this.mapCodeWhispererApiResponseToSuggestion(response, responseContext) + + const r = this.mapCodeWhispererApiResponseToSuggestion(response, responseContext) + const firstSuggestionLogstr = r.suggestions.length > 0 ? `\n${r.suggestions[0].content}` : 'No suggestion' + + this.logging.info( + `GenerateCompletion response: + "endpoint": ${this.codeWhispererEndpoint}, + "requestId": ${responseContext.requestId}, + "sessionId": ${responseContext.codewhispererSessionId}, + "responseCompletionCount": ${response.completions?.length ?? 0}, + "responsePredictionCount": ${response.predictions?.length ?? 0}, + "predictionType": ${request.predictionTypes?.toString() ?? ''}, + "latency": ${performance.now() - beforeApiCall}, + "filename": ${request.fileContext.filename}, + "response.nextToken": ${response.nextToken} + "firstSuggestion": ${firstSuggestionLogstr}` + ) + return r } private mapCodeWhispererApiResponseToSuggestion( From 63953e2d1042ef621d23e2ece646ec63c5edb71a Mon Sep 17 00:00:00 2001 From: Will Lo Date: Wed, 6 Aug 2025 02:48:20 -0700 Subject: [PATCH 2/4] chore: add generate completion log --- .../inline-completion/codeWhispererServer.ts | 5 ----- .../inline-completion/editCompletionHandler.ts | 6 +++--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.ts b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.ts index 1e6d9a09f2..c8567b8ea5 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.ts @@ -846,11 +846,6 @@ export const CodewhispererServerFactory = // Process document changes with RecentEditTracker. if (editsEnabled && recentEditTracker) { - logging.log( - `[SERVER] Processing document change with RecentEditTracker: ${p.textDocument.uri}, version: ${textDocument.version}` - ) - logging.log(`[SERVER] Change details: ${p.contentChanges.length} changes`) - await recentEditTracker.handleDocumentChange({ uri: p.textDocument.uri, languageId: textDocument.languageId, diff --git a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/editCompletionHandler.ts b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/editCompletionHandler.ts index 0e3de82a1d..5b3e7519f4 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/editCompletionHandler.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/editCompletionHandler.ts @@ -156,17 +156,17 @@ export class EditCompletionHandler { if (this.hasDocumentChangedSinceInvocation) { if (attempt < EDIT_STALE_RETRY_COUNT) { this.logging.info( - `Document changed during execution, retrying (attempt ${attempt + 1})` + `EditCompletionHandler - Document changed during execution, retrying (attempt ${attempt + 1})` ) this.hasDocumentChangedSinceInvocation = false const retryResult = await invokeWithRetry(attempt + 1) resolve(retryResult) } else { - this.logging.info('Max retries reached, returning empty result') + this.logging.info('EditCompletionHandler - Max retries reached, returning empty result') resolve(EMPTY_RESULT) } } else { - this.logging.info('No document changes, resolving result') + this.logging.info('EditCompletionHandler - No document changes, resolving result') resolve(result) } } finally { From a94b4cac3021726701d4ecdf8833b1cfdadaeb1d Mon Sep 17 00:00:00 2001 From: Will Lo Date: Wed, 6 Aug 2025 12:03:19 -0700 Subject: [PATCH 3/4] chore: add generate completion log --- .../src/shared/codeWhispererService.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts b/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts index cf380b54a4..adbd878d57 100644 --- a/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts +++ b/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts @@ -422,6 +422,20 @@ export class CodeWhispererServiceToken extends CodeWhispererServiceBase { // add error check if (this.customizationArn) request.customizationArn = this.customizationArn const beforeApiCall = performance.now() + let recentEditsLogStr = '' + const recentEdits = request.supplementalContexts?.filter(it => it.type === 'PreviousEditorState') + if (recentEdits) { + if (recentEdits.length === 0) { + recentEditsLogStr += `No recent edits` + } else { + recentEditsLogStr += '\n' + for (let i = 0; i < recentEdits.length; i++) { + const e = recentEdits[i] + recentEditsLogStr += `[recentEdits ${i}th]:\n` + recentEditsLogStr += `${e.content}\n` + } + } + } this.logging.info( `GenerateCompletion request: "endpoint": ${this.codeWhispererEndpoint}, @@ -429,8 +443,10 @@ export class CodeWhispererServiceToken extends CodeWhispererServiceBase { "filename": ${request.fileContext.filename}, "language": ${request.fileContext.programmingLanguage.languageName}, "supplementalContextCount": ${request.supplementalContexts?.length ?? 0}, - "request.nextToken": ${request.nextToken}` + "request.nextToken": ${request.nextToken}, + "recentEdits": ${recentEditsLogStr}` ) + const response = await this.client.generateCompletions(this.withProfileArn(request)).promise() const responseContext = { From 9778c7f445d23bb3d8c545215feaf5b064728759 Mon Sep 17 00:00:00 2001 From: Will Lo Date: Wed, 6 Aug 2025 13:16:21 -0700 Subject: [PATCH 4/4] fix: nit --- server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts b/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts index adbd878d57..32233e1cf8 100644 --- a/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts +++ b/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts @@ -468,7 +468,7 @@ export class CodeWhispererServiceToken extends CodeWhispererServiceBase { "predictionType": ${request.predictionTypes?.toString() ?? ''}, "latency": ${performance.now() - beforeApiCall}, "filename": ${request.fileContext.filename}, - "response.nextToken": ${response.nextToken} + "response.nextToken": ${response.nextToken}, "firstSuggestion": ${firstSuggestionLogstr}` ) return r