From 0119f5001581eea9e202ddc6e8b6543da9424422 Mon Sep 17 00:00:00 2001 From: Yujong Lee Date: Fri, 18 Sep 2026 18:47:36 -0700 Subject: [PATCH] fix(rust): restore the 10s connect timeout and share media clients across proxy settings Python OCR passes the call timeout per request, so its connect timeout is the call timeout and never the 5s handler default. 10s is what every Rust route uses on main. The media client never uses a proxy, so trust_proxy_env no longer splits its pool key --- litellm-rust/crates/http/src/pool.rs | 17 ++++++++++++++++- litellm-rust/crates/http/src/settings.rs | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/litellm-rust/crates/http/src/pool.rs b/litellm-rust/crates/http/src/pool.rs index 0d9b1abf504..b51e6711419 100644 --- a/litellm-rust/crates/http/src/pool.rs +++ b/litellm-rust/crates/http/src/pool.rs @@ -51,6 +51,7 @@ impl HttpClientPool { let effective = match variant { ClientVariant::Media => HttpClientConfig { client_certificate: None, + trust_proxy_env: false, ..config.clone() }, ClientVariant::Provider | ClientVariant::NoRedirect => config.clone(), @@ -86,7 +87,6 @@ impl HttpClientPool { ClientVariant::NoRedirect => builder.redirect(reqwest::redirect::Policy::none()), ClientVariant::Media => builder .redirect(reqwest::redirect::Policy::none()) - .no_proxy() .dns_resolver2(Arc::clone(&self.media_resolver)), } } @@ -206,6 +206,21 @@ mod tests { assert_eq!(connections.load(Ordering::SeqCst), 2); } + #[tokio::test] + async fn media_clients_are_shared_across_proxy_settings_they_never_use() { + let (address, connections, _) = serve("HTTP/1.1 204 No Content").await; + let pool = HttpClientPool::new(Arc::new(FixedResolver(address))); + let url = format!("http://media.invalid:{}/doc", address.port()); + for trust_proxy_env in [true, false] { + let config = HttpClientConfig { + trust_proxy_env, + ..config("a") + }; + get(&pool, &config, ClientVariant::Media, &url).await; + } + assert_eq!(connections.load(Ordering::SeqCst), 1); + } + #[test] fn media_variant_never_loads_the_client_certificate() { let pool = pool(); diff --git a/litellm-rust/crates/http/src/settings.rs b/litellm-rust/crates/http/src/settings.rs index c572c56ef3a..8aaf7f21f2c 100644 --- a/litellm-rust/crates/http/src/settings.rs +++ b/litellm-rust/crates/http/src/settings.rs @@ -50,7 +50,7 @@ impl Default for HttpSettings { user_agent: None, trust_proxy_env: false, ignore_proxy_env: false, - connect_timeout: Duration::from_secs(5), + connect_timeout: Duration::from_secs(10), } } }