Add AI request error states

This commit is contained in:
diyaa
2026-09-15 12:36:41 +02:00
parent f42d782629
commit f199bcf114
3 changed files with 62 additions and 1 deletions
@@ -0,0 +1,46 @@
import Foundation
public enum AIRequestState: Equatable, Sendable {
case idle
case loading
case failed(AIProviderErrorState)
}
public enum AIProviderErrorState: Equatable, Sendable {
case offline
case missingConfiguration
case rateLimited(retryAfter: TimeInterval?)
case unavailable
case invalidResponse
case unsupportedCapability
}
public struct AIProviderErrorPresenter: Sendable {
public init() {}
public func state(for error: Error) -> AIProviderErrorState {
if let urlError = error as? URLError,
urlError.code == .notConnectedToInternet || urlError.code == .networkConnectionLost {
return .offline
}
if let clientError = error as? OpenAIClientError {
switch clientError {
case .missingAPIKey:
return .missingConfiguration
case let .rateLimited(retryAfter):
return .rateLimited(retryAfter: retryAfter)
case .serverError, .unacceptableStatusCode:
return .unavailable
case .invalidResponse:
return .invalidResponse
}
}
if error as? AIServiceCapabilityError != nil {
return .unsupportedCapability
}
return .unavailable
}
}