systemprompt_models/api/cloud/
usage.rs1use serde::{Deserialize, Serialize};
8use systemprompt_identifiers::ContextId;
9
10#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize)]
11pub struct UsageWindow {
12 pub requests: i64,
13 pub tokens: i64,
14 pub cost_microdollars: i64,
15 #[serde(default, skip_serializing_if = "Option::is_none")]
16 pub previous_cost_microdollars: Option<i64>,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct ModelShare {
21 pub model: String,
22 pub requests: i64,
23 pub tokens: i64,
24 pub cost_microdollars: i64,
25 pub token_share: f64,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct ConversationGroup {
30 pub name: String,
31 pub conversations: i64,
32 pub ai_requests: i64,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct RecentConversationSummary {
37 pub context_id: ContextId,
38 pub last_activity: chrono::DateTime<chrono::Utc>,
39 pub ai_requests: i64,
40 #[serde(default, skip_serializing_if = "Option::is_none")]
41 pub model: Option<String>,
42 #[serde(default, skip_serializing_if = "Option::is_none")]
43 pub agent_name: Option<String>,
44}
45
46#[derive(Debug, Clone, Default, Serialize, Deserialize)]
47pub struct ConversationSummary {
48 pub total_conversations: i64,
49 pub total_ai_requests: i64,
50 #[serde(default)]
51 pub by_model: Vec<ConversationGroup>,
52 #[serde(default)]
53 pub by_agent: Vec<ConversationGroup>,
54 #[serde(default)]
55 pub recent: Vec<RecentConversationSummary>,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct BridgeProfileUsage {
60 pub d1: UsageWindow,
61 pub d7: UsageWindow,
62 pub d30: UsageWindow,
63 #[serde(default)]
64 pub top_models: Vec<ModelShare>,
65 #[serde(default)]
66 pub conversations: ConversationSummary,
67}