2025-11-25 18:06:12 +00:00
|
|
|
use crate::rate_limits::RateLimitError;
|
|
|
|
|
use codex_client::TransportError;
|
|
|
|
|
use http::StatusCode;
|
|
|
|
|
use std::time::Duration;
|
|
|
|
|
use thiserror::Error;
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Error)]
|
|
|
|
|
pub enum ApiError {
|
|
|
|
|
#[error(transparent)]
|
|
|
|
|
Transport(#[from] TransportError),
|
|
|
|
|
#[error("api error {status}: {message}")]
|
|
|
|
|
Api { status: StatusCode, message: String },
|
|
|
|
|
#[error("stream error: {0}")]
|
|
|
|
|
Stream(String),
|
|
|
|
|
#[error("context window exceeded")]
|
|
|
|
|
ContextWindowExceeded,
|
|
|
|
|
#[error("quota exceeded")]
|
|
|
|
|
QuotaExceeded,
|
|
|
|
|
#[error("usage not included")]
|
|
|
|
|
UsageNotIncluded,
|
|
|
|
|
#[error("retryable error: {message}")]
|
|
|
|
|
Retryable {
|
|
|
|
|
message: String,
|
|
|
|
|
delay: Option<Duration>,
|
|
|
|
|
},
|
|
|
|
|
#[error("rate limit: {0}")]
|
|
|
|
|
RateLimit(String),
|
2026-01-16 22:22:08 -08:00
|
|
|
#[error("invalid request: {message}")]
|
|
|
|
|
InvalidRequest { message: String },
|
2026-02-11 17:16:27 -08:00
|
|
|
#[error("server overloaded")]
|
|
|
|
|
ServerOverloaded,
|
2025-11-25 18:06:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl From<RateLimitError> for ApiError {
|
|
|
|
|
fn from(err: RateLimitError) -> Self {
|
|
|
|
|
Self::RateLimit(err.to_string())
|
|
|
|
|
}
|
|
|
|
|
}
|