mapStatusCode static method
Map HTTP status code to appropriate LLM error
Implementation
static LLMError mapStatusCode(int statusCode, String message,
[Map<String, dynamic>? responseData]) {
// Check for specific error types based on response data
if (responseData != null) {
final specificError = _mapSpecificError(message, responseData);
if (specificError != null) return specificError;
}
switch (statusCode) {
case 400:
return InvalidRequestError(message);
case 401:
return AuthError(message);
case 402:
// DeepSeek API specific: Insufficient Balance
return QuotaExceededError(message, quotaType: 'credits');
case 403:
return AuthError('Forbidden: $message');
case 404:
final model = responseData?['model'] as String?;
return ModelNotAvailableError(model ?? 'unknown');
case 422:
return InvalidRequestError('Validation error: $message');
case 429:
final retryAfter = responseData?['retry_after'] as int?;
final remaining = responseData?['remaining_requests'] as int?;
return RateLimitError(
message,
retryAfter: retryAfter != null ? Duration(seconds: retryAfter) : null,
remainingRequests: remaining,
);
case 500:
return ServerError(message, statusCode: statusCode);
case 502:
return ServerError('Bad Gateway: $message', statusCode: statusCode);
case 503:
return ServerError('Service Unavailable: $message',
statusCode: statusCode);
case 504:
return ServerError('Gateway Timeout: $message', statusCode: statusCode);
default:
if (statusCode >= 400 && statusCode < 500) {
return HttpError(message);
} else if (statusCode >= 500) {
return ServerError(message, statusCode: statusCode);
} else {
return HttpError(message);
}
}
}