use super::Orchestrator;
use crate::shared::config::ServerMode;
pub(super) fn pool_for(
mode: ServerMode,
reported_slots: Option<u32>,
context_budget: impl FnOnce() -> Option<u64>,
) -> Option<u64> {
match mode {
ServerMode::Managed if reported_slots == Some(1) => None,
ServerMode::Managed => context_budget(),
ServerMode::External => reported_slots
.filter(|&n| n > 1)
.and_then(|_| context_budget()),
ServerMode::OpenAi | ServerMode::Gemini | ServerMode::Claude | ServerMode::Grok => None,
}
}
impl Orchestrator {
pub(super) fn session_pool(&mut self) -> Option<u64> {
let mode = self.config.engine.mode;
let slots = self.slots.known();
pool_for(mode, slots, || self.context_budget())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn managed_shares_the_context_budget_unless_one_slot_is_reported() {
assert_eq!(
pool_for(ServerMode::Managed, Some(4), || Some(16384)),
Some(16384)
);
assert_eq!(
pool_for(ServerMode::Managed, None, || Some(8192)),
Some(8192)
);
assert_eq!(
pool_for(ServerMode::Managed, Some(1), || unreachable!("not asked")),
None
);
assert_eq!(pool_for(ServerMode::Managed, None, || None), None);
}
#[test]
fn external_needs_more_than_one_reported_slot() {
assert_eq!(
pool_for(ServerMode::External, Some(4), || Some(4096)),
Some(4096)
);
assert_eq!(
pool_for(ServerMode::External, Some(1), || unreachable!("not asked")),
None
);
assert_eq!(
pool_for(ServerMode::External, None, || unreachable!("not asked")),
None
);
}
#[test]
fn the_clouds_have_no_pool() {
for mode in [
ServerMode::OpenAi,
ServerMode::Gemini,
ServerMode::Claude,
ServerMode::Grok,
] {
assert_eq!(
pool_for(mode, Some(4), || unreachable!("not asked")),
None,
"{mode:?}"
);
}
}
}