use std::time::Duration;
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum ModelError {
#[error("rate limit exceeded{}", .retry_after.map(|d| format!(", retry after {d:?}")).unwrap_or_default())]
RateLimit {
retry_after: Option<Duration>,
},
#[error("authentication failed: {message}")]
AuthenticationFailed {
message: String,
},
#[error("invalid request: {message}")]
InvalidRequest {
message: String,
},
#[error("content filtered: {message}")]
ContentFiltered {
message: String,
},
#[error("request timed out")]
Timeout,
#[error("connection error: {source}")]
Connection {
source: Box<dyn std::error::Error + Send + Sync>,
},
#[error("model error: {message}")]
Other {
message: String,
},
}