mirror of
https://github.com/openai/codex.git
synced 2026-11-08 20:40:33 +00:00
Support model-owned token budget defaults (#35608)
## What changed - Add token-budget settings to model catalog messages and apply them when the feature is enabled without explicit token-budget configuration. - Keep explicit user settings authoritative, reject invalid catalog defaults, and preserve resolved defaults in exported config locks. - Manage context-window guidance through world state so it updates once when the active model changes while retaining prior conversation history. ## Testing - Cover catalog defaults, explicit overrides, disabled features, invalid values, config-lock replay, and model switching. GitOrigin-RevId: 54544fefaa14b09f5ef5bad9967a13c52b87b0fe
This commit is contained in:
@@ -157,7 +157,9 @@ fn save_config_resolved_fields(
|
||||
resolved_config_to_toml(&config.multi_agent_v2, "features.multi_agent_v2")?;
|
||||
multi_agent_v2.enabled = Some(config.features.enabled(Feature::MultiAgentV2));
|
||||
features.multi_agent_v2 = Some(FeatureToml::Config(multi_agent_v2));
|
||||
if let Some(token_budget) = config.token_budget.as_ref() {
|
||||
if let Some(token_budget) = config.token_budget.as_ref()
|
||||
&& super::token_budget::has_explicit_settings(config)
|
||||
{
|
||||
let mut token_budget: TokenBudgetConfigToml =
|
||||
resolved_config_to_toml(token_budget, "features.token_budget")?;
|
||||
token_budget.enabled = Some(config.features.enabled(Feature::TokenBudget));
|
||||
@@ -387,6 +389,29 @@ mod tests {
|
||||
assert_eq!(lockfile.version, crate::config_lock::CONFIG_LOCK_VERSION);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn lock_preserves_model_owned_token_budget_defaults() {
|
||||
let mut sc = crate::session::tests::make_session_configuration_for_tests().await;
|
||||
let mut config = (*sc.original_config_do_not_use).clone();
|
||||
config.token_budget = Some(crate::config::TokenBudgetConfig::default());
|
||||
config
|
||||
.features
|
||||
.enable(Feature::TokenBudget)
|
||||
.expect("token_budget should be enableable in tests");
|
||||
sc.original_config_do_not_use = Arc::new(config);
|
||||
|
||||
let lockfile = sc.to_config_lockfile_toml().expect("lock should serialize");
|
||||
|
||||
assert_eq!(
|
||||
lockfile
|
||||
.config
|
||||
.features
|
||||
.as_ref()
|
||||
.and_then(|features| features.token_budget.as_ref()),
|
||||
Some(&FeatureToml::Enabled(true))
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn lock_skips_session_values_when_model_catalog_fields_are_not_saved() {
|
||||
let mut sc = crate::session::tests::make_session_configuration_for_tests().await;
|
||||
|
||||
Reference in New Issue
Block a user