Merge pull request #464 from RWDai/fix/issue-455-codex-compact-include

fix: strip include from codex compact requests
This commit is contained in:
fawney19
2026-05-15 16:10:33 +08:00
committed by GitHub
2 changed files with 59 additions and 2 deletions

View File

@@ -179,6 +179,40 @@ fn local_openai_responses_compact_wrapper_strips_store_for_same_format_requests(
assert!(provider_request_body.get("stream").is_none()); assert!(provider_request_body.get("stream").is_none());
} }
#[test]
fn local_openai_responses_compact_wrapper_strips_include_for_codex_requests() {
let body_json = json!({
"model": "gpt-5.4",
"input": [],
"include": ["reasoning.encrypted_content"],
"store": true,
"stream": true
});
let provider_request_body = build_local_openai_responses_request_body(
&body_json,
"gpt-5.4",
false,
false,
"codex",
"openai:responses:compact",
None,
Some("key-123"),
&http::HeaderMap::new(),
false,
)
.expect("local codex compact body should build");
assert!(provider_request_body.get("include").is_none());
assert!(provider_request_body.get("store").is_none());
assert!(provider_request_body.get("stream").is_none());
assert_eq!(provider_request_body["instructions"], "");
assert_eq!(
provider_request_body["prompt_cache_key"],
"172c39e6-c0a0-5a70-8b63-e0f8e0d185a3"
);
}
#[test] #[test]
fn local_openai_responses_wrapper_applies_model_directive_before_body_rules() { fn local_openai_responses_wrapper_applies_model_directive_before_body_rules() {
let body_json = json!({ let body_json = json!({

View File

@@ -284,7 +284,8 @@ pub fn apply_openai_responses_compact_special_body_edits(
return; return;
}; };
// `/v1/responses/compact` does not accept `store` or body-level `stream`. // `/v1/responses/compact` does not accept `include`, `store`, or body-level `stream`.
body_object.remove("include");
body_object.remove("store"); body_object.remove("store");
body_object.remove("stream"); body_object.remove("stream");
} }
@@ -514,7 +515,8 @@ pub fn apply_codex_openai_responses_special_headers(
mod tests { mod tests {
use super::{ use super::{
apply_codex_openai_responses_chat_body_edits, apply_codex_openai_responses_chat_body_edits,
apply_codex_openai_responses_special_body_edits, CODEX_OPENAI_IMAGE_INTERNAL_MODEL, apply_codex_openai_responses_special_body_edits,
apply_openai_responses_compact_special_body_edits, CODEX_OPENAI_IMAGE_INTERNAL_MODEL,
}; };
use serde_json::json; use serde_json::json;
@@ -593,6 +595,27 @@ mod tests {
assert_eq!(provider_request_body["parallel_tool_calls"], json!(false)); assert_eq!(provider_request_body["parallel_tool_calls"], json!(false));
} }
#[test]
fn compact_body_edits_strip_include_store_and_stream() {
let mut provider_request_body = json!({
"input": [],
"model": "gpt-5.4",
"include": ["reasoning.encrypted_content"],
"store": true,
"stream": true,
});
apply_openai_responses_compact_special_body_edits(
&mut provider_request_body,
"openai:responses:compact",
);
assert!(provider_request_body.get("include").is_none());
assert!(provider_request_body.get("store").is_none());
assert!(provider_request_body.get("stream").is_none());
assert_eq!(provider_request_body["model"], json!("gpt-5.4"));
}
#[test] #[test]
fn codex_chat_body_edits_inject_reasoning_summary_defaults() { fn codex_chat_body_edits_inject_reasoning_summary_defaults() {
let mut provider_request_body = json!({ let mut provider_request_body = json!({