Skip to main content

systemprompt_analytics/models/cli/
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 cost: Option<i64>,
18    pub avg_latency: Option<f64>,
19    pub cache_hits: i64,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
23pub struct ModelUsageRow {
24    pub provider: String,
25    pub model: String,
26    pub request_count: i64,
27    pub total_tokens: Option<i64>,
28    pub total_cost: Option<i64>,
29    pub avg_latency: Option<f64>,
30}
31
32#[derive(Debug, Clone, Copy, Serialize, Deserialize, FromRow)]
33pub struct RequestTrendRow {
34    pub created_at: DateTime<Utc>,
35    pub tokens_used: Option<i32>,
36    pub cost_microdollars: Option<i64>,
37    pub latency_ms: Option<i32>,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
41pub struct RequestListRow {
42    pub id: AiRequestId,
43    /// `None` for a request rejected before routing resolved a provider.
44    pub provider: Option<String>,
45    /// `None` for a request rejected before a model was read.
46    pub model: Option<String>,
47    pub input_tokens: Option<i32>,
48    pub output_tokens: Option<i32>,
49    pub cost_microdollars: Option<i64>,
50    pub latency_ms: Option<i32>,
51    pub cache_hit: Option<bool>,
52    pub created_at: DateTime<Utc>,
53    pub status: String,
54    pub error_message: Option<String>,
55    pub user_id: UserId,
56}
57
58#[derive(Debug, Clone, Copy, Serialize, Deserialize, FromRow)]
59pub struct CostSummaryRow {
60    pub requests: i64,
61    pub cost: Option<i64>,
62    pub tokens: Option<i64>,
63}
64
65#[derive(Debug, Clone, Copy, Serialize, Deserialize, FromRow)]
66pub struct PreviousCostRow {
67    pub cost: Option<i64>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
71pub struct CostBreakdownRow {
72    pub name: String,
73    pub cost: i64,
74    pub requests: i64,
75    pub tokens: i64,
76}
77
78#[derive(Debug, Clone, Copy, Serialize, Deserialize, FromRow)]
79pub struct ContextSummaryRow {
80    pub conversations: i64,
81    pub ai_requests: i64,
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
85pub struct ContextGroupRow {
86    pub name: String,
87    pub conversations: i64,
88    pub ai_requests: i64,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
92pub struct RecentContextRow {
93    pub context_id: ContextId,
94    pub last_activity: DateTime<Utc>,
95    pub ai_requests: i64,
96    pub model: Option<String>,
97    pub agent_name: Option<String>,
98}
99
100#[derive(Debug, Clone, Copy, Serialize, Deserialize, FromRow)]
101pub struct CostTrendRow {
102    pub created_at: DateTime<Utc>,
103    pub cost_microdollars: Option<i64>,
104    pub tokens_used: Option<i32>,
105}