From 50a77dc138f36052471f3fdf4f09d00074fc9940 Mon Sep 17 00:00:00 2001 From: jif-oai Date: Mon, 10 Nov 2025 11:59:48 +0000 Subject: [PATCH] Move compact (#6454) --- codex-rs/core/src/codex.rs | 23 +++++++++++++---------- codex-rs/core/src/{codex => }/compact.rs | 8 ++++---- codex-rs/core/src/lib.rs | 3 ++- codex-rs/core/src/tasks/compact.rs | 2 +- 4 files changed, 20 insertions(+), 16 deletions(-) rename codex-rs/core/src/{codex => }/compact.rs (98%) diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs index fc6b44c6..d28f671f 100644 --- a/codex-rs/core/src/codex.rs +++ b/codex-rs/core/src/codex.rs @@ -6,6 +6,7 @@ use std::sync::atomic::AtomicU64; use crate::AuthManager; use crate::client_common::REVIEW_PROMPT; +use crate::compact; use crate::features::Feature; use crate::function_tool::FunctionCallError; use crate::mcp::auth::McpAuthStatusEntry; @@ -66,6 +67,8 @@ use crate::error::Result as CodexResult; use crate::exec::StreamOutput; // Removed: legacy executor wiring replaced by ToolOrchestrator flows. // legacy normalize_exec_result no longer used after orchestrator migration +use crate::compact::build_compacted_history; +use crate::compact::collect_user_messages; use crate::mcp::auth::compute_auth_statuses; use crate::mcp_connection_manager::McpConnectionManager; use crate::model_family::find_family_for_model; @@ -129,10 +132,6 @@ use codex_protocol::user_input::UserInput; use codex_utils_readiness::Readiness; use codex_utils_readiness::ReadinessFlag; -pub mod compact; -use self::compact::build_compacted_history; -use self::compact::collect_user_messages; - /// The high-level interface to the Codex system. /// It operates as a queue pair where you send submissions and receive events. pub struct Codex { @@ -968,7 +967,7 @@ impl Session { } /// Append ResponseItems to the in-memory conversation history only. - async fn record_into_history(&self, items: &[ResponseItem]) { + pub(crate) async fn record_into_history(&self, items: &[ResponseItem]) { let mut state = self.state.lock().await; state.record_items(items.iter()); } @@ -1020,7 +1019,7 @@ impl Session { items } - async fn persist_rollout_items(&self, items: &[RolloutItem]) { + pub(crate) async fn persist_rollout_items(&self, items: &[RolloutItem]) { let recorder = { let guard = self.services.rollout.lock().await; guard.clone() @@ -1037,7 +1036,7 @@ impl Session { state.clone_history() } - async fn update_token_usage_info( + pub(crate) async fn update_token_usage_info( &self, turn_context: &TurnContext, token_usage: Option<&TokenUsage>, @@ -1054,7 +1053,7 @@ impl Session { self.send_token_count_event(turn_context).await; } - async fn update_rate_limits( + pub(crate) async fn update_rate_limits( &self, turn_context: &TurnContext, new_rate_limits: RateLimitSnapshot, @@ -1075,7 +1074,7 @@ impl Session { self.send_event(turn_context, event).await; } - async fn set_total_tokens_full(&self, turn_context: &TurnContext) { + pub(crate) async fn set_total_tokens_full(&self, turn_context: &TurnContext) { let context_window = turn_context.client.get_model_context_window(); if let Some(context_window) = context_window { { @@ -1118,7 +1117,11 @@ impl Session { self.send_event(turn_context, event).await; } - async fn notify_stream_error(&self, turn_context: &TurnContext, message: impl Into) { + pub(crate) async fn notify_stream_error( + &self, + turn_context: &TurnContext, + message: impl Into, + ) { let event = EventMsg::StreamError(StreamErrorEvent { message: message.into(), }); diff --git a/codex-rs/core/src/codex/compact.rs b/codex-rs/core/src/compact.rs similarity index 98% rename from codex-rs/core/src/codex/compact.rs rename to codex-rs/core/src/compact.rs index a3ffe6a3..baee20f0 100644 --- a/codex-rs/core/src/codex/compact.rs +++ b/codex-rs/core/src/compact.rs @@ -1,10 +1,10 @@ use std::sync::Arc; -use super::Session; -use super::TurnContext; -use super::get_last_assistant_message_from_turn; use crate::Prompt; use crate::client_common::ResponseEvent; +use crate::codex::Session; +use crate::codex::TurnContext; +use crate::codex::get_last_assistant_message_from_turn; use crate::error::CodexErr; use crate::error::Result as CodexResult; use crate::protocol::AgentMessageEvent; @@ -25,7 +25,7 @@ use codex_protocol::user_input::UserInput; use futures::prelude::*; use tracing::error; -pub const SUMMARIZATION_PROMPT: &str = include_str!("../../templates/compact/prompt.md"); +pub const SUMMARIZATION_PROMPT: &str = include_str!("../templates/compact/prompt.md"); const COMPACT_USER_MESSAGE_MAX_TOKENS: usize = 20_000; pub(crate) async fn run_inline_auto_compact_task( diff --git a/codex-rs/core/src/lib.rs b/codex-rs/core/src/lib.rs index 93a31770..0738e7af 100644 --- a/codex-rs/core/src/lib.rs +++ b/codex-rs/core/src/lib.rs @@ -99,11 +99,12 @@ pub use client_common::Prompt; pub use client_common::REVIEW_PROMPT; pub use client_common::ResponseEvent; pub use client_common::ResponseStream; -pub use codex::compact::content_items_to_text; pub use codex_protocol::models::ContentItem; pub use codex_protocol::models::LocalShellAction; pub use codex_protocol::models::LocalShellExecAction; pub use codex_protocol::models::LocalShellStatus; pub use codex_protocol::models::ResponseItem; +pub use compact::content_items_to_text; pub use event_mapping::parse_turn_item; +pub mod compact; pub mod otel_init; diff --git a/codex-rs/core/src/tasks/compact.rs b/codex-rs/core/src/tasks/compact.rs index 64b2a9d2..4f06d689 100644 --- a/codex-rs/core/src/tasks/compact.rs +++ b/codex-rs/core/src/tasks/compact.rs @@ -4,7 +4,7 @@ use async_trait::async_trait; use tokio_util::sync::CancellationToken; use crate::codex::TurnContext; -use crate::codex::compact; +use crate::compact; use crate::state::TaskKind; use codex_protocol::user_input::UserInput;