( error: unknown, provider: string, model: string )
| 124 | * @returns A typed Error instance |
| 125 | */ |
| 126 | export function normalizeEngineError( |
| 127 | error: unknown, |
| 128 | provider: string, |
| 129 | model: string |
| 130 | ): Error { |
| 131 | // If it's already one of our custom errors, return as-is |
| 132 | if ( |
| 133 | error instanceof ModelNotFoundError || |
| 134 | error instanceof AuthenticationError || |
| 135 | error instanceof InsufficientCreditsError || |
| 136 | error instanceof RateLimitError || |
| 137 | error instanceof ServiceUnavailableError |
| 138 | ) { |
| 139 | return error; |
| 140 | } |
| 141 | |
| 142 | const statusCode = getStatusCode(error); |
| 143 | const message = extractErrorMessage(error); |
| 144 | |
| 145 | // Handle based on HTTP status codes |
| 146 | switch (statusCode) { |
| 147 | case 401: |
| 148 | return new AuthenticationError(provider, message); |
| 149 | |
| 150 | case 402: |
| 151 | return new InsufficientCreditsError(provider, message); |
| 152 | |
| 153 | case 404: |
| 154 | // Could be model not found or endpoint not found |
| 155 | if (isModelNotFoundMessage(message)) { |
| 156 | return new ModelNotFoundError(model, provider, 404); |
| 157 | } |
| 158 | // Return generic error for other 404s |
| 159 | return error instanceof Error ? error : new Error(message); |
| 160 | |
| 161 | case 429: |
| 162 | const retryAfter = getRetryAfter(error); |
| 163 | return new RateLimitError(provider, retryAfter, message); |
| 164 | |
| 165 | case 500: |
| 166 | case 502: |
| 167 | case 503: |
| 168 | case 504: |
| 169 | return new ServiceUnavailableError(provider, statusCode, message); |
| 170 | } |
| 171 | |
| 172 | // Handle based on error message content |
| 173 | if (statusCode === 400) { |
| 174 | return error instanceof Error ? error : new Error(message); |
| 175 | } |
| 176 | |
| 177 | if (isModelNotFoundMessage(message)) { |
| 178 | return new ModelNotFoundError(model, provider, 404); |
| 179 | } |
| 180 | |
| 181 | if (isInsufficientCreditsMessage(message)) { |
| 182 | return new InsufficientCreditsError(provider, message); |
| 183 | } |
no test coverage detected
searching dependent graphs…