clean: all history cloning (#8916)

This commit is contained in:
jif-oai
2026-01-08 18:17:18 +00:00
committed by GitHub
parent c4af304c77
commit 69898e3dba
6 changed files with 84 additions and 89 deletions

View File

@@ -1256,12 +1256,10 @@ impl Session {
);
}
RolloutItem::Compacted(compacted) => {
let snapshot = history.get_history();
// TODO(jif) clean
if let Some(replacement) = &compacted.replacement_history {
history.replace(replacement.clone());
} else {
let user_messages = collect_user_messages(&snapshot);
let user_messages = collect_user_messages(history.raw_items());
let rebuilt = compact::build_compacted_history(
self.build_initial_context(turn_context),
&user_messages,
@@ -1276,7 +1274,7 @@ impl Session {
_ => {}
}
}
history.get_history()
history.raw_items().to_vec()
}
/// Append ResponseItems to the in-memory conversation history only.
@@ -2107,7 +2105,10 @@ mod handlers {
let mut history = sess.clone_history().await;
history.drop_last_n_user_turns(num_turns);
sess.replace_history(history.get_history()).await;
// Replace with the raw items. We don't want to replace with a normalized
// version of the history.
sess.replace_history(history.raw_items().to_vec()).await;
sess.recompute_token_usage(turn_context.as_ref()).await;
sess.send_event_raw_flushed(Event {
@@ -2124,10 +2125,9 @@ mod handlers {
.terminate_all_processes()
.await;
info!("Shutting down Codex instance");
let turn_count = sess
.clone_history()
.await
.get_history()
let history = sess.clone_history().await;
let turn_count = history
.raw_items()
.iter()
.filter(|item| is_user_turn_boundary(item))
.count();
@@ -2393,7 +2393,7 @@ pub(crate) async fn run_task(
let turn_input: Vec<ResponseItem> = {
sess.record_conversation_items(&turn_context, &pending_input)
.await;
sess.clone_history().await.get_history_for_prompt()
sess.clone_history().await.for_prompt()
};
let turn_input_messages = turn_input
@@ -2934,8 +2934,8 @@ mod tests {
}))
.await;
let actual = session.state.lock().await.clone_history().get_history();
assert_eq!(expected, actual);
let history = session.state.lock().await.clone_history();
assert_eq!(expected, history.raw_items());
}
#[tokio::test]
@@ -3024,8 +3024,8 @@ mod tests {
.record_initial_history(InitialHistory::Forked(rollout_items))
.await;
let actual = session.state.lock().await.clone_history().get_history();
assert_eq!(expected, actual);
let history = session.state.lock().await.clone_history();
assert_eq!(expected, history.raw_items());
}
#[tokio::test]
@@ -3081,8 +3081,8 @@ mod tests {
expected.extend(initial_context);
expected.extend(turn_1);
let actual = sess.clone_history().await.get_history();
assert_eq!(expected, actual);
let history = sess.clone_history().await;
assert_eq!(expected, history.raw_items());
}
#[tokio::test]
@@ -3107,8 +3107,8 @@ mod tests {
let rollback_event = wait_for_thread_rolled_back(&rx).await;
assert_eq!(rollback_event.num_turns, 99);
let actual = sess.clone_history().await.get_history();
assert_eq!(initial_context, actual);
let history = sess.clone_history().await;
assert_eq!(initial_context, history.raw_items());
}
#[tokio::test]
@@ -3128,8 +3128,8 @@ mod tests {
Some(CodexErrorInfo::ThreadRollbackFailed)
);
let actual = sess.clone_history().await.get_history();
assert_eq!(initial_context, actual);
let history = sess.clone_history().await;
assert_eq!(initial_context, history.raw_items());
}
#[tokio::test]
@@ -3149,8 +3149,8 @@ mod tests {
Some(CodexErrorInfo::ThreadRollbackFailed)
);
let actual = sess.clone_history().await.get_history();
assert_eq!(initial_context, actual);
let history = sess.clone_history().await;
assert_eq!(initial_context, history.raw_items());
}
#[tokio::test]
@@ -3651,8 +3651,8 @@ mod tests {
.record_model_warning("too many unified exec processes", &turn_context)
.await;
let mut history = session.clone_history().await;
let history_items = history.get_history();
let history = session.clone_history().await;
let history_items = history.raw_items();
let last = history_items.last().expect("warning recorded");
match last {
@@ -3798,8 +3798,9 @@ mod tests {
}
}
let history = sess.clone_history().await.get_history();
let _ = history;
// TODO(jif) investigate what is this?
let history = sess.clone_history().await;
let _ = history.raw_items();
}
#[tokio::test]
@@ -3888,7 +3889,7 @@ mod tests {
rollout_items.push(RolloutItem::ResponseItem(assistant1.clone()));
let summary1 = "summary one";
let snapshot1 = live_history.get_history();
let snapshot1 = live_history.clone().for_prompt();
let user_messages1 = collect_user_messages(&snapshot1);
let rebuilt1 = compact::build_compacted_history(
session.build_initial_context(turn_context),
@@ -3922,7 +3923,7 @@ mod tests {
rollout_items.push(RolloutItem::ResponseItem(assistant2.clone()));
let summary2 = "summary two";
let snapshot2 = live_history.get_history();
let snapshot2 = live_history.clone().for_prompt();
let user_messages2 = collect_user_messages(&snapshot2);
let rebuilt2 = compact::build_compacted_history(
session.build_initial_context(turn_context),
@@ -3955,7 +3956,7 @@ mod tests {
live_history.record_items(std::iter::once(&assistant3), turn_context.truncation_policy);
rollout_items.push(RolloutItem::ResponseItem(assistant3.clone()));
(rollout_items, live_history.get_history())
(rollout_items, live_history.for_prompt())
}
#[tokio::test]