1use crate::ModelConfig;
8use serde::{Deserialize, Serialize};
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct FederatedConfig {
13 pub base_config: ModelConfig,
15 pub num_participants: usize,
17 pub communication_rounds: usize,
19 pub local_epochs: usize,
21 pub min_participants: usize,
23 pub privacy_config: PrivacyConfig,
25 pub aggregation_strategy: AggregationStrategy,
27 pub communication_config: CommunicationConfig,
29 pub security_config: SecurityConfig,
31 pub personalization_config: PersonalizationConfig,
33}
34
35impl Default for FederatedConfig {
36 fn default() -> Self {
37 Self {
38 base_config: ModelConfig::default(),
39 num_participants: 10,
40 communication_rounds: 100,
41 local_epochs: 5,
42 min_participants: 5,
43 privacy_config: PrivacyConfig::default(),
44 aggregation_strategy: AggregationStrategy::FederatedAveraging,
45 communication_config: CommunicationConfig::default(),
46 security_config: SecurityConfig::default(),
47 personalization_config: PersonalizationConfig::default(),
48 }
49 }
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct PrivacyConfig {
55 pub enable_differential_privacy: bool,
57 pub epsilon: f64,
59 pub delta: f64,
61 pub noise_mechanism: NoiseMechanism,
63 pub clipping_threshold: f64,
65 pub local_epsilon: f64,
67 pub global_epsilon: f64,
69}
70
71impl Default for PrivacyConfig {
72 fn default() -> Self {
73 Self {
74 enable_differential_privacy: true,
75 epsilon: 1.0,
76 delta: 1e-5,
77 noise_mechanism: NoiseMechanism::Gaussian,
78 clipping_threshold: 1.0,
79 local_epsilon: 0.5,
80 global_epsilon: 0.5,
81 }
82 }
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
87pub enum NoiseMechanism {
88 Gaussian,
90 Laplace,
92 Exponential,
94 SparseVector,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize)]
100pub enum AggregationStrategy {
101 FederatedAveraging,
103 WeightedAveraging,
105 SecureAggregation,
107 RobustAggregation,
109 PersonalizedAggregation,
111 HierarchicalAggregation,
113}
114
115#[derive(Debug, Clone, Serialize, Deserialize)]
117pub struct CommunicationConfig {
118 pub enable_compression: bool,
120 pub compression_ratio: f64,
122 pub quantization_bits: u8,
124 pub enable_sparsification: bool,
126 pub sparsity_threshold: f64,
128 pub protocol: CommunicationProtocol,
130 pub batch_communication: bool,
132 pub timeout_seconds: u64,
134}
135
136impl Default for CommunicationConfig {
137 fn default() -> Self {
138 Self {
139 enable_compression: true,
140 compression_ratio: 0.1,
141 quantization_bits: 8,
142 enable_sparsification: true,
143 sparsity_threshold: 0.01,
144 protocol: CommunicationProtocol::Synchronous,
145 batch_communication: true,
146 timeout_seconds: 300,
147 }
148 }
149}
150
151#[derive(Debug, Clone, Serialize, Deserialize)]
153pub enum CommunicationProtocol {
154 Synchronous,
156 Asynchronous,
158 SemiSynchronous { staleness_bound: usize },
160 PeerToPeer,
162}
163
164#[derive(Debug, Clone, Serialize, Deserialize)]
166pub struct SecurityConfig {
167 pub enable_homomorphic_encryption: bool,
169 pub encryption_scheme: EncryptionScheme,
171 pub enable_secure_mpc: bool,
173 pub verification_mechanisms: Vec<VerificationMechanism>,
175 pub certificate_config: CertificateConfig,
177 pub authentication_config: AuthenticationConfig,
179}
180
181impl Default for SecurityConfig {
182 fn default() -> Self {
183 Self {
184 enable_homomorphic_encryption: false,
185 encryption_scheme: EncryptionScheme::CKKS,
186 enable_secure_mpc: false,
187 verification_mechanisms: vec![VerificationMechanism::DigitalSignature],
188 certificate_config: CertificateConfig::default(),
189 authentication_config: AuthenticationConfig::default(),
190 }
191 }
192}
193
194#[derive(Debug, Clone, Serialize, Deserialize)]
196pub enum EncryptionScheme {
197 CKKS,
199 BFV,
201 SEAL,
203 HElib,
205}
206
207#[derive(Debug, Clone, Serialize, Deserialize)]
209pub enum VerificationMechanism {
210 DigitalSignature,
212 ZeroKnowledgeProof,
214 CommitmentScheme,
216 HashVerification,
218}
219
220#[derive(Debug, Clone, Serialize, Deserialize)]
222pub struct CertificateConfig {
223 pub ca_endpoint: String,
225 pub validity_days: u32,
227 pub key_length: u32,
229 pub validate_chain: bool,
231}
232
233impl Default for CertificateConfig {
234 fn default() -> Self {
235 Self {
236 ca_endpoint: "https://ca.example.com".to_string(),
237 validity_days: 365,
238 key_length: 2048,
239 validate_chain: true,
240 }
241 }
242}
243
244#[derive(Debug, Clone, Serialize, Deserialize)]
246pub struct AuthenticationConfig {
247 pub method: AuthenticationMethod,
249 pub token_expiry_hours: u32,
251 pub enable_mfa: bool,
253 pub identity_provider: String,
255}
256
257impl Default for AuthenticationConfig {
258 fn default() -> Self {
259 Self {
260 method: AuthenticationMethod::OAuth2,
261 token_expiry_hours: 24,
262 enable_mfa: false,
263 identity_provider: "https://idp.example.com".to_string(),
264 }
265 }
266}
267
268#[derive(Debug, Clone, Serialize, Deserialize)]
270pub enum AuthenticationMethod {
271 OAuth2,
273 JWT,
275 SAML,
277 MTLS,
279 ApiKey,
281}
282
283#[derive(Debug, Clone, Serialize, Deserialize)]
285pub struct PersonalizationConfig {
286 pub enable_personalization: bool,
288 pub strategy: PersonalizationStrategy,
290 pub local_adaptation_weight: f64,
292 pub global_model_weight: f64,
294 pub personalization_layers: Vec<String>,
296 pub meta_learning_config: MetaLearningConfig,
298}
299
300impl Default for PersonalizationConfig {
301 fn default() -> Self {
302 Self {
303 enable_personalization: true,
304 strategy: PersonalizationStrategy::LocalAdaptation,
305 local_adaptation_weight: 0.3,
306 global_model_weight: 0.7,
307 personalization_layers: vec!["embedding".to_string(), "output".to_string()],
308 meta_learning_config: MetaLearningConfig::default(),
309 }
310 }
311}
312
313#[derive(Debug, Clone, Serialize, Deserialize)]
315pub enum PersonalizationStrategy {
316 LocalAdaptation,
318 MultiTaskLearning,
320 MetaLearning,
322 MixtureOfExperts,
324 PersonalizedLayers,
326}
327
328#[derive(Debug, Clone, Serialize, Deserialize)]
330pub struct MetaLearningConfig {
331 pub algorithm: MetaLearningAlgorithm,
333 pub inner_learning_rate: f64,
335 pub outer_learning_rate: f64,
337 pub inner_steps: usize,
339 pub support_set_size: usize,
341 pub query_set_size: usize,
343}
344
345impl Default for MetaLearningConfig {
346 fn default() -> Self {
347 Self {
348 algorithm: MetaLearningAlgorithm::MAML,
349 inner_learning_rate: 0.01,
350 outer_learning_rate: 0.001,
351 inner_steps: 5,
352 support_set_size: 10,
353 query_set_size: 5,
354 }
355 }
356}
357
358#[derive(Debug, Clone, Serialize, Deserialize)]
360pub enum MetaLearningAlgorithm {
361 MAML,
363 Reptile,
365 PrototypicalNetworks,
367 MatchingNetworks,
369 MANN,
371}
372
373#[derive(Debug, Clone, Serialize, Deserialize)]
375pub struct TrainingConfig {
376 pub convergence_threshold: f64,
378 pub max_global_iterations: usize,
380 pub patience: usize,
382 pub learning_rate_decay: f64,
384 pub min_learning_rate: f64,
386}
387
388impl Default for TrainingConfig {
389 fn default() -> Self {
390 Self {
391 convergence_threshold: 1e-6,
392 max_global_iterations: 1000,
393 patience: 10,
394 learning_rate_decay: 0.95,
395 min_learning_rate: 1e-6,
396 }
397 }
398}