Budget retained images during remote compaction (#40280)

## Why

Remote compaction's retained-message budget counted text but not images, so
image-heavy history could retain more context than the budget represented.

## What changed

- Add the opt-in `compaction_image_budget` feature to charge retained images
  using the existing image size estimate.
- Keep images and their adjacent labels atomic when truncating a boundary
  message, while preserving existing text, audio, metadata, and
  client-authored developer-message behavior.
- Stop backfilling older messages when an image at the truncation boundary
  does not fit.

## Testing

- Add unit coverage for image boundaries, annotations, audio, text-only
  messages, and client-authored developer messages.
- Add an integration test covering repeated remote compaction with the feature
  enabled, disabled, and left at its default.

GitOrigin-RevId: 88868bbd09d2858939dbae3f8402e1f497b4e3c6
This commit is contained in:
ashwinnathan-openai authored and copyberry committed 2026-08-23 21:29:11 +00:00
1 parent aec653daa9
commit 6677fd827d
10 files changed
+507 -28

No files matched your search

+3 -1
View File
@@ -332,7 +332,9 @@ fn build_compacted_history_preserves_user_message_passthrough_metadata() {
},
metadata: Some(CodexHarnessMetadata::default()),
},
ResponseItemEnvelope::new(user_message("summary text")),
ResponseItemEnvelope::new(ContextualUserFragment::into(CompactionSummary::new(
"summary text",
))),
]
);
}