turn metadata: per-turn non-blocking (#11677)

This commit is contained in:
pash-openai
2026-02-13 12:48:29 -08:00
committed by GitHub
parent a4bb59884b
commit 6c0a924203
11 changed files with 457 additions and 158 deletions

View File

@@ -106,7 +106,7 @@ async fn responses_websocket_preconnect_reuses_connection() {
let harness = websocket_harness(&server).await;
let mut client_session = harness.client.new_session();
client_session
.prewarm_websocket(&harness.otel_manager, &harness.model_info, None)
.prewarm_websocket(&harness.otel_manager, &harness.model_info)
.await
.expect("websocket prewarm failed");
let prompt = prompt_with_input(vec![message_item("hello")]);
@@ -131,7 +131,7 @@ async fn responses_websocket_preconnect_is_reused_even_with_header_changes() {
let harness = websocket_harness(&server).await;
let mut client_session = harness.client.new_session();
client_session
.prewarm_websocket(&harness.otel_manager, &harness.model_info, None)
.prewarm_websocket(&harness.otel_manager, &harness.model_info)
.await
.expect("websocket prewarm failed");
let prompt = prompt_with_input(vec![message_item("hello")]);
@@ -172,7 +172,7 @@ async fn responses_websocket_prewarm_uses_model_preference_when_feature_disabled
let harness = websocket_harness_with_options(&server, false, false, false, true).await;
let mut client_session = harness.client.new_session();
client_session
.prewarm_websocket(&harness.otel_manager, &harness.model_info, None)
.prewarm_websocket(&harness.otel_manager, &harness.model_info)
.await
.expect("websocket prewarm failed");

View File

@@ -16,6 +16,7 @@ use core_test_support::responses::start_websocket_server_with_headers;
use core_test_support::skip_if_no_network;
use core_test_support::test_codex::test_codex;
use pretty_assertions::assert_eq;
use serde_json::Value;
const TURN_STATE_HEADER: &str = "x-codex-turn-state";
@@ -65,6 +66,25 @@ async fn responses_turn_state_persists_within_turn_and_resets_after() -> Result<
);
assert_eq!(requests[2].header(TURN_STATE_HEADER), None);
let parse_turn_id = |header: Option<String>| {
let value = header?;
let parsed: Value = serde_json::from_str(&value).ok()?;
parsed
.get("turn_id")
.and_then(Value::as_str)
.map(str::to_string)
};
let first_turn_id = parse_turn_id(requests[0].header("x-codex-turn-metadata"))
.expect("first request should include turn metadata turn_id");
let second_turn_id = parse_turn_id(requests[1].header("x-codex-turn-metadata"))
.expect("follow-up request should include turn metadata turn_id");
let third_turn_id = parse_turn_id(requests[2].header("x-codex-turn-metadata"))
.expect("new turn request should include turn metadata turn_id");
assert_eq!(first_turn_id, second_turn_id);
assert_ne!(second_turn_id, third_turn_id);
Ok(())
}