( error: unknown, selectedModel: any, )
| 36 | } |
| 37 | |
| 38 | export function analyzeError( |
| 39 | error: unknown, |
| 40 | selectedModel: any, |
| 41 | ): ErrorAnalysis { |
| 42 | const errorMessage = (error as any)?.message; |
| 43 | const parsedError = parseErrorMessage( |
| 44 | typeof errorMessage === "string" ? errorMessage : "", |
| 45 | ); |
| 46 | |
| 47 | // Collect model information to display useful error info |
| 48 | let modelTitle = "Chat model"; |
| 49 | let providerName = "the model provider"; |
| 50 | let apiKeyUrl: string | undefined = undefined; |
| 51 | |
| 52 | if (selectedModel) { |
| 53 | modelTitle = selectedModel.title; |
| 54 | providerName = selectedModel.underlyingProviderName; |
| 55 | |
| 56 | // If there's a matching provider from add model form provider info |
| 57 | // We can get more info |
| 58 | const foundProvider = Object.values(providers).find( |
| 59 | (p) => p?.provider === selectedModel.underlyingProviderName, |
| 60 | ); |
| 61 | if (foundProvider) { |
| 62 | providerName = foundProvider.title; |
| 63 | if (foundProvider.apiKeyUrl) { |
| 64 | apiKeyUrl = foundProvider.apiKeyUrl; |
| 65 | } |
| 66 | } |
| 67 | } |
| 68 | |
| 69 | let message: undefined | string = undefined; |
| 70 | let statusCode: undefined | number = undefined; |
| 71 | |
| 72 | // Attempt to get error message and status code from error |
| 73 | if ( |
| 74 | error && |
| 75 | (error instanceof Error || typeof error === "object") && |
| 76 | "message" in error && |
| 77 | typeof error["message"] === "string" |
| 78 | ) { |
| 79 | message = error["message"]; |
| 80 | const parts = message?.split(" ") ?? []; |
| 81 | |
| 82 | // Handle single word case (like "404") |
| 83 | if (parts.length === 1) { |
| 84 | const trimmed = parts[0].trim(); |
| 85 | if (trimmed !== "") { |
| 86 | const code = Number(trimmed); |
| 87 | if (!Number.isNaN(code)) { |
| 88 | statusCode = code; |
| 89 | } |
| 90 | } |
| 91 | } else if (parts.length > 1) { |
| 92 | const status = parts[0] === "HTTP" ? parts[1] : parts[0]; |
| 93 | if (status) { |
| 94 | const code = Number(status); |
| 95 | if (!Number.isNaN(code)) { |
no test coverage detected