Move compression into the request builder

This commit is contained in:
Channing Conger
2026-01-05 12:41:13 -08:00
parent 7361c1fea2
commit 0124a95c83
8 changed files with 102 additions and 89 deletions
+15 -12
View File
@@ -10,7 +10,9 @@ use codex_api::ChatClient;
use codex_api::Provider;
use codex_api::ResponsesClient;
use codex_api::ResponsesOptions;
use codex_api::ResponsesRequest;
use codex_api::WireApi;
use codex_client::Body;
use codex_client::HttpTransport;
use codex_client::Request;
use codex_client::Response;
@@ -136,6 +138,13 @@ fn provider(name: &str, wire: WireApi) -> Provider {
}
}
fn responses_request(body: Value) -> ResponsesRequest {
ResponsesRequest {
body: Body::Json(body),
headers: HeaderMap::new(),
}
}
#[derive(Clone)]
struct FlakyTransport {
state: Arc<Mutex<i64>>,
@@ -232,10 +241,8 @@ async fn responses_client_uses_responses_path_for_responses_wire() -> Result<()>
let transport = RecordingTransport::new(state.clone());
let client = ResponsesClient::new(transport, provider("openai", WireApi::Responses), NoAuth);
let body = serde_json::json!({ "echo": true });
let _stream = client
.stream(body, HeaderMap::new(), Default::default())
.await?;
let request = responses_request(serde_json::json!({ "echo": true }));
let _stream = client.stream(request).await?;
let requests = state.take_stream_requests();
assert_path_ends_with(&requests, "/responses");
@@ -248,10 +255,8 @@ async fn responses_client_uses_chat_path_for_chat_wire() -> Result<()> {
let transport = RecordingTransport::new(state.clone());
let client = ResponsesClient::new(transport, provider("openai", WireApi::Chat), NoAuth);
let body = serde_json::json!({ "echo": true });
let _stream = client
.stream(body, HeaderMap::new(), Default::default())
.await?;
let request = responses_request(serde_json::json!({ "echo": true }));
let _stream = client.stream(request).await?;
let requests = state.take_stream_requests();
assert_path_ends_with(&requests, "/chat/completions");
@@ -265,10 +270,8 @@ async fn streaming_client_adds_auth_headers() -> Result<()> {
let auth = StaticAuth::new("secret-token", "acct-1");
let client = ResponsesClient::new(transport, provider("openai", WireApi::Responses), auth);
let body = serde_json::json!({ "model": "gpt-test" });
let _stream = client
.stream(body, HeaderMap::new(), Default::default())
.await?;
let request = responses_request(serde_json::json!({ "model": "gpt-test" }));
let _stream = client.stream(request).await?;
let requests = state.take_stream_requests();
assert_eq!(requests.len(), 1);
+13 -14
View File
@@ -8,7 +8,9 @@ use codex_api::AuthProvider;
use codex_api::Provider;
use codex_api::ResponseEvent;
use codex_api::ResponsesClient;
use codex_api::ResponsesRequest;
use codex_api::WireApi;
use codex_client::Body;
use codex_client::HttpTransport;
use codex_client::Request;
use codex_client::Response;
@@ -94,6 +96,13 @@ fn build_responses_body(events: Vec<Value>) -> String {
body
}
fn responses_request(body: Value) -> ResponsesRequest {
ResponsesRequest {
body: Body::Json(body),
headers: HeaderMap::new(),
}
}
#[tokio::test]
async fn responses_stream_parses_items_and_completed_end_to_end() -> Result<()> {
let item1 = serde_json::json!({
@@ -123,13 +132,8 @@ async fn responses_stream_parses_items_and_completed_end_to_end() -> Result<()>
let transport = FixtureSseTransport::new(body);
let client = ResponsesClient::new(transport, provider("openai", WireApi::Responses), NoAuth);
let mut stream = client
.stream(
serde_json::json!({"echo": true}),
HeaderMap::new(),
Default::default(),
)
.await?;
let request = responses_request(serde_json::json!({"echo": true}));
let mut stream = client.stream(request).await?;
let mut events = Vec::new();
while let Some(ev) = stream.next().await {
@@ -192,13 +196,8 @@ async fn responses_stream_aggregates_output_text_deltas() -> Result<()> {
let transport = FixtureSseTransport::new(body);
let client = ResponsesClient::new(transport, provider("openai", WireApi::Responses), NoAuth);
let stream = client
.stream(
serde_json::json!({"echo": true}),
HeaderMap::new(),
Default::default(),
)
.await?;
let request = responses_request(serde_json::json!({"echo": true}));
let stream = client.stream(request).await?;
let mut stream = stream.aggregate();
let mut events = Vec::new();