[codex-analytics] denormalize thread metadata onto turn events

This commit is contained in:
rhan-oai
2026-04-07 15:13:35 -07:00
parent 7973184a40
commit 979a317541
10 changed files with 315 additions and 78 deletions
+21
View File
@@ -53,6 +53,7 @@ use codex_analytics::AppInvocation;
use codex_analytics::CodexTurnSteerEvent;
use codex_analytics::InvocationType;
use codex_analytics::SubAgentThreadStartedInput;
use codex_analytics::ThreadInitializationMode;
use codex_analytics::TrackEventsContext;
use codex_analytics::TurnResolvedConfigFact;
use codex_analytics::TurnSteerRejectionReason;
@@ -695,6 +696,7 @@ impl Codex {
app_server_client_name: None,
app_server_client_version: None,
session_source,
thread_initialization_mode: ThreadInitializationMode::New,
dynamic_tools,
persist_extended_history,
inherited_shell_snapshot,
@@ -1129,6 +1131,14 @@ fn turn_submission_type(submission_type: SubmissionType) -> TurnSubmissionType {
}
}
fn thread_initialization_mode(initial_history: &InitialHistory) -> ThreadInitializationMode {
match initial_history {
InitialHistory::New => ThreadInitializationMode::New,
InitialHistory::Forked(_) => ThreadInitializationMode::Forked,
InitialHistory::Resumed(_) => ThreadInitializationMode::Resumed,
}
}
fn local_time_context() -> (String, String) {
match iana_time_zone::get_timezone() {
Ok(timezone) => (Local::now().format("%Y-%m-%d").to_string(), timezone),
@@ -1194,6 +1204,7 @@ pub(crate) struct SessionConfiguration {
app_server_client_version: Option<String>,
/// Source of the session (cli, vscode, exec, mcp, ...)
session_source: SessionSource,
thread_initialization_mode: ThreadInitializationMode,
dynamic_tools: Vec<DynamicToolSpec>,
persist_extended_history: bool,
inherited_shell_snapshot: Option<Arc<ShellSnapshot>>,
@@ -1218,6 +1229,7 @@ impl SessionConfiguration {
reasoning_effort: self.collaboration_mode.reasoning_effort(),
personality: self.personality,
session_source: self.session_source.clone(),
initialization_mode: self.thread_initialization_mode,
}
}
@@ -1594,6 +1606,8 @@ impl Session {
session_configuration.collaboration_mode.model(),
session_configuration.provider
);
session_configuration.thread_initialization_mode =
thread_initialization_mode(&initial_history);
let forked_from_id = initial_history.forked_from_id();
let (conversation_id, rollout_params) = match &initial_history {
@@ -6530,6 +6544,10 @@ async fn track_turn_resolved_config_analytics(
return;
}
let thread_config = {
let state = sess.state.lock().await;
state.session_configuration.thread_config_snapshot()
};
let is_first_turn = {
let mut state = sess.state.lock().await;
state.take_next_turn_is_first()
@@ -6551,6 +6569,9 @@ async fn track_turn_resolved_config_analytics(
.map(turn_submission_type)
.unwrap_or(TurnSubmissionType::Default),
),
ephemeral: thread_config.ephemeral,
session_source: thread_config.session_source,
initialization_mode: thread_config.initialization_mode,
model: turn_context.model_info.slug.clone(),
model_provider: turn_context.config.model_provider_id.clone(),
sandbox_policy: turn_context.sandbox_policy.get().clone(),