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