mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
9271e84b79
## Why `codex.task.compact` only distinguished `local` vs `remote`, which made it hard to answer simple counter questions in Statsig. Manual `/compact` and automatic compaction were collapsed together, and the legacy remote path was also collapsed with `remote_compaction_v2`. ## What Changed - route `codex.task.compact` through a shared helper in `core/src/tasks/mod.rs` - add a `manual=true|false` tag so manual and automatic compaction can be counted separately - split the remote tag into `remote` and `remote_v2` - emit the metric from the inline auto-compaction path in `core/src/session/turn.rs` as well as the manual `CompactTask` path in `core/src/tasks/compact.rs` - add focused unit coverage for the new tag shapes in `core/src/tasks/mod_tests.rs` ## Verification - added unit coverage in `core/src/tasks/mod_tests.rs` covering manual `remote_v2` tags and automatic `local` tags
67 lines
2.1 KiB
Rust
67 lines
2.1 KiB
Rust
use std::sync::Arc;
|
|
|
|
use super::SessionTask;
|
|
use super::SessionTaskContext;
|
|
use super::emit_compact_metric;
|
|
use crate::session::TurnInput;
|
|
use crate::session::turn_context::TurnContext;
|
|
use crate::state::TaskKind;
|
|
use codex_protocol::user_input::UserInput;
|
|
use tokio_util::sync::CancellationToken;
|
|
|
|
#[derive(Clone, Copy, Default)]
|
|
pub(crate) struct CompactTask;
|
|
|
|
impl SessionTask for CompactTask {
|
|
fn kind(&self) -> TaskKind {
|
|
TaskKind::Compact
|
|
}
|
|
|
|
fn span_name(&self) -> &'static str {
|
|
"session_task.compact"
|
|
}
|
|
|
|
async fn run(
|
|
self: Arc<Self>,
|
|
session: Arc<SessionTaskContext>,
|
|
ctx: Arc<TurnContext>,
|
|
_input: Vec<TurnInput>,
|
|
_cancellation_token: CancellationToken,
|
|
) -> Option<String> {
|
|
let session = session.clone_session();
|
|
let _ = if crate::compact::should_use_remote_compact_task(ctx.provider.info()) {
|
|
if ctx
|
|
.features
|
|
.enabled(codex_features::Feature::RemoteCompactionV2)
|
|
{
|
|
emit_compact_metric(
|
|
&session.services.session_telemetry,
|
|
"remote_v2",
|
|
/*manual*/ true,
|
|
);
|
|
crate::compact_remote_v2::run_remote_compact_task(session.clone(), ctx).await
|
|
} else {
|
|
emit_compact_metric(
|
|
&session.services.session_telemetry,
|
|
"remote",
|
|
/*manual*/ true,
|
|
);
|
|
crate::compact_remote::run_remote_compact_task(session.clone(), ctx).await
|
|
}
|
|
} else {
|
|
emit_compact_metric(
|
|
&session.services.session_telemetry,
|
|
"local",
|
|
/*manual*/ true,
|
|
);
|
|
let input = vec![UserInput::Text {
|
|
text: ctx.compact_prompt().to_string(),
|
|
// Compaction prompt is synthesized; no UI element ranges to preserve.
|
|
text_elements: Vec::new(),
|
|
}];
|
|
crate::compact::run_compact_task(session.clone(), ctx, input).await
|
|
};
|
|
None
|
|
}
|
|
}
|