mirror of
https://github.com/openai/codex.git
synced 2026-10-21 17:48:44 +00:00
build world state in session
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
use crate::context::CollaborationModeInstructions;
|
||||
use crate::context::ContextualUserFragment;
|
||||
use crate::context::EnvironmentsState;
|
||||
use crate::context::ModelSwitchInstructions;
|
||||
use crate::context::MultiAgentModeInstructions;
|
||||
use crate::context::PermissionsInstructions;
|
||||
@@ -9,6 +8,8 @@ use crate::context::RealtimeEndInstructions;
|
||||
use crate::context::RealtimeStartInstructions;
|
||||
use crate::context::RealtimeStartWithInstructions;
|
||||
use crate::session::PreviousTurnSettings;
|
||||
use crate::session::build_world_state_from_turn_context;
|
||||
use crate::session::build_world_state_from_turn_context_item;
|
||||
use crate::session::turn_context::TurnContext;
|
||||
use codex_execpolicy::Policy;
|
||||
use codex_features::Feature;
|
||||
@@ -19,19 +20,6 @@ use codex_protocol::models::ResponseItem;
|
||||
use codex_protocol::openai_models::ModelInfo;
|
||||
use codex_protocol::protocol::TurnContextItem;
|
||||
|
||||
fn build_environment_update_item(
|
||||
previous: Option<&TurnContextItem>,
|
||||
next: &TurnContext,
|
||||
) -> Option<ResponseItem> {
|
||||
if !next.config.include_environment_context {
|
||||
return None;
|
||||
}
|
||||
|
||||
let prev = previous?;
|
||||
let previous = EnvironmentsState::from_turn_context_item(prev);
|
||||
EnvironmentsState::from_turn_context(next).render_diff(&previous)
|
||||
}
|
||||
|
||||
fn build_permissions_update_item(
|
||||
previous: Option<&TurnContextItem>,
|
||||
next: &TurnContext,
|
||||
@@ -240,7 +228,12 @@ pub(crate) fn build_settings_update_items(
|
||||
// model-visible item emitted by build_initial_context. Persist the remaining
|
||||
// inputs or add explicit replay events so fork/resume can diff everything
|
||||
// deterministically.
|
||||
let contextual_user_message = build_environment_update_item(previous, next);
|
||||
let world_state_updates = previous
|
||||
.map(|previous| {
|
||||
let previous = build_world_state_from_turn_context_item(previous);
|
||||
build_world_state_from_turn_context(next).render_diff(&previous)
|
||||
})
|
||||
.unwrap_or_default();
|
||||
let developer_update_sections = [
|
||||
// Keep model-switch instructions first so model-specific guidance is read before
|
||||
// any other context diffs on this turn.
|
||||
@@ -255,12 +248,10 @@ pub(crate) fn build_settings_update_items(
|
||||
.flatten()
|
||||
.collect();
|
||||
|
||||
let mut items = Vec::with_capacity(2);
|
||||
let mut items = Vec::with_capacity(1 + world_state_updates.len());
|
||||
if let Some(developer_message) = build_developer_update_item(developer_update_sections) {
|
||||
items.push(developer_message);
|
||||
}
|
||||
if let Some(contextual_user_message) = contextual_user_message {
|
||||
items.push(contextual_user_message);
|
||||
}
|
||||
items.extend(world_state_updates);
|
||||
items
|
||||
}
|
||||
|
||||
@@ -222,6 +222,7 @@ pub(crate) mod time_reminder;
|
||||
mod token_budget;
|
||||
pub(crate) mod turn;
|
||||
pub(crate) mod turn_context;
|
||||
mod world_state;
|
||||
use self::config_lock::export_config_lock_if_configured;
|
||||
use self::config_lock::validate_config_lock_if_configured;
|
||||
#[cfg(test)]
|
||||
@@ -242,6 +243,8 @@ use self::turn::collect_explicit_app_ids_from_skill_items;
|
||||
use self::turn::realtime_text_for_event;
|
||||
use self::turn_context::TurnContext;
|
||||
use self::turn_context::TurnSkillsContext;
|
||||
pub(crate) use self::world_state::build_world_state_from_turn_context;
|
||||
pub(crate) use self::world_state::build_world_state_from_turn_context_item;
|
||||
#[cfg(test)]
|
||||
mod rollout_reconstruction_tests;
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
use super::turn_context::TurnContext;
|
||||
use crate::context::EnvironmentsState;
|
||||
use crate::context::world_state::WorldState;
|
||||
use codex_protocol::protocol::TurnContextItem;
|
||||
|
||||
pub(crate) fn build_world_state_from_turn_context(turn_context: &TurnContext) -> WorldState {
|
||||
let mut world_state = WorldState::default();
|
||||
if turn_context.config.include_environment_context {
|
||||
world_state.add_section(EnvironmentsState::from_turn_context(turn_context));
|
||||
}
|
||||
world_state
|
||||
}
|
||||
|
||||
pub(crate) fn build_world_state_from_turn_context_item(
|
||||
turn_context_item: &TurnContextItem,
|
||||
) -> WorldState {
|
||||
let mut world_state = WorldState::default();
|
||||
world_state.add_section(EnvironmentsState::from_turn_context_item(turn_context_item));
|
||||
world_state
|
||||
}
|
||||
Reference in New Issue
Block a user