//! LLM provider error types. use std::time::Duration; /// LLM provider errors. #[derive(Debug, thiserror::Error)] pub enum LlmError { #[error("Provider {provider} request failed: {reason}")] RequestFailed { provider: String, reason: String }, #[error("Provider {provider} rate limited, retry after {retry_after:?}")] RateLimited { provider: String, retry_after: Option, }, #[error("Invalid response from {provider}: {reason}")] InvalidResponse { provider: String, reason: String }, #[error("Context length exceeded: {used} tokens used, {limit} allowed")] ContextLengthExceeded { used: usize, limit: usize }, #[error("Model {model} not available on provider {provider}")] ModelNotAvailable { provider: String, model: String }, #[error("Authentication failed for provider {provider}")] AuthFailed { provider: String }, #[error("Session expired for provider {provider}")] SessionExpired { provider: String }, #[error("Session renewal failed for provider {provider}: {reason}")] SessionRenewalFailed { provider: String, reason: String }, #[error("HTTP error: {0}")] Http(#[from] reqwest::Error), #[error("JSON error: {0}")] Json(#[from] serde_json::Error), #[error("IO error: {0}")] Io(#[from] std::io::Error), }