Keep realtime call URL unadorned

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
Ahmed Ibrahim
2026-04-06 17:55:55 -07:00
parent 0233c9bc6d
commit 16212254d3
2 changed files with 6 additions and 41 deletions

View File

@@ -4,7 +4,6 @@ use crate::error::ApiError;
use crate::provider::Provider;
use bytes::Bytes;
use codex_client::HttpTransport;
use codex_client::Request;
use codex_client::RequestTelemetry;
use http::HeaderMap;
use http::HeaderValue;
@@ -16,10 +15,8 @@ use serde_json::to_string;
use serde_json::to_value;
use std::sync::Arc;
use tracing::instrument;
use url::Url;
const MULTIPART_BOUNDARY: &str = "codex-realtime-call-boundary";
const REALTIME_CALL_INTENT: &str = "quicksilver";
pub struct RealtimeCallClient<T: HttpTransport, A: AuthProvider> {
session: EndpointSession<T, A>,
@@ -92,7 +89,6 @@ impl<T: HttpTransport, A: AuthProvider> RealtimeCallClient<T, A> {
extra_headers,
/*body*/ None,
|req| {
append_realtime_call_intent(req);
req.headers
.insert(CONTENT_TYPE, HeaderValue::from_static("application/sdp"));
req.raw_body = Some(Bytes::from(sdp.clone()));
@@ -119,15 +115,7 @@ impl<T: HttpTransport, A: AuthProvider> RealtimeCallClient<T, A> {
.map_err(|err| ApiError::Stream(format!("failed to encode realtime call: {err}")))?;
let resp = self
.session
.execute_with(
Method::POST,
Self::path(),
extra_headers,
Some(body),
|req| {
append_realtime_call_intent(req);
},
)
.execute(Method::POST, Self::path(), extra_headers, Some(body))
.await?;
let sdp = decode_sdp_response(resp.body.as_ref())?;
return Ok(RealtimeCallResponse { sdp });
@@ -159,7 +147,6 @@ impl<T: HttpTransport, A: AuthProvider> RealtimeCallClient<T, A> {
extra_headers,
/*body*/ None,
|req| {
append_realtime_call_intent(req);
req.headers.insert(
CONTENT_TYPE,
HeaderValue::from_static(
@@ -177,15 +164,6 @@ impl<T: HttpTransport, A: AuthProvider> RealtimeCallClient<T, A> {
}
}
fn append_realtime_call_intent(req: &mut Request) {
let mut url = Url::parse(&req.url).expect("endpoint session should build valid URLs");
if !url.query_pairs().any(|(key, _)| key == "intent") {
url.query_pairs_mut()
.append_pair("intent", REALTIME_CALL_INTENT);
}
req.url = url.to_string();
}
fn decode_sdp_response(body: &[u8]) -> Result<String, ApiError> {
String::from_utf8(body.to_vec()).map_err(|err| {
ApiError::Stream(format!(
@@ -286,10 +264,7 @@ mod tests {
let request = transport.last_request.lock().unwrap().clone().unwrap();
assert_eq!(request.method, Method::POST);
assert_eq!(
request.url,
"https://api.openai.com/v1/realtime/calls?intent=quicksilver"
);
assert_eq!(request.url, "https://api.openai.com/v1/realtime/calls");
assert_eq!(
request.headers.get(CONTENT_TYPE).unwrap(),
HeaderValue::from_static("application/sdp")
@@ -331,10 +306,7 @@ mod tests {
let request = transport.last_request.lock().unwrap().clone().unwrap();
assert_eq!(request.method, Method::POST);
assert_eq!(
request.url,
"https://api.openai.com/v1/realtime/calls?intent=quicksilver"
);
assert_eq!(request.url, "https://api.openai.com/v1/realtime/calls");
assert_eq!(
request.headers.get(CONTENT_TYPE).unwrap(),
HeaderValue::from_static("multipart/form-data; boundary=codex-realtime-call-boundary")
@@ -378,7 +350,7 @@ mod tests {
assert_eq!(request.method, Method::POST);
assert_eq!(
request.url,
"https://chatgpt.com/backend-api/codex/realtime/calls?intent=quicksilver"
"https://chatgpt.com/backend-api/codex/realtime/calls"
);
assert_eq!(request.raw_body, None);
assert_eq!(

View File

@@ -329,7 +329,7 @@ async fn conversation_start_audio_text_close_round_trip() -> Result<()> {
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn conversation_call_create_posts_session_with_intent() -> Result<()> {
async fn conversation_call_create_posts_generated_session() -> Result<()> {
let server = start_mock_server().await;
let capture = RealtimeCallRequestCapture::new();
Mock::given(method("POST"))
@@ -366,14 +366,7 @@ async fn conversation_call_create_posts_session_with_intent() -> Result<()> {
let request = capture.single_request();
assert_eq!(request.url.path(), "/v1/realtime/calls");
assert_eq!(
request
.url
.query_pairs()
.find(|(key, _)| key == "intent")
.map(|(_, value)| value.to_string()),
Some("quicksilver".to_string())
);
assert_eq!(request.url.query(), None);
assert_eq!(
request
.headers