use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Observation {
pub provider: String,
pub capability: Option<String>,
pub usage: Usage,
pub outcome: Outcome,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Usage {
pub requests: u64,
pub tokens: Option<u64>,
pub bytes: Option<u64>,
pub cost_micro_usd: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Outcome {
pub status: StatusClass,
pub latency_ms: u64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum StatusClass {
Success,
RateLimited,
Forbidden,
ServerError,
Timeout,
ClientError,
}