mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
Split DeveloperInstructions into individual fragments. (#18813)
Split DeveloperInstructions into individual fragments.
This commit is contained in:
committed by
GitHub
Unverified
parent
5fe767e8e1
commit
2a226096f6
@@ -1,5 +1,12 @@
|
||||
use crate::context::CollaborationModeInstructions;
|
||||
use crate::context::ContextualUserFragment;
|
||||
use crate::context::EnvironmentContext;
|
||||
use crate::context::ModelSwitchInstructions;
|
||||
use crate::context::PermissionsInstructions;
|
||||
use crate::context::PersonalitySpecInstructions;
|
||||
use crate::context::RealtimeEndInstructions;
|
||||
use crate::context::RealtimeStartInstructions;
|
||||
use crate::context::RealtimeStartWithInstructions;
|
||||
use crate::session::PreviousTurnSettings;
|
||||
use crate::session::turn_context::TurnContext;
|
||||
use crate::shell::Shell;
|
||||
@@ -7,7 +14,6 @@ use codex_execpolicy::Policy;
|
||||
use codex_features::Feature;
|
||||
use codex_protocol::config_types::Personality;
|
||||
use codex_protocol::models::ContentItem;
|
||||
use codex_protocol::models::DeveloperInstructions;
|
||||
use codex_protocol::models::ResponseItem;
|
||||
use codex_protocol::openai_models::ModelInfo;
|
||||
use codex_protocol::protocol::TurnContextItem;
|
||||
@@ -37,7 +43,7 @@ fn build_permissions_update_item(
|
||||
previous: Option<&TurnContextItem>,
|
||||
next: &TurnContext,
|
||||
exec_policy: &Policy,
|
||||
) -> Option<DeveloperInstructions> {
|
||||
) -> Option<String> {
|
||||
if !next.config.include_permissions_instructions {
|
||||
return None;
|
||||
}
|
||||
@@ -49,28 +55,32 @@ fn build_permissions_update_item(
|
||||
return None;
|
||||
}
|
||||
|
||||
Some(DeveloperInstructions::from_policy(
|
||||
next.sandbox_policy.get(),
|
||||
next.approval_policy.value(),
|
||||
next.config.approvals_reviewer,
|
||||
exec_policy,
|
||||
&next.cwd,
|
||||
next.features.enabled(Feature::ExecPermissionApprovals),
|
||||
next.features.enabled(Feature::RequestPermissionsTool),
|
||||
))
|
||||
Some(
|
||||
PermissionsInstructions::from_policy(
|
||||
next.sandbox_policy.get(),
|
||||
next.approval_policy.value(),
|
||||
next.config.approvals_reviewer,
|
||||
exec_policy,
|
||||
&next.cwd,
|
||||
next.features.enabled(Feature::ExecPermissionApprovals),
|
||||
next.features.enabled(Feature::RequestPermissionsTool),
|
||||
)
|
||||
.render(),
|
||||
)
|
||||
}
|
||||
|
||||
fn build_collaboration_mode_update_item(
|
||||
previous: Option<&TurnContextItem>,
|
||||
next: &TurnContext,
|
||||
) -> Option<DeveloperInstructions> {
|
||||
) -> Option<String> {
|
||||
let prev = previous?;
|
||||
if prev.collaboration_mode.as_ref() != Some(&next.collaboration_mode) {
|
||||
// If the next mode has empty developer instructions, this returns None and we emit no
|
||||
// update, so prior collaboration instructions remain in the prompt history.
|
||||
Some(DeveloperInstructions::from_collaboration_mode(
|
||||
&next.collaboration_mode,
|
||||
)?)
|
||||
Some(
|
||||
CollaborationModeInstructions::from_collaboration_mode(&next.collaboration_mode)?
|
||||
.render(),
|
||||
)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
@@ -80,28 +90,28 @@ pub(crate) fn build_realtime_update_item(
|
||||
previous: Option<&TurnContextItem>,
|
||||
previous_turn_settings: Option<&PreviousTurnSettings>,
|
||||
next: &TurnContext,
|
||||
) -> Option<DeveloperInstructions> {
|
||||
) -> Option<String> {
|
||||
match (
|
||||
previous.and_then(|item| item.realtime_active),
|
||||
next.realtime_active,
|
||||
) {
|
||||
(Some(true), false) => Some(DeveloperInstructions::realtime_end_message("inactive")),
|
||||
(Some(true), false) => Some(RealtimeEndInstructions::new("inactive").render()),
|
||||
(Some(false), true) | (None, true) => Some(
|
||||
if let Some(instructions) = next
|
||||
.config
|
||||
.experimental_realtime_start_instructions
|
||||
.as_deref()
|
||||
{
|
||||
DeveloperInstructions::realtime_start_message_with_instructions(instructions)
|
||||
RealtimeStartWithInstructions::new(instructions).render()
|
||||
} else {
|
||||
DeveloperInstructions::realtime_start_message()
|
||||
RealtimeStartInstructions.render()
|
||||
},
|
||||
),
|
||||
(Some(true), true) | (Some(false), false) => None,
|
||||
(None, false) => previous_turn_settings
|
||||
.and_then(|settings| settings.realtime_active)
|
||||
.filter(|realtime_active| *realtime_active)
|
||||
.map(|_| DeveloperInstructions::realtime_end_message("inactive")),
|
||||
.map(|_| RealtimeEndInstructions::new("inactive").render()),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +119,7 @@ pub(crate) fn build_initial_realtime_item(
|
||||
previous: Option<&TurnContextItem>,
|
||||
previous_turn_settings: Option<&PreviousTurnSettings>,
|
||||
next: &TurnContext,
|
||||
) -> Option<DeveloperInstructions> {
|
||||
) -> Option<String> {
|
||||
build_realtime_update_item(previous, previous_turn_settings, next)
|
||||
}
|
||||
|
||||
@@ -117,7 +127,7 @@ fn build_personality_update_item(
|
||||
previous: Option<&TurnContextItem>,
|
||||
next: &TurnContext,
|
||||
personality_feature_enabled: bool,
|
||||
) -> Option<DeveloperInstructions> {
|
||||
) -> Option<String> {
|
||||
if !personality_feature_enabled {
|
||||
return None;
|
||||
}
|
||||
@@ -131,7 +141,7 @@ fn build_personality_update_item(
|
||||
{
|
||||
let model_info = &next.model_info;
|
||||
let personality_message = personality_message_for(model_info, personality);
|
||||
personality_message.map(DeveloperInstructions::personality_spec_message)
|
||||
personality_message.map(|message| PersonalitySpecInstructions::new(message).render())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
@@ -151,7 +161,7 @@ pub(crate) fn personality_message_for(
|
||||
pub(crate) fn build_model_instructions_update_item(
|
||||
previous_turn_settings: Option<&PreviousTurnSettings>,
|
||||
next: &TurnContext,
|
||||
) -> Option<DeveloperInstructions> {
|
||||
) -> Option<String> {
|
||||
let previous_turn_settings = previous_turn_settings?;
|
||||
if previous_turn_settings.model == next.model_info.slug {
|
||||
return None;
|
||||
@@ -162,9 +172,7 @@ pub(crate) fn build_model_instructions_update_item(
|
||||
return None;
|
||||
}
|
||||
|
||||
Some(DeveloperInstructions::model_switch_message(
|
||||
model_instructions,
|
||||
))
|
||||
Some(ModelSwitchInstructions::new(model_instructions).render())
|
||||
}
|
||||
|
||||
pub(crate) fn build_developer_update_item(text_sections: Vec<String>) -> Option<ResponseItem> {
|
||||
@@ -218,7 +226,6 @@ pub(crate) fn build_settings_update_items(
|
||||
]
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.map(DeveloperInstructions::into_text)
|
||||
.collect();
|
||||
|
||||
let mut items = Vec::with_capacity(2);
|
||||
|
||||
Reference in New Issue
Block a user