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