use crate::message::Response;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ModelTier {
Standard,
Flagship,
}
#[derive(Debug, Clone)]
pub struct RunConfig {
pub max_turns: u32,
pub token_budget: Option<u64>,
}
impl Default for RunConfig {
fn default() -> Self {
Self {
max_turns: 50,
token_budget: None,
}
}
}
pub fn budget_exhausted(spent: u64, budget: Option<u64>) -> bool {
budget.is_some_and(|b| spent >= b)
}
#[allow(clippy::large_enum_variant)]
#[derive(Debug)]
pub enum RunOutcome {
EndTurn(Response),
MaxTurns,
BudgetExhausted,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn budget_none_is_never_exhausted() {
assert!(!budget_exhausted(u64::MAX, None));
}
#[test]
fn budget_exhausted_at_and_past_limit() {
assert!(!budget_exhausted(99, Some(100)));
assert!(budget_exhausted(100, Some(100)));
assert!(budget_exhausted(101, Some(100)));
}
#[test]
fn run_config_default_has_no_budget() {
assert_eq!(RunConfig::default().token_budget, None);
}
}