mapStatusCode static method

LLMError mapStatusCode(
  1. int statusCode,
  2. String message, [
  3. Map<String, dynamic>? responseData
])

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);
      }
  }
}