(error: unknown)
| 387 | * @returns The best available error message, or undefined if not extractable |
| 388 | */ |
| 389 | export function getErrorMessage(error: unknown): string | undefined { |
| 390 | let message: string | undefined |
| 391 | |
| 392 | if (isOpenAISdkError(error)) { |
| 393 | // Prioritize nested metadata which may contain upstream provider details |
| 394 | message = error.error?.metadata?.raw || error.error?.message || error.message |
| 395 | } else if (error instanceof Error) { |
| 396 | // Handle standard Error objects (including ApiProviderError) |
| 397 | message = error.message |
| 398 | } else if (typeof error === "object" && error !== null && "message" in error) { |
| 399 | // Handle plain objects with a message property |
| 400 | const msgValue = (error as { message: unknown }).message |
| 401 | if (typeof msgValue === "string") { |
| 402 | message = msgValue |
| 403 | } |
| 404 | } |
| 405 | |
| 406 | if (!message) { |
| 407 | return undefined |
| 408 | } |
| 409 | |
| 410 | // If the message contains JSON, try to extract the message from it |
| 411 | const extractedMessage = extractMessageFromJsonPayload(message) |
| 412 | if (extractedMessage) { |
| 413 | return extractedMessage |
| 414 | } |
| 415 | |
| 416 | return message |
| 417 | } |
| 418 | |
| 419 | /** |
| 420 | * Helper to check if an API error should be reported to telemetry. |
no test coverage detected