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 pub provider_id: String,
59}
60
61#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
63pub enum ModelTier {
64 Standard,
65 Premium,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct UserLimits {
72 pub user_id: Uuid,
73 pub policy_version: u64,
74 pub standard: TierLimits,
75 pub premium: TierLimits,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct TierLimits {
81 pub limit_daily_credits_micro: i64,
82 pub limit_monthly_credits_micro: i64,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
87pub struct UsageTokens {
88 pub input_tokens: u64,
89 pub output_tokens: u64,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize)]
97pub struct UsageEvent {
98 pub tenant_id: Uuid,
99 pub user_id: Uuid,
100 pub chat_id: Uuid,
101 pub turn_id: Uuid,
102 pub request_id: Uuid,
103 pub effective_model: String,
104 pub selected_model: String,
105 pub terminal_state: String,
106 pub billing_outcome: String,
107 pub usage: Option<UsageTokens>,
108 pub actual_credits_micro: i64,
109 pub settlement_method: String,
110 pub policy_version_applied: i64,
111 pub timestamp: OffsetDateTime,
112}