mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
[codex] add rollout token budget configuration (varlength 1/N) (#28746)
## What This PR defines the structured configuration contract for shared rollout token budgets (across ALL agent threads under 1 rollout). ```toml [features.rollout_budget] enabled = true limit_tokens = 100000 reminder_interval_tokens = 10000 sampling_token_weight = 1.0 prefill_token_weight = 0.1 ``` The reminder interval defaults to 10% of the rollout limit. Sampling and prefill weights default to `1.0`. ## Scope This PR only defines and validates configuration. It does not track usage, inject reminders, or stop a rollout. Accounting and reminders are implemented in the stacked follow-up #28494. The existing `token_budget` feature remains unchanged. `rollout_budget` has its own feature key and configuration type. ## Tests The config test verifies that the structured fields resolve into `RolloutBudgetConfig` and do not enable the existing `token_budget` feature. Local checks: - `just write-config-schema` - `just test -p codex-core load_config_resolves_rollout_budget` - `cargo check -p codex-thread-manager-sample` - `git diff --check` The full workspace test suite was not run locally.
This commit is contained in:
committed by
GitHub
Unverified
parent
c73296a0f0
commit
ecc4c30e28
@@ -6,6 +6,7 @@ use codex_features::Feature;
|
||||
use codex_features::FeatureToml;
|
||||
use codex_features::FeaturesToml;
|
||||
use codex_features::MultiAgentV2ConfigToml;
|
||||
use codex_features::RolloutBudgetConfigToml;
|
||||
use codex_protocol::ThreadId;
|
||||
|
||||
use crate::config::Config;
|
||||
@@ -148,6 +149,12 @@ 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(rollout_budget) = config.rollout_budget.as_ref() {
|
||||
let mut rollout_budget: RolloutBudgetConfigToml =
|
||||
resolved_config_to_toml(rollout_budget, "features.rollout_budget")?;
|
||||
rollout_budget.enabled = Some(config.features.enabled(Feature::RolloutBudget));
|
||||
features.rollout_budget = Some(FeatureToml::Config(rollout_budget));
|
||||
}
|
||||
lock_config.memories = Some(resolved_config_to_toml::<MemoriesToml>(
|
||||
&config.memories,
|
||||
"memories",
|
||||
@@ -209,6 +216,18 @@ mod tests {
|
||||
#[tokio::test]
|
||||
async fn lock_contains_prompts_and_materializes_features() {
|
||||
let mut sc = crate::session::tests::make_session_configuration_for_tests().await;
|
||||
let mut config = (*sc.original_config_do_not_use).clone();
|
||||
config.rollout_budget = Some(crate::config::RolloutBudgetConfig {
|
||||
limit_tokens: 100_000,
|
||||
reminder_interval_tokens: 10_000,
|
||||
sampling_token_weight: 1.0,
|
||||
prefill_token_weight: 0.25,
|
||||
});
|
||||
config
|
||||
.features
|
||||
.enable(Feature::RolloutBudget)
|
||||
.expect("rollout_budget should be enableable in tests");
|
||||
sc.original_config_do_not_use = Arc::new(config);
|
||||
sc.base_instructions = "resolved instructions".to_string();
|
||||
sc.developer_instructions = Some("resolved developer instructions".to_string());
|
||||
sc.compact_prompt = Some("resolved compact prompt".to_string());
|
||||
@@ -273,6 +292,17 @@ mod tests {
|
||||
})
|
||||
));
|
||||
|
||||
assert_eq!(
|
||||
features.rollout_budget,
|
||||
Some(FeatureToml::Config(RolloutBudgetConfigToml {
|
||||
enabled: Some(true),
|
||||
limit_tokens: Some(100_000),
|
||||
reminder_interval_tokens: Some(10_000),
|
||||
sampling_token_weight: Some(1.0),
|
||||
prefill_token_weight: Some(0.25),
|
||||
}))
|
||||
);
|
||||
|
||||
assert_eq!(lockfile.version, crate::config_lock::CONFIG_LOCK_VERSION);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user