[codex-core] Add feature-flagged server-side compaction [ci changed_files]

Move normal auto-compaction onto inline Responses API compaction behind a feature flag, keep the legacy path for manual and compatibility cases, and add observability plus integration coverage.

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
Cooper Gamble
2026-03-08 16:11:53 +00:00
parent 052ec629b1
commit ea2a4be3d8
11 changed files with 770 additions and 22 deletions

View File

@@ -146,6 +146,23 @@ impl From<VerbosityConfig> for OpenAiVerbosity {
}
}
#[derive(Debug, Serialize, Clone, PartialEq)]
#[serde(rename_all = "snake_case")]
pub struct ContextManagement {
pub r#type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub compact_threshold: Option<i64>,
}
impl ContextManagement {
pub fn compaction(compact_threshold: i64) -> Self {
Self {
r#type: "compaction".to_string(),
compact_threshold: Some(compact_threshold),
}
}
}
#[derive(Debug, Serialize, Clone, PartialEq)]
pub struct ResponsesApiRequest {
pub model: String,
@@ -164,6 +181,8 @@ pub struct ResponsesApiRequest {
pub prompt_cache_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<TextControls>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context_management: Option<Vec<ContextManagement>>,
}
impl From<&ResponsesApiRequest> for ResponseCreateWsRequest {
@@ -183,6 +202,7 @@ impl From<&ResponsesApiRequest> for ResponseCreateWsRequest {
service_tier: request.service_tier.clone(),
prompt_cache_key: request.prompt_cache_key.clone(),
text: request.text.clone(),
context_management: request.context_management.clone(),
generate: None,
client_metadata: None,
}
@@ -210,6 +230,8 @@ pub struct ResponseCreateWsRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<TextControls>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context_management: Option<Vec<ContextManagement>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub generate: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_metadata: Option<HashMap<String, String>>,