mirror of
https://github.com/openai/codex.git
synced 2026-04-26 15:45:02 +00:00
core: snapshot tests for compaction requests, post-compaction layout, some additional compaction tests (#11487)
This PR keeps compaction context-layout test coverage separate from runtime compaction behavior changes, so runtime logic review can stay focused. ## Included - Adds reusable context snapshot helpers in `core/tests/common/context_snapshot.rs` for rendering model-visible request/history shapes. - Standardizes helper naming for readability: - `format_request_input_snapshot` - `format_response_items_snapshot` - `format_labeled_requests_snapshot` - `format_labeled_items_snapshot` - Expands snapshot coverage for both local and remote compaction flows: - pre-turn auto-compaction - pre-turn failure/context-window-exceeded paths - mid-turn continuation compaction - manual `/compact` with and without prior user turns - Captures both sides where relevant: - compaction request shape - post-compaction history layout shape - Adds/uses shared request-inspection helpers so assertions target structured request content instead of ad-hoc JSON string parsing. - Aligns snapshots/assertions to current behavior and leaves explicit `TODO(ccunningham)` notes where behavior is known and intentionally deferred. ## Not Included - No runtime compaction logic changes. - No model-visible context/state behavior changes.
This commit is contained in:
committed by
GitHub
parent
fce4ad9cf4
commit
85034b189e
@@ -29,7 +29,6 @@ use core_test_support::skip_if_no_network;
|
||||
use core_test_support::test_codex::test_codex;
|
||||
use core_test_support::wait_for_event;
|
||||
use pretty_assertions::assert_eq;
|
||||
use serde_json::Value;
|
||||
use wiremock::MockServer;
|
||||
|
||||
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
||||
@@ -324,32 +323,14 @@ async fn model_change_from_image_to_text_strips_prior_image_content() -> Result<
|
||||
assert_eq!(requests.len(), 2, "expected two model requests");
|
||||
|
||||
let first_request = requests.first().expect("expected first request");
|
||||
let first_has_input_image = first_request.inputs_of_type("message").iter().any(|item| {
|
||||
item.get("content")
|
||||
.and_then(Value::as_array)
|
||||
.is_some_and(|content| {
|
||||
content
|
||||
.iter()
|
||||
.any(|span| span.get("type").and_then(Value::as_str) == Some("input_image"))
|
||||
})
|
||||
});
|
||||
assert!(
|
||||
first_has_input_image,
|
||||
!first_request.message_input_image_urls("user").is_empty(),
|
||||
"first request should include the uploaded image"
|
||||
);
|
||||
|
||||
let second_request = requests.last().expect("expected second request");
|
||||
let second_has_input_image = second_request.inputs_of_type("message").iter().any(|item| {
|
||||
item.get("content")
|
||||
.and_then(Value::as_array)
|
||||
.is_some_and(|content| {
|
||||
content
|
||||
.iter()
|
||||
.any(|span| span.get("type").and_then(Value::as_str) == Some("input_image"))
|
||||
})
|
||||
});
|
||||
assert!(
|
||||
!second_has_input_image,
|
||||
second_request.message_input_image_urls("user").is_empty(),
|
||||
"second request should strip unsupported image content"
|
||||
);
|
||||
let second_user_texts = second_request.message_input_texts("user");
|
||||
|
||||
Reference in New Issue
Block a user