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 { diff --git a/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts b/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts index d1de3494c4..32233e1cf8 100644 --- a/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts +++ b/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts @@ -421,27 +421,57 @@ 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() + 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 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}, + "supplementalContextCount": ${request.supplementalContexts?.length ?? 0}, "request.nextToken": ${request.nextToken}, - "response.nextToken": ${response.nextToken}` + "recentEdits": ${recentEditsLogStr}` ) + 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(