Skip to content

Commit f0b3045

Browse files
committed
fix: emit more error metrics
1 parent def522d commit f0b3045

File tree

3 files changed

+35
-18
lines changed

3 files changed

+35
-18
lines changed

server/aws-lsp-codewhisperer/src/language-server/agenticChat/agenticChatController.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ import { ChatSessionManagementService } from '../chat/chatSessionManagementServi
7373
import { ChatTelemetryController } from '../chat/telemetry/chatTelemetryController'
7474
import { QuickAction } from '../chat/quickActions'
7575
import { Metric } from '../../shared/telemetry/metric'
76-
import { getErrorMessage, getHttpStatusCode, isAwsError, isNullish, isObject } from '../../shared/utils'
76+
import { getErrorMessage, getHttpStatusCode, getRequestID, isAwsError, isNullish, isObject } from '../../shared/utils'
7777
import { HELP_MESSAGE, loadingMessage } from '../chat/constants'
7878
import { TelemetryService } from '../../shared/telemetry/telemetryService'
7979
import {
@@ -120,7 +120,7 @@ import {
120120
responseTimeoutPartialMsg,
121121
} from './constants'
122122
import { URI } from 'vscode-uri'
123-
import { AgenticChatError, customerFacingErrorCodes } from './errors'
123+
import { AgenticChatError, customerFacingErrorCodes, unactionableErrorCodes } from './errors'
124124

125125
type ChatHandlers = Omit<
126126
LspHandlers<Chat>,
@@ -1548,22 +1548,22 @@ export class AgenticChatController implements ChatHandlers {
15481548
tabId: string,
15491549
metric: Metric<CombinedConversationEvent>
15501550
): ChatResult | ResponseError<ChatResult> {
1551-
let errorMessage: string | undefined
1552-
let requestID: string | undefined
1553-
if (isAwsError(err) || (isObject(err) && typeof getHttpStatusCode(err) === 'number')) {
1554-
if (err instanceof CodeWhispererStreamingServiceException) {
1555-
errorMessage = err.message
1556-
requestID = err.$metadata.requestId
1557-
} else if (err?.cause?.message) {
1558-
errorMessage = err?.cause?.message
1559-
requestID = err.cause?.$metadata.requestId
1560-
} else if (err instanceof Error || err?.message) {
1561-
errorMessage = err.message
1562-
}
1551+
const errorMessage = getErrorMessage(err)
1552+
const requestID = getRequestID(err)
1553+
metric.setDimension('cwsprChatResponseCode', getHttpStatusCode(err) ?? 0)
1554+
metric.setDimension('languageServerVersion', this.#features.runtime.serverInfo.version)
15631555

1564-
metric.setDimension('cwsprChatResponseCode', getHttpStatusCode(err) ?? 0)
1565-
metric.setDimension('languageServerVersion', this.#features.runtime.serverInfo.version)
1566-
this.#telemetryController.emitMessageResponseError(tabId, metric.metric, requestID, errorMessage)
1556+
// use custom error message for unactionable errors (user-dependent errors like PromptCharacterLimit)
1557+
if (err.code && err.code in unactionableErrorCodes) {
1558+
const customErrMessage = unactionableErrorCodes[err.code as keyof typeof unactionableErrorCodes]
1559+
this.#telemetryController.emitMessageResponseError(tabId, metric.metric, requestID, customErrMessage)
1560+
} else {
1561+
this.#telemetryController.emitMessageResponseError(
1562+
tabId,
1563+
metric.metric,
1564+
requestID,
1565+
errorMessage ?? genericErrorMsg
1566+
)
15671567
}
15681568

15691569
let authFollowType: ReturnType<typeof getAuthFollowUpType> = undefined

server/aws-lsp-codewhisperer/src/language-server/agenticChat/errors.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ export const customerFacingErrorCodes: AgenticChatErrorCode[] = [
1515
'InputTooLong',
1616
'PromptCharacterLimit',
1717
]
18+
19+
export const unactionableErrorCodes: Partial<Record<AgenticChatErrorCode, string>> = {
20+
PromptCharacterLimit: 'User input message contains too many characters',
21+
}
22+
1823
export class AgenticChatError extends Error {
1924
constructor(
2025
message: string,

server/aws-lsp-codewhisperer/src/shared/utils.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,12 +214,24 @@ export function parseJson(jsonString: string) {
214214
}
215215

216216
export function getErrorMessage(error: any): string {
217-
if (error instanceof Error) {
217+
if (error?.cause?.message) {
218+
return error?.cause?.message
219+
} else if (error instanceof Error) {
218220
return error.message
219221
}
220222
return String(error)
221223
}
222224

225+
export function getRequestID(error: any): string {
226+
let requestID: string | undefined
227+
if (hasCause(error) && error.cause.$metadata?.requestId) {
228+
requestID = error.cause.$metadata.requestId
229+
} else if (error instanceof CodeWhispererStreamingServiceException) {
230+
requestID = error.$metadata.requestId
231+
}
232+
return requestID ?? ''
233+
}
234+
223235
export function getBearerTokenFromProvider(credentialsProvider: CredentialsProvider) {
224236
if (!credentialsProvider.hasCredentials('bearer')) {
225237
throw new Error(MISSING_BEARER_TOKEN_ERROR)

0 commit comments

Comments
 (0)