Request compression.

Add new model_provider flag for compression to enable request
compression.  We support zstd and gzip, server also supports brotli

You can test this against the sign in with chatgpt flow by adding the
following profile:

```
[profiles.compressed]
name = "compressed"
model_provider = "openai-zstd"

[model_providers.openai-zstd]
name = "OpenAI (ChatGPT, zstd)"
wire_api = "responses"
request_compression = "zstd"
requires_openai_auth = true
```

This will zstd compress your request before sending it to the server.
This commit is contained in:
Channing Conger
2026-01-05 12:41:08 -08:00
parent 07f077dfb3
commit 55acaaffac
37 changed files with 491 additions and 79 deletions
+2
View File
@@ -11,6 +11,7 @@ use codex_api::Provider;
use codex_api::ResponsesClient;
use codex_api::ResponsesOptions;
use codex_api::WireApi;
use codex_api::provider::RequestCompression;
use codex_client::HttpTransport;
use codex_client::Request;
use codex_client::Response;
@@ -132,6 +133,7 @@ fn provider(name: &str, wire: WireApi) -> Provider {
retry_5xx: false,
retry_transport: true,
},
request_compression: RequestCompression::None,
stream_idle_timeout: Duration::from_millis(10),
}
}
@@ -1,6 +1,7 @@
use codex_api::AuthProvider;
use codex_api::ModelsClient;
use codex_api::provider::Provider;
use codex_api::provider::RequestCompression;
use codex_api::provider::RetryConfig;
use codex_api::provider::WireApi;
use codex_client::ReqwestTransport;
@@ -42,6 +43,7 @@ fn provider(base_url: &str) -> Provider {
retry_5xx: true,
retry_transport: true,
},
request_compression: RequestCompression::None,
stream_idle_timeout: std::time::Duration::from_secs(1),
}
}
@@ -9,6 +9,7 @@ use codex_api::Provider;
use codex_api::ResponseEvent;
use codex_api::ResponsesClient;
use codex_api::WireApi;
use codex_api::provider::RequestCompression;
use codex_client::HttpTransport;
use codex_client::Request;
use codex_client::Response;
@@ -74,6 +75,7 @@ fn provider(name: &str, wire: WireApi) -> Provider {
retry_5xx: false,
retry_transport: true,
},
request_compression: RequestCompression::None,
stream_idle_timeout: Duration::from_millis(50),
}
}