use serde::{Deserialize, Serialize};
use crate::usage::Cost;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Budget {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_tokens: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_calls: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_cost: Option<Cost>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub wall_clock: Option<u64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum BudgetExceededReason {
Tokens,
Calls,
Cost,
WallClock,
Cancelled,
}