systemprompt_logging/trace/models/
ai.rs1use chrono::{DateTime, Utc};
5use serde::{Deserialize, Serialize};
6use systemprompt_identifiers::{AiRequestId, TraceId};
7
8#[derive(Debug, Clone)]
9pub struct AiRequestFilter {
10 pub limit: i64,
11 pub since: Option<DateTime<Utc>>,
12 pub model: Option<String>,
13 pub provider: Option<String>,
14}
15
16impl AiRequestFilter {
17 pub const fn new(limit: i64) -> Self {
18 Self {
19 limit,
20 since: None,
21 model: None,
22 provider: None,
23 }
24 }
25
26 pub const fn with_since(mut self, since: DateTime<Utc>) -> Self {
27 self.since = Some(since);
28 self
29 }
30
31 systemprompt_models::builder_methods! {
32 with_model(model) -> String,
33 with_provider(provider) -> String,
34 }
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct AiRequestListItem {
39 pub id: AiRequestId,
40 pub created_at: DateTime<Utc>,
41 pub trace_id: Option<TraceId>,
42 pub provider: String,
43 pub model: String,
44 pub input_tokens: Option<i32>,
45 pub output_tokens: Option<i32>,
46 pub cost_microdollars: i64,
47 pub latency_ms: Option<i32>,
48 pub status: String,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct AiRequestDetail {
53 pub id: AiRequestId,
54 pub provider: String,
55 pub model: String,
56 pub input_tokens: Option<i32>,
57 pub output_tokens: Option<i32>,
58 pub cost_microdollars: i64,
59 pub latency_ms: Option<i32>,
60 pub status: String,
61 pub error_message: Option<String>,
62}
63
64#[derive(Debug, Clone, Default, Serialize, Deserialize)]
65pub struct AiRequestStats {
66 pub total_requests: i64,
67 pub total_input_tokens: i64,
68 pub total_output_tokens: i64,
69 pub total_cost_microdollars: i64,
70 pub avg_latency_ms: i64,
71 pub by_provider: Vec<ProviderStatsRow>,
72 pub by_model: Vec<ModelStatsRow>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct ProviderStatsRow {
77 pub provider: String,
78 pub request_count: i64,
79 pub total_tokens: i64,
80 pub total_cost_microdollars: i64,
81 pub avg_latency_ms: i64,
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize)]
85pub struct ModelStatsRow {
86 pub model: String,
87 pub provider: String,
88 pub request_count: i64,
89 pub total_tokens: i64,
90 pub total_cost_microdollars: i64,
91 pub avg_latency_ms: i64,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
95pub struct AiRequestInfo {
96 pub id: AiRequestId,
97 pub provider: String,
98 pub model: String,
99 pub max_tokens: Option<i32>,
100 pub input_tokens: Option<i32>,
101 pub output_tokens: Option<i32>,
102 pub cost_microdollars: i64,
103 pub latency_ms: Option<i32>,
104}
105
106#[derive(Debug, Clone, Serialize, Deserialize)]
107pub struct ConversationMessage {
108 pub role: String,
109 pub content: String,
110 pub sequence_number: i32,
111}