Skip to main content

systemprompt_models/profile/
rate_limits.rs

1//! Rate limits configuration.
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
6pub struct TierMultipliers {
7    #[serde(default = "default_admin_multiplier")]
8    pub admin: f64,
9
10    #[serde(default = "default_user_multiplier")]
11    pub user: f64,
12
13    #[serde(default = "default_a2a_multiplier")]
14    pub a2a: f64,
15
16    #[serde(default = "default_mcp_multiplier")]
17    pub mcp: f64,
18
19    #[serde(default = "default_service_multiplier")]
20    pub service: f64,
21
22    #[serde(default = "default_anon_multiplier")]
23    pub anon: f64,
24}
25
26pub const fn default_admin_multiplier() -> f64 {
27    10.0
28}
29pub const fn default_user_multiplier() -> f64 {
30    1.0
31}
32pub const fn default_a2a_multiplier() -> f64 {
33    5.0
34}
35pub const fn default_mcp_multiplier() -> f64 {
36    5.0
37}
38pub const fn default_service_multiplier() -> f64 {
39    5.0
40}
41pub const fn default_anon_multiplier() -> f64 {
42    0.5
43}
44
45impl Default for TierMultipliers {
46    fn default() -> Self {
47        Self {
48            admin: default_admin_multiplier(),
49            user: default_user_multiplier(),
50            a2a: default_a2a_multiplier(),
51            mcp: default_mcp_multiplier(),
52            service: default_service_multiplier(),
53            anon: default_anon_multiplier(),
54        }
55    }
56}
57
58#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
59pub struct RateLimitsConfig {
60    #[serde(default)]
61    pub disabled: bool,
62
63    #[serde(default = "default_oauth_public")]
64    pub oauth_public_per_second: u64,
65
66    #[serde(default = "default_oauth_auth")]
67    pub oauth_auth_per_second: u64,
68
69    #[serde(default = "default_contexts")]
70    pub contexts_per_second: u64,
71
72    #[serde(default = "default_tasks")]
73    pub tasks_per_second: u64,
74
75    #[serde(default = "default_artifacts")]
76    pub artifacts_per_second: u64,
77
78    #[serde(default = "default_agent_registry")]
79    pub agent_registry_per_second: u64,
80
81    #[serde(default = "default_agents")]
82    pub agents_per_second: u64,
83
84    #[serde(default = "default_mcp_registry")]
85    pub mcp_registry_per_second: u64,
86
87    #[serde(default = "default_mcp")]
88    pub mcp_per_second: u64,
89
90    #[serde(default = "default_stream")]
91    pub stream_per_second: u64,
92
93    #[serde(default = "default_content")]
94    pub content_per_second: u64,
95
96    #[serde(default = "default_burst")]
97    pub burst_multiplier: u64,
98
99    #[serde(default)]
100    pub tier_multipliers: TierMultipliers,
101}
102
103pub const fn default_oauth_public() -> u64 {
104    10
105}
106pub const fn default_oauth_auth() -> u64 {
107    10
108}
109pub const fn default_contexts() -> u64 {
110    100
111}
112pub const fn default_tasks() -> u64 {
113    50
114}
115pub const fn default_artifacts() -> u64 {
116    50
117}
118pub const fn default_agent_registry() -> u64 {
119    50
120}
121pub const fn default_agents() -> u64 {
122    20
123}
124pub const fn default_mcp_registry() -> u64 {
125    50
126}
127pub const fn default_mcp() -> u64 {
128    200
129}
130pub const fn default_stream() -> u64 {
131    100
132}
133pub const fn default_content() -> u64 {
134    50
135}
136pub const fn default_burst() -> u64 {
137    3
138}
139
140impl Default for RateLimitsConfig {
141    fn default() -> Self {
142        Self {
143            disabled: false,
144            oauth_public_per_second: default_oauth_public(),
145            oauth_auth_per_second: default_oauth_auth(),
146            contexts_per_second: default_contexts(),
147            tasks_per_second: default_tasks(),
148            artifacts_per_second: default_artifacts(),
149            agent_registry_per_second: default_agent_registry(),
150            agents_per_second: default_agents(),
151            mcp_registry_per_second: default_mcp_registry(),
152            mcp_per_second: default_mcp(),
153            stream_per_second: default_stream(),
154            content_per_second: default_content(),
155            burst_multiplier: default_burst(),
156            tier_multipliers: TierMultipliers::default(),
157        }
158    }
159}