Skip to main content

codex_cost/
models.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3
4pub const UNKNOWN: &str = "Unknown";
5
6#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
7pub struct TokenUsage {
8    pub input_tokens: u64,
9    pub cached_input_tokens: u64,
10    pub output_tokens: u64,
11    pub reasoning_output_tokens: u64,
12    pub total_tokens: u64,
13}
14
15#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
16pub struct UsageEvent {
17    pub timestamp: DateTime<Utc>,
18    pub session_id: String,
19    pub thread: String,
20    pub project: String,
21    pub model: String,
22    pub effort: String,
23    pub context_window: Option<u64>,
24    pub usage: TokenUsage,
25    pub cumulative_total_tokens: Option<u64>,
26    pub source_file: String,
27}
28
29#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
30pub struct UsageWarning {
31    pub file: String,
32    pub line: Option<usize>,
33    pub message: String,
34}
35
36#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
37pub struct UsageLoad {
38    pub events: Vec<UsageEvent>,
39    pub warnings: Vec<UsageWarning>,
40    pub session_count: usize,
41}
42
43#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
44pub struct Totals {
45    pub all_time_tokens: u64,
46    pub today_tokens: u64,
47    pub last_7_days_tokens: u64,
48    pub event_count: usize,
49    pub session_count: usize,
50    pub input_tokens: u64,
51    pub cached_input_tokens: u64,
52    pub output_tokens: u64,
53    pub reasoning_output_tokens: u64,
54}
55
56#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
57pub struct DistributionPoint {
58    pub label: String,
59    pub total_tokens: u64,
60    pub event_count: usize,
61}
62
63#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
64pub struct TimelinePoint {
65    pub bucket: String,
66    pub total_tokens: u64,
67    pub event_count: usize,
68}
69
70#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
71pub struct DimensionDistributions {
72    pub projects: Vec<DistributionPoint>,
73    pub models: Vec<DistributionPoint>,
74    pub threads: Vec<DistributionPoint>,
75    pub efforts: Vec<DistributionPoint>,
76    pub context_windows: Vec<DistributionPoint>,
77}
78
79#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
80pub struct UsageSummary {
81    pub generated_at: DateTime<Utc>,
82    pub totals: Totals,
83    pub timeline: Vec<TimelinePoint>,
84    pub distributions: DimensionDistributions,
85    pub events: Vec<UsageEvent>,
86    pub warnings: Vec<UsageWarning>,
87}