Handle retry for API rate limit errors

This commit is contained in:
Alexey Haidamaka 2025-09-04 11:10:54 +02:00
parent 8422d07a05
commit c06d01f61e

View File

@ -261,6 +261,8 @@ class AIEnhancementService: ObservableObject {
let filteredText = AIEnhancementOutputFilter.filter(enhancedText.trimmingCharacters(in: .whitespacesAndNewlines))
return filteredText
} else if httpResponse.statusCode == 429 {
throw EnhancementError.rateLimitExceeded
} else if (500...599).contains(httpResponse.statusCode) {
throw EnhancementError.serverError
} else {
@ -316,6 +318,8 @@ class AIEnhancementService: ObservableObject {
let filteredText = AIEnhancementOutputFilter.filter(enhancedText.trimmingCharacters(in: .whitespacesAndNewlines))
return filteredText
} else if httpResponse.statusCode == 429 {
throw EnhancementError.rateLimitExceeded
} else if (500...599).contains(httpResponse.statusCode) {
throw EnhancementError.serverError
} else {
@ -342,7 +346,7 @@ class AIEnhancementService: ObservableObject {
return try await makeRequest(text: text, mode: mode)
} catch let error as EnhancementError {
switch error {
case .networkError, .serverError:
case .networkError, .serverError, .rateLimitExceeded:
retries += 1
if retries < maxRetries {
logger.warning("Request failed, retrying in \(currentDelay)s... (Attempt \(retries)/\(maxRetries))")
@ -458,6 +462,7 @@ enum EnhancementError: Error {
case enhancementFailed
case networkError
case serverError
case rateLimitExceeded
case customError(String)
}
@ -474,6 +479,8 @@ extension EnhancementError: LocalizedError {
return "Network connection failed. Check your internet."
case .serverError:
return "The AI provider's server encountered an error. Please try again later."
case .rateLimitExceeded:
return "Rate limit exceeded. Please try again later."
case .customError(let message):
return message
}