Allow models to enable token budgeting by default (#41803)

## What changed

- Add model metadata flags for enabling token budgeting and its history-notes extension.
- Apply those activation defaults once at thread startup when the user has not explicitly configured token budgeting, while respecting managed feature requirements.
- Continue resolving model-owned prompts for the active model so model switches can use their own token-budget guidance.

## Testing

- Update the token-budget integration test to verify that model metadata activates the feature without manual configuration.

GitOrigin-RevId: 73a32623eaeabb9243e240c43da7a5e7e93e9a19
This commit is contained in:
pmccrary-oai authored and copyberry committed 2026-08-31 08:31:23 +00:00
1 parent a9519cbcdd
commit d58d0e5841
8 files changed
+60 -12

No files matched your search

+2
View File
@@ -582,6 +582,8 @@ async fn review_uses_updated_turn_permissions_and_approval_policy() {
fn model_defaults(guidance_message: &str) -> ModelTokenBudgetConfig {
ModelTokenBudgetConfig {
enabled: false,
use_history_notes_extension: false,
reminder_threshold_tokens: 6_144,
reminder_message_template: "Reminder: {n_remaining} tokens remain.".to_string(),
guidance_message: guidance_message.to_string(),
@@ -430,6 +430,8 @@ async fn active_model_switch_resolves_token_budget_from_original_preferences(
.as_mut()
.expect("model messages")
.token_budget = (initial_model || destination_has_guidance).then(|| ModelTokenBudgetConfig {
enabled: false,
use_history_notes_extension: false,
reminder_threshold_tokens: if initial_model { 8_000 } else { 2_000 },
reminder_message_template: format!(
"Reminder for {slug}: {{n_remaining}} tokens remain."
+5 -12
View File
@@ -63,6 +63,8 @@ const AUTO_COMPACT_FALLBACK_PROMPT: &str = "Save the important state before roll
fn model_token_budget_config() -> ModelTokenBudgetConfig {
ModelTokenBudgetConfig {
enabled: false,
use_history_notes_extension: false,
reminder_threshold_tokens: 6_144,
reminder_message_template: "Model reminder: {n_remaining} tokens remain.".to_string(),
guidance_message: "Use the model-owned context-window guidance.".to_string(),
@@ -295,16 +297,11 @@ async fn token_budget_uses_model_message_defaults() -> Result<()> {
let server = start_mock_server().await;
let response = mount_sse_once(&server, sse_completed("resp-1")).await;
let model_defaults = model_token_budget_config();
let mut model_defaults = model_token_budget_config();
model_defaults.enabled = true;
model_defaults.use_history_notes_extension = true;
let expected_guidance = model_defaults.guidance_message.clone();
let test = test_codex()
.with_pre_build_hook(|home| {
std::fs::write(
home.join("config.toml"),
"[features.token_budget]\nenabled = true\nuse_history_notes_extension = true\n",
)
.expect("write token-budget configuration");
})
.with_model_info_override("gpt-5.2", move |model_info| {
model_info
.model_messages
@@ -314,10 +311,6 @@ async fn token_budget_uses_model_message_defaults() -> Result<()> {
})
.with_config(|config| {
config.model_context_window = Some(CONFIGURED_CONTEXT_WINDOW);
config
.features
.enable(Feature::TokenBudget)
.expect("test config should allow token budget");
})
.build_with_auto_env(&server)
.await?;