mirror of
https://github.com/openai/codex.git
synced 2026-10-31 19:28:49 +00:00
## Why HTTP callers currently cannot bound response bodies. Callers accepting provider-controlled model catalogs need a size limit before decoding the response. ## What changed - Add per-request `response_body_limit_bytes` for buffered, streaming, and error responses, leaving requests unbounded by default. Reject oversized declared lengths early and count observed bytes across chunks. - Return a non-retryable `ResponseTooLarge` error that reports only the byte limit. Preserve HTTP status and headers when a bounded error body fails to read without exceeding the limit. - Expose `ModelsClient::list_models_raw` to fetch bytes and an optional ETag using provider authentication and retries, with an optional body limit. Keep existing `list_models` decoding behavior. ## Testing Add HTTP fixture tests covering size boundaries, chunked and missing-length responses, early rejection, stream termination, interrupted bodies, error text decoding, and request isolation. Add a models-client test verifying that limits survive authentication retries without affecting subsequent ordinary requests. GitOrigin-RevId: 61b8940bc8a549588cee6865a3b5d1cff789074d
38 lines
917 B
Rust
38 lines
917 B
Rust
//! Errors returned by the shared Codex HTTP transport.
|
|
|
|
use crate::client::HttpError;
|
|
use http::HeaderMap;
|
|
use http::StatusCode;
|
|
use thiserror::Error;
|
|
|
|
#[derive(Debug, Error)]
|
|
pub enum TransportError {
|
|
#[error("http {status}: {body:?}")]
|
|
Http {
|
|
status: StatusCode,
|
|
url: Option<String>,
|
|
headers: Option<HeaderMap>,
|
|
body: Option<String>,
|
|
},
|
|
#[error("retry limit reached")]
|
|
RetryLimit,
|
|
#[error("timeout")]
|
|
Timeout,
|
|
#[error("connection failed: {0}")]
|
|
Connection(#[source] HttpError),
|
|
#[error("network error: {0}")]
|
|
Network(String),
|
|
#[error("request build error: {0}")]
|
|
Build(String),
|
|
#[error("response body exceeds the {max_bytes} byte limit")]
|
|
ResponseTooLarge { max_bytes: usize },
|
|
}
|
|
|
|
#[derive(Debug, Error)]
|
|
pub enum StreamError {
|
|
#[error("stream failed: {0}")]
|
|
Stream(String),
|
|
#[error("timeout")]
|
|
Timeout,
|
|
}
|