handle Features::Personality gracefully

This commit is contained in:
Dylan Hurd
2026-07-06 15:42:13 -07:00
parent 90da93fce5
commit 07587b746b
3 changed files with 42 additions and 8 deletions
+14 -4
View File
@@ -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");
+12 -1
View File
@@ -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);
}