use super::client_profile::ClientEfficiencyProfile;
#[derive(Debug, Clone, Copy)]
pub struct BrokerBudget {
pub context_tokens: usize,
pub kernel_tokens: usize,
pub schema_tokens: usize,
}
pub struct ContextBroker {
profile: ClientEfficiencyProfile,
}
impl ContextBroker {
pub fn new(profile: ClientEfficiencyProfile) -> Self {
Self { profile }
}
pub fn compute_budget(&self) -> BrokerBudget {
let window = self.profile.context_window;
BrokerBudget {
context_tokens: window.saturating_mul(70) / 100,
kernel_tokens: window.saturating_mul(10) / 100,
schema_tokens: window.saturating_mul(20) / 100,
}
}
}
#[cfg(test)]
pub mod tests {
use super::ContextBroker;
use crate::core::context_kernel::client_profile::ProfileBuilder;
#[test]
fn budget_split_proportional() {
let profile = ProfileBuilder::new("broker-test")
.context_window(100_000)
.build();
let budget = ContextBroker::new(profile).compute_budget();
assert_eq!(budget.context_tokens, 70_000);
assert_eq!(budget.kernel_tokens, 10_000);
assert_eq!(budget.schema_tokens, 20_000);
}
}