codex: inline attestation header insertion

This commit is contained in:
Jiaming Zhang
2026-05-07 18:04:26 -07:00
parent 0712d3b921
commit 10877f09fb
2 changed files with 21 additions and 23 deletions

View File

@@ -498,7 +498,9 @@ impl ModelClient {
Some(self.state.session_id.to_string()),
Some(self.state.thread_id.to_string()),
));
self.extend_attestation_header_for(&mut extra_headers).await;
if let Some(header_value) = self.generate_attestation_header_for().await {
extra_headers.insert(X_OAI_ATTESTATION_HEADER, header_value);
}
let client =
ApiCompactClient::new(transport, client_setup.api_provider, client_setup.api_auth)
.with_telemetry(Some(request_telemetry));
@@ -520,7 +522,9 @@ impl ModelClient {
// Create the media call over HTTP first, then retain matching auth so realtime can attach
// the server-side control WebSocket to the call id from that HTTP response.
let client_setup = self.current_client_setup().await?;
self.extend_attestation_header_for(&mut extra_headers).await;
if let Some(header_value) = self.generate_attestation_header_for().await {
extra_headers.insert(X_OAI_ATTESTATION_HEADER, header_value);
}
let mut sideband_headers = extra_headers.clone();
sideband_headers.extend(sideband_websocket_auth_headers(
client_setup.api_auth.as_ref(),
@@ -900,7 +904,9 @@ impl ModelClient {
}
headers.extend(build_session_headers(Some(session_id), Some(thread_id)));
headers.extend(self.build_responses_identity_headers());
self.extend_attestation_header_for(&mut headers).await;
if let Some(header_value) = self.generate_attestation_header_for().await {
headers.insert(X_OAI_ATTESTATION_HEADER, header_value);
}
headers.insert(
OPENAI_BETA_HEADER,
HeaderValue::from_static(RESPONSES_WEBSOCKETS_V2_BETA_HEADER_VALUE),
@@ -969,9 +975,9 @@ impl ModelClientSession {
turn_metadata_header.as_ref(),
);
headers.extend(self.client.build_responses_identity_headers());
self.client
.extend_attestation_header_for(&mut headers)
.await;
if let Some(header_value) = self.client.generate_attestation_header_for().await {
headers.insert(X_OAI_ATTESTATION_HEADER, header_value);
}
headers
},
compression,
@@ -1671,14 +1677,6 @@ fn build_responses_headers(
headers
}
impl ModelClient {
async fn extend_attestation_header_for(&self, headers: &mut ApiHeaderMap) {
if let Some(header_value) = self.generate_attestation_header_for().await {
headers.insert(X_OAI_ATTESTATION_HEADER, header_value);
}
}
}
fn subagent_header_value(session_source: &SessionSource) -> Option<String> {
match session_source {
SessionSource::SubAgent(subagent_source) => match subagent_source {

View File

@@ -573,17 +573,17 @@ async fn non_chatgpt_codex_endpoints_omit_attestation_generation() {
let (model_client, attestation_calls) = model_client_with_counting_attestation(false);
let mut response_headers = http::HeaderMap::new();
model_client
.extend_attestation_header_for(&mut response_headers)
.await;
if let Some(header_value) = model_client.generate_attestation_header_for().await {
response_headers.insert(crate::attestation::X_OAI_ATTESTATION_HEADER, header_value);
}
let mut compaction_headers = http::HeaderMap::new();
model_client
.extend_attestation_header_for(&mut compaction_headers)
.await;
if let Some(header_value) = model_client.generate_attestation_header_for().await {
compaction_headers.insert(crate::attestation::X_OAI_ATTESTATION_HEADER, header_value);
}
let mut realtime_headers = http::HeaderMap::new();
model_client
.extend_attestation_header_for(&mut realtime_headers)
.await;
if let Some(header_value) = model_client.generate_attestation_header_for().await {
realtime_headers.insert(crate::attestation::X_OAI_ATTESTATION_HEADER, header_value);
}
assert_eq!(
response_headers.get(crate::attestation::X_OAI_ATTESTATION_HEADER),