mirror of
https://github.com/openai/codex.git
synced 2026-11-11 21:10:39 +00:00
## What changed Introduce `ItemIdGenerator` and pass the runtime-owned generator through sessions, model clients, history, hooks, tool outputs, and memory requests. Keep UUIDv7 generation as the default and replace direct calls to `ResponseItemId::new` with the shared callable. Preserve existing item IDs and backfill missing or empty IDs through the same generator, including forked history before reconstruction and persistence. ## Testing Extend coverage for UUIDv7 IDs on user messages, agent messages, and additional tools, and assert that forked model context matches the backfilled items persisted to history. GitOrigin-RevId: 0dd9ccf0f46f0f1005a6acfc740133b03ce82259
52 lines
1.5 KiB
Rust
52 lines
1.5 KiB
Rust
use super::ConfigurationReasoning;
|
|
use crate::models::ResponseItem;
|
|
use crate::openai_models::ReasoningEffort;
|
|
use pretty_assertions::assert_eq;
|
|
use serde_json::json;
|
|
|
|
#[test]
|
|
fn configuration_update_round_trips_without_message_fields() {
|
|
let value = json!({
|
|
"type": "configuration_update",
|
|
"reasoning": { "effort": "high" }
|
|
});
|
|
let mut item: ResponseItem = serde_json::from_value(value.clone()).unwrap();
|
|
assert_eq!(
|
|
item,
|
|
ResponseItem::ConfigurationUpdate {
|
|
reasoning: ConfigurationReasoning {
|
|
effort: ReasoningEffort::High,
|
|
},
|
|
}
|
|
);
|
|
|
|
item.set_id(Some(crate::uuid_v7_item_id_generator_for_test()(
|
|
"configuration-id",
|
|
)));
|
|
item.set_turn_id_if_missing("turn-id");
|
|
item.set_create_time_if_missing(serde_json::Number::from(123));
|
|
assert_eq!(
|
|
(item.id(), item.id_prefix(), item.turn_id()),
|
|
(None, None, None)
|
|
);
|
|
assert_eq!(serde_json::to_value(item).unwrap(), value);
|
|
}
|
|
|
|
#[test]
|
|
fn configuration_update_preserves_model_defined_effort() {
|
|
let value = json!({
|
|
"type": "configuration_update",
|
|
"reasoning": { "effort": "model-specific" }
|
|
});
|
|
let item: ResponseItem = serde_json::from_value(value.clone()).unwrap();
|
|
assert_eq!(
|
|
item,
|
|
ResponseItem::ConfigurationUpdate {
|
|
reasoning: ConfigurationReasoning {
|
|
effort: ReasoningEffort::Custom("model-specific".to_string()),
|
|
},
|
|
}
|
|
);
|
|
assert_eq!(serde_json::to_value(item).unwrap(), value);
|
|
}
|