Chore: remove response model check and rely on header model for downgrade (#12061)

### Summary
Ensure that we use the model value from the response header only so that
we are guaranteed with the correct slug name. We are no longer checking
against the model value from response so that we are less likely to have
false positive.

There are two different treatments - for SSE we use the header from the
response and for websocket we check top-level events.
This commit is contained in:
Shijie Rao
2026-02-17 17:50:06 -08:00
committed by GitHub
parent 31cbebd3c2
commit b3a8571219
5 changed files with 126 additions and 63 deletions

View File

@@ -121,7 +121,9 @@ async fn response_model_field_mismatch_emits_warning_when_header_matches_request
"type": "response.created",
"response": {
"id": "resp-1",
"model": SERVER_MODEL,
"headers": {
"OpenAI-Model": SERVER_MODEL
}
}
}),
core_test_support::responses::ev_completed("resp-1"),
@@ -250,3 +252,58 @@ async fn openai_model_header_mismatch_only_emits_one_warning_per_turn() -> Resul
Ok(())
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn openai_model_header_casing_only_mismatch_does_not_warn() -> Result<()> {
skip_if_no_network!(Ok(()));
let server = start_mock_server().await;
let requested_header = REQUESTED_MODEL.to_ascii_uppercase();
let response = sse_response(sse_completed("resp-1"))
.insert_header("OpenAI-Model", requested_header.as_str());
let _mock = mount_response_once(&server, response).await;
let mut builder = test_codex().with_model(REQUESTED_MODEL);
let test = builder.build(&server).await?;
test.codex
.submit(Op::UserTurn {
items: vec![UserInput::Text {
text: "trigger casing check".to_string(),
text_elements: Vec::new(),
}],
final_output_json_schema: None,
cwd: test.cwd_path().to_path_buf(),
approval_policy: AskForApproval::Never,
sandbox_policy: SandboxPolicy::DangerFullAccess,
model: REQUESTED_MODEL.to_string(),
effort: test.config.model_reasoning_effort,
summary: ReasoningSummary::Auto,
collaboration_mode: None,
personality: None,
})
.await?;
let mut reroute_count = 0;
let mut warning_count = 0;
loop {
let event = wait_for_event(&test.codex, |_| true).await;
match event {
EventMsg::ModelReroute(_) => reroute_count += 1,
EventMsg::Warning(warning)
if warning
.message
.contains("flagged for potentially high-risk cyber activity") =>
{
warning_count += 1;
}
EventMsg::TurnComplete(_) => break,
_ => {}
}
}
assert_eq!(reroute_count, 0);
assert_eq!(warning_count, 0);
Ok(())
}