use llm_budget::{AgentBudget, BudgetError, FleetAllocator, ModelTier};
#[tokio::main]
async fn main() -> Result<(), BudgetError> {
let agent = AgentBudget::new("researcher", 5.0, ModelTier::Premium, 0.2)?;
let receipt = agent.charge_model("gpt-4o", 1_200, 400, None, None).await?;
println!("that call cost ${:.6}, ${:.4} left", receipt.cost_usd, agent.remaining_usd());
let fleet = FleetAllocator::new(100.0, ModelTier::Standard, 0.2)?;
fleet.register_agent("planner", 40.0)?;
fleet.register_agent("coder", 40.0)?;
assert!(fleet.register_agent("extra", 40.0).is_err());
fleet.charge_agent_model("coder", "claude-sonnet-4-5", 2_000, 800, None, None).await?;
fleet.reallocate("planner", "coder", 10.0).await?;
fleet.kill_all("runaway loop detected");
assert!(fleet.charge_agent_model("coder", "gpt-4o", 10, 10, None, None).await.is_err());
for snap in fleet.fleet_snapshot().await {
println!("{} spent ${:.4} of ${:.2}", snap.agent_id, snap.spent_usd, snap.limit_usd);
}
Ok(())
}