distri_types/api/
usage.rs1use chrono::{DateTime, Utc};
9use schemars::JsonSchema;
10use serde::{Deserialize, Serialize};
11use utoipa::ToSchema;
12use uuid::Uuid;
13
14#[derive(
20 Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize, Default, ToSchema, JsonSchema,
21)]
22#[serde(rename_all = "lowercase")]
23pub enum Bucket {
24 #[default]
25 Day,
26 Week,
27 Month,
28 None,
29}
30
31#[derive(Debug, Clone, Default, Serialize, Deserialize, ToSchema, JsonSchema)]
33pub struct UsageTotals {
34 pub messages: i64,
35 pub input_tokens: i64,
36 pub output_tokens: i64,
37 pub cached_tokens: i64,
38 pub total_tokens: i64,
39 pub cost_usd: f64,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
44pub struct UsageBucket {
45 pub ts: Option<String>,
47 pub messages: i64,
48 pub input_tokens: i64,
49 pub output_tokens: i64,
50 pub cached_tokens: i64,
51 pub total_tokens: i64,
52 pub cost_usd: f64,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
58pub struct AppliedFilters {
59 pub user_id: Option<Uuid>,
61 pub bot_id: Option<Uuid>,
63 pub channel_id: Option<Uuid>,
65 pub thread_id: Option<String>,
66 pub agent_id: Option<String>,
67 pub since: String,
69 pub until: String,
71 pub bucket: Bucket,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
76pub struct UsageStatsResponse {
77 pub totals: UsageTotals,
78 pub buckets: Vec<UsageBucket>,
79 pub filters_applied: AppliedFilters,
80}
81
82#[derive(Debug, Clone, Deserialize, ToSchema, JsonSchema)]
87pub struct UsageStatsQuery {
88 pub user_id: Option<Uuid>,
90 pub bot_id: Option<Uuid>,
92 pub channel_id: Option<Uuid>,
94 pub thread_id: Option<String>,
95 pub agent_id: Option<String>,
96 pub since: Option<DateTime<Utc>>,
97 pub until: Option<DateTime<Utc>>,
98 pub bucket: Option<Bucket>,
99}