Skip to main content

systemprompt_analytics/models/reporting/
request.rs

1//! CLI-facing request analytics rows.
2//!
3//! Copyright (c) systemprompt.io — Business Source License 1.1.
4//! See <https://systemprompt.io> for licensing details.
5
6use chrono::{DateTime, Utc};
7use serde::{Deserialize, Serialize};
8use sqlx::FromRow;
9use systemprompt_identifiers::{AiRequestId, ContextId, UserId};
10
11#[derive(Debug, Clone, Copy, Serialize, Deserialize, FromRow)]
12pub struct RequestStatsRow {
13    pub total: i64,
14    pub total_tokens: Option<i64>,
15    pub input_tokens: Option<i64>,
16    pub output_tokens: Option<i64>,
17    pub reasoning_tokens: Option<i64>,
18    pub cache_read_tokens: Option<i64>,
19    pub cache_creation_tokens: Option<i64>,
20    pub cost: Option<i64>,
21    pub avg_latency: Option<f64>,
22    pub cache_hits: i64,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
26pub struct ModelUsageRow {
27    pub provider: String,
28    pub model: String,
29    pub request_count: i64,
30    pub total_tokens: Option<i64>,
31    pub total_cost: Option<i64>,
32    pub avg_latency: Option<f64>,
33}
34
35#[derive(Debug, Clone, Copy, Serialize, Deserialize, FromRow)]
36pub struct RequestTrendRow {
37    pub created_at: DateTime<Utc>,
38    pub tokens_used: Option<i32>,
39    pub cost_microdollars: Option<i64>,
40    pub latency_ms: Option<i32>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
44pub struct RequestListRow {
45    pub id: AiRequestId,
46    pub provider: Option<String>,
47    pub model: Option<String>,
48    pub input_tokens: Option<i32>,
49    pub output_tokens: Option<i32>,
50    pub cost_microdollars: Option<i64>,
51    pub latency_ms: Option<i32>,
52    pub cache_hit: Option<bool>,
53    pub created_at: DateTime<Utc>,
54    pub status: String,
55    pub error_message: Option<String>,
56    pub user_id: UserId,
57}
58
59#[derive(Debug, Clone, Copy, Serialize, Deserialize, FromRow)]
60pub struct CostSummaryRow {
61    pub requests: i64,
62    pub cost: Option<i64>,
63    pub tokens: Option<i64>,
64    pub reasoning_tokens: Option<i64>,
65    pub cache_read_tokens: Option<i64>,
66    pub cache_creation_tokens: Option<i64>,
67}
68
69#[derive(Debug, Clone, Copy, Serialize, Deserialize, FromRow)]
70pub struct PreviousCostRow {
71    pub cost: Option<i64>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
75pub struct CostBreakdownRow {
76    pub name: String,
77    pub cost: i64,
78    pub requests: i64,
79    pub tokens: i64,
80}
81
82#[derive(Debug, Clone, Copy, Serialize, Deserialize, FromRow)]
83pub struct ContextSummaryRow {
84    pub conversations: i64,
85    pub ai_requests: i64,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
89pub struct ContextGroupRow {
90    pub name: String,
91    pub conversations: i64,
92    pub ai_requests: i64,
93}
94
95#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
96pub struct RecentContextRow {
97    pub context_id: ContextId,
98    pub last_activity: DateTime<Utc>,
99    pub ai_requests: i64,
100    pub model: Option<String>,
101    pub agent_name: Option<String>,
102    pub context_name: Option<String>,
103}
104
105#[derive(Debug, Clone, Copy, Serialize, Deserialize, FromRow)]
106pub struct CostTrendRow {
107    pub created_at: DateTime<Utc>,
108    pub cost_microdollars: Option<i64>,
109    pub tokens_used: Option<i32>,
110}