1use serde::{Deserialize, Serialize};
2use time::OffsetDateTime;
3use uuid::Uuid;
4
5#[derive(Debug, Clone)]
7pub struct PolicyVersionInfo {
8 pub user_id: Uuid,
9 pub policy_version: u64,
10 pub generated_at: OffsetDateTime,
11}
12
13#[derive(Debug, Clone)]
15pub struct PolicySnapshot {
16 pub user_id: Uuid,
17 pub policy_version: u64,
18 pub model_catalog: Vec<ModelCatalogEntry>,
19 pub kill_switches: KillSwitches,
20}
21
22#[allow(clippy::struct_excessive_bools)]
24#[derive(Debug, Clone, Default, Serialize, Deserialize)]
25pub struct KillSwitches {
26 pub disable_premium_tier: bool,
27 pub force_standard_tier: bool,
28 pub disable_web_search: bool,
29 pub disable_file_search: bool,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct ModelCatalogEntry {
35 pub model_id: String,
36 pub display_name: String,
37 pub tier: ModelTier,
38 pub global_enabled: bool,
39 pub is_default: bool,
40 pub input_tokens_credit_multiplier_micro: u64,
42 pub output_tokens_credit_multiplier_micro: u64,
44 pub multimodal_capabilities: Vec<String>,
46 pub context_window: u32,
48 pub max_output_tokens: u32,
50 pub description: String,
52 pub provider_display_name: String,
54 pub multiplier_display: String,
56}
57
58#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
60pub enum ModelTier {
61 Standard,
62 Premium,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
68pub struct UserLimits {
69 pub user_id: Uuid,
70 pub policy_version: u64,
71 pub standard: TierLimits,
72 pub premium: TierLimits,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct TierLimits {
78 pub limit_daily_credits_micro: i64,
79 pub limit_monthly_credits_micro: i64,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct UsageTokens {
85 pub input_tokens: u64,
86 pub output_tokens: u64,
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize)]
94pub struct UsageEvent {
95 pub tenant_id: Uuid,
96 pub user_id: Uuid,
97 pub chat_id: Uuid,
98 pub turn_id: Uuid,
99 pub request_id: Uuid,
100 pub effective_model: String,
101 pub selected_model: String,
102 pub terminal_state: String,
103 pub billing_outcome: String,
104 pub usage: Option<UsageTokens>,
105 pub actual_credits_micro: i64,
106 pub settlement_method: String,
107 pub policy_version_applied: i64,
108 pub timestamp: OffsetDateTime,
109}