use serde_json::Value;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum ModelError {
#[error("message mapping failed: {0}")]
MessageMapping(String),
#[error("response parsing failed: {0}")]
ResponseParsing(String),
#[error("transport failed: {0}")]
Transport(String),
#[error("real model request blocked for {url}")]
RealModelRequestBlocked {
url: String,
},
#[error("provider status {status}: {body}")]
ProviderStatus {
status: u16,
body: Value,
retryable: bool,
},
#[error("retry attempts exhausted after {attempts} attempts: {source}")]
RetryExhausted {
attempts: u32,
source: Box<Self>,
},
#[error("model request cancelled: {reason}")]
Cancelled {
reason: String,
},
#[error("unsupported provider response: {0}")]
UnsupportedResponse(String),
}