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 provider_model_id: String,
39 pub display_name: String,
40 pub tier: ModelTier,
41 pub global_enabled: bool,
42 pub is_default: bool,
43 pub input_tokens_credit_multiplier_micro: u64,
45 pub output_tokens_credit_multiplier_micro: u64,
47 pub multimodal_capabilities: Vec<String>,
49 pub context_window: u32,
51 pub max_output_tokens: u32,
53 pub description: String,
55 pub provider_display_name: String,
57 pub multiplier_display: String,
59 pub provider_id: String,
62}
63
64#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
66pub enum ModelTier {
67 Standard,
68 Premium,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct UserLimits {
75 pub user_id: Uuid,
76 pub policy_version: u64,
77 pub standard: TierLimits,
78 pub premium: TierLimits,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct TierLimits {
84 pub limit_daily_credits_micro: i64,
85 pub limit_monthly_credits_micro: i64,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
90pub struct UsageTokens {
91 pub input_tokens: u64,
92 pub output_tokens: u64,
93}
94
95#[derive(Debug, Clone, Serialize, Deserialize)]
100pub struct UsageEvent {
101 pub tenant_id: Uuid,
102 pub user_id: Uuid,
103 pub chat_id: Uuid,
104 pub turn_id: Uuid,
105 pub request_id: Uuid,
106 pub effective_model: String,
107 pub selected_model: String,
108 pub terminal_state: String,
109 pub billing_outcome: String,
110 pub usage: Option<UsageTokens>,
111 pub actual_credits_micro: i64,
112 pub settlement_method: String,
113 pub policy_version_applied: i64,
114 pub timestamp: OffsetDateTime,
115}