use thiserror::Error;
#[derive(Debug, Error)]
pub enum LlmError {
#[error("API key not found for {provider}. Set {env_var} environment variable.")]
ApiKeyMissing { provider: String, env_var: String },
#[error("HTTP request failed: {0}")]
HttpError(String),
#[error("API error ({status}): {message}")]
ApiError { status: u16, message: String },
#[error("Failed to parse response: {0}")]
ParseError(String),
#[error("Rate limit exceeded. Retry after {retry_after_secs} seconds.")]
RateLimited { retry_after_secs: u64 },
#[error("Request timed out after {timeout_ms}ms")]
Timeout { timeout_ms: u32 },
#[error("Invalid request: {0}")]
InvalidRequest(String),
#[error("Unsupported provider: {0}")]
UnsupportedProvider(String),
#[error("Model '{model}' not supported by {provider}")]
UnsupportedModel { provider: String, model: String },
#[error("Content blocked by safety filter: {reason}")]
ContentBlocked { reason: String },
#[error("IO error: {0}")]
IoError(String),
}
impl From<std::io::Error> for LlmError {
fn from(err: std::io::Error) -> Self {
LlmError::IoError(err.to_string())
}
}