mirror of
https://github.com/openai/codex.git
synced 2026-10-21 17:48:44 +00:00
handle Features::Personality gracefully
This commit is contained in:
@@ -114,7 +114,7 @@ async fn base_instructions_override_disables_personality_template() {
|
||||
config.base_instructions = Some("override instructions".to_string());
|
||||
|
||||
let model_info =
|
||||
codex_core::test_support::construct_model_info_offline("gpt-5.3-codex", &config);
|
||||
codex_core::test_support::construct_model_info_offline("exp-codex-personality", &config);
|
||||
|
||||
assert_eq!(model_info.model_messages, None);
|
||||
assert_eq!(model_info.get_model_instructions(config.personality), "");
|
||||
@@ -443,7 +443,7 @@ async fn user_turn_personality_same_value_does_not_add_update_message() -> anyho
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
||||
async fn instructions_are_empty_if_feature_disabled() -> anyhow::Result<()> {
|
||||
async fn instructions_use_default_if_feature_disabled() -> anyhow::Result<()> {
|
||||
let codex_home = TempDir::new().expect("create temp dir");
|
||||
let mut config = load_default_config_for_test(&codex_home).await;
|
||||
config
|
||||
@@ -453,8 +453,13 @@ async fn instructions_are_empty_if_feature_disabled() -> anyhow::Result<()> {
|
||||
config.personality = Some(Personality::Friendly);
|
||||
|
||||
let model_info =
|
||||
codex_core::test_support::construct_model_info_offline("gpt-5.3-codex", &config);
|
||||
assert_eq!(model_info.get_model_instructions(config.personality), "");
|
||||
codex_core::test_support::construct_model_info_offline("exp-codex-personality", &config);
|
||||
let default_instructions = model_info.get_model_instructions(/*personality*/ None);
|
||||
assert!(!default_instructions.is_empty());
|
||||
assert_eq!(
|
||||
model_info.get_model_instructions(config.personality),
|
||||
default_instructions
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -512,6 +517,11 @@ async fn user_turn_personality_skips_if_feature_disabled() -> anyhow::Result<()>
|
||||
|
||||
let requests = resp_mock.requests();
|
||||
assert_eq!(requests.len(), 2, "expected two requests");
|
||||
assert!(!requests[0].instructions_text().is_empty());
|
||||
assert_eq!(
|
||||
requests[0].instructions_text(),
|
||||
requests[1].instructions_text()
|
||||
);
|
||||
let request = requests
|
||||
.last()
|
||||
.expect("expected personality update request");
|
||||
|
||||
@@ -52,8 +52,19 @@ pub fn with_config_overrides(mut model: ModelInfo, config: &ModelsManagerConfig)
|
||||
};
|
||||
}
|
||||
|
||||
if config.base_instructions.is_some() || !config.personality_enabled {
|
||||
if config.base_instructions.is_some() {
|
||||
model.model_messages = None;
|
||||
} else if !config.personality_enabled
|
||||
&& let Some(model_messages) = model.model_messages.as_mut()
|
||||
{
|
||||
let personality_default = model_messages
|
||||
.get_personality_message(/*personality*/ None)
|
||||
.unwrap_or_default();
|
||||
if let Some(instructions_template) = model_messages.instructions_template.as_mut() {
|
||||
*instructions_template =
|
||||
instructions_template.replace(PERSONALITY_PLACEHOLDER, &personality_default);
|
||||
}
|
||||
model_messages.instructions_variables = None;
|
||||
}
|
||||
|
||||
model
|
||||
|
||||
@@ -90,8 +90,16 @@ fn base_instructions_override_disables_model_messages() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn disabled_personality_clears_model_messages() {
|
||||
let model = model_info_from_slug("gpt-5.2-codex");
|
||||
fn disabled_personality_uses_default_model_messages() {
|
||||
let mut model = model_info_from_slug("gpt-5.2-codex");
|
||||
model
|
||||
.model_messages
|
||||
.as_mut()
|
||||
.expect("model messages")
|
||||
.instructions_variables
|
||||
.as_mut()
|
||||
.expect("instruction variables")
|
||||
.personality_default = Some("default personality".to_string());
|
||||
let config = ModelsManagerConfig {
|
||||
personality_enabled: false,
|
||||
..Default::default()
|
||||
@@ -99,7 +107,12 @@ fn disabled_personality_clears_model_messages() {
|
||||
|
||||
let updated = with_config_overrides(model.clone(), &config);
|
||||
let mut expected = model;
|
||||
expected.model_messages = None;
|
||||
expected.model_messages = Some(ModelMessages {
|
||||
instructions_template: Some(format!(
|
||||
"{DEFAULT_PERSONALITY_HEADER}\n\ndefault personality\n\n{BASE_INSTRUCTIONS}"
|
||||
)),
|
||||
instructions_variables: None,
|
||||
});
|
||||
|
||||
assert_eq!(updated, expected);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user