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:
rka-oai
2026-07-27 12:52:37 +00:00
committed by copyberry
parent 16d7daad7c
commit fbe65995bb
17 changed files with 742 additions and 72 deletions
@@ -115,6 +115,7 @@ fn clear_instruction_messages(model: &mut ModelInfo) {
if model_messages.approvals.is_none()
&& model_messages.auto_review.is_none()
&& model_messages.permissions.is_none()
&& model_messages.token_budget.is_none()
{
model.model_messages = None;
}
@@ -181,6 +182,7 @@ fn local_personality_messages_for_slug(slug: &str) -> Option<ModelMessages> {
approvals: None,
auto_review: None,
permissions: None,
token_budget: None,
}),
_ => None,
}
@@ -33,6 +33,7 @@ fn base_instruction_override_preserves_catalog_approval_messages() {
approvals: Some(approvals.clone()),
auto_review: None,
permissions: None,
token_budget: None,
});
let config = ModelsManagerConfig {
base_instructions: Some("override".to_string()),
@@ -49,6 +50,7 @@ fn base_instruction_override_preserves_catalog_approval_messages() {
approvals: Some(approvals),
auto_review: None,
permissions: None,
token_budget: None,
})
);
}
@@ -68,6 +70,7 @@ fn disabled_personality_preserves_catalog_approval_messages() {
approvals: Some(approvals.clone()),
auto_review: None,
permissions: None,
token_budget: None,
});
let config = ModelsManagerConfig {
personality_enabled: false,
@@ -84,6 +87,7 @@ fn disabled_personality_preserves_catalog_approval_messages() {
approvals: Some(approvals),
auto_review: None,
permissions: None,
token_budget: None,
})
);
}
@@ -101,6 +105,7 @@ fn base_instruction_override_preserves_catalog_auto_review_messages() {
approvals: None,
auto_review: Some(auto_review.clone()),
permissions: None,
token_budget: None,
});
let config = ModelsManagerConfig {
base_instructions: Some("override".to_string()),
@@ -117,6 +122,7 @@ fn base_instruction_override_preserves_catalog_auto_review_messages() {
approvals: None,
auto_review: Some(auto_review),
permissions: None,
token_budget: None,
})
);
}
@@ -135,6 +141,7 @@ fn base_instruction_override_preserves_catalog_permission_messages() {
approvals: None,
auto_review: None,
permissions: Some(permissions.clone()),
token_budget: None,
});
let config = ModelsManagerConfig {
base_instructions: Some("override".to_string()),
@@ -151,6 +158,7 @@ fn base_instruction_override_preserves_catalog_permission_messages() {
approvals: None,
auto_review: None,
permissions: Some(permissions),
token_budget: None,
})
);
}
@@ -187,6 +195,7 @@ fn personality_none_strips_catalog_instruction_sources_through_the_next_h1() {
approvals: None,
auto_review: None,
permissions: None,
token_budget: None,
});
let updated = with_config_overrides(model, &config);