1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5use std::time::Instant;
6
7use super::characteristics::StyleCharacteristics;
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct StyleModel {
12 pub id: String,
14
15 pub name: String,
17
18 pub style_characteristics: StyleCharacteristics,
20
21 pub parameters: StyleModelParameters,
23
24 pub training_info: StyleTrainingInfo,
26
27 pub quality_metrics: StyleModelQualityMetrics,
29
30 #[serde(skip)]
32 pub created: Option<Instant>,
33
34 #[serde(skip)]
36 pub last_updated: Option<Instant>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct StyleModelParameters {
42 pub encoder_params: EncoderParameters,
44
45 pub decoder_params: DecoderParameters,
47
48 pub discriminator_params: Option<DiscriminatorParameters>,
50
51 pub architecture: ModelArchitecture,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct EncoderParameters {
58 pub input_dim: usize,
60
61 pub hidden_dims: Vec<usize>,
63
64 pub output_dim: usize,
66
67 pub layer_types: Vec<LayerType>,
69
70 pub activations: Vec<ActivationType>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct DecoderParameters {
77 pub input_dim: usize,
79
80 pub hidden_dims: Vec<usize>,
82
83 pub output_dim: usize,
85
86 pub layer_types: Vec<LayerType>,
88
89 pub activations: Vec<ActivationType>,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
95pub struct DiscriminatorParameters {
96 pub input_dim: usize,
98
99 pub hidden_dims: Vec<usize>,
101
102 pub num_classes: usize,
104
105 pub layer_types: Vec<LayerType>,
107}
108
109#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
111pub enum LayerType {
112 Linear,
114
115 Convolutional,
117
118 LSTM,
120
121 GRU,
123
124 Transformer,
126
127 Attention,
129}
130
131#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
133pub enum ActivationType {
134 ReLU,
136
137 LeakyReLU,
139
140 Tanh,
142
143 Sigmoid,
145
146 GELU,
148
149 Swish,
151}
152
153#[derive(Debug, Clone, Serialize, Deserialize)]
155pub struct ModelArchitecture {
156 pub name: String,
158
159 pub architecture_type: ArchitectureType,
161
162 pub components: Vec<ModelComponent>,
164
165 pub connections: Vec<ConnectionPattern>,
167}
168
169#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
171pub enum ArchitectureType {
172 Autoencoder,
174
175 GAN,
177
178 VAE,
180
181 Transformer,
183
184 Diffusion,
186}
187
188#[derive(Debug, Clone, Serialize, Deserialize)]
190pub struct ModelComponent {
191 pub name: String,
193
194 pub component_type: ComponentType,
196
197 pub input_shapes: Vec<Vec<usize>>,
199
200 pub output_shapes: Vec<Vec<usize>>,
202}
203
204#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
206pub enum ComponentType {
207 Encoder,
209
210 Decoder,
212
213 Discriminator,
215
216 Generator,
218
219 Attention,
221}
222
223#[derive(Debug, Clone, Serialize, Deserialize)]
225pub struct ConnectionPattern {
226 pub source: String,
228
229 pub target: String,
231
232 pub connection_type: ConnectionType,
234
235 pub weight: f32,
237}
238
239#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
241pub enum ConnectionType {
242 Direct,
244
245 Residual,
247
248 Skip,
250
251 Attention,
253}
254
255#[derive(Debug, Clone, Serialize, Deserialize)]
257pub struct StyleTrainingInfo {
258 pub dataset_info: DatasetInfo,
260
261 pub hyperparameters: TrainingHyperparameters,
263
264 pub training_metrics: TrainingMetrics,
266
267 pub validation_metrics: ValidationMetrics,
269}
270
271#[derive(Debug, Clone, Serialize, Deserialize)]
273pub struct DatasetInfo {
274 pub name: String,
276
277 pub size: usize,
279
280 pub num_speakers: usize,
282
283 pub total_duration: f32,
285
286 pub languages: Vec<String>,
288
289 pub speaking_styles: Vec<String>,
291}
292
293#[derive(Debug, Clone, Serialize, Deserialize)]
295pub struct TrainingHyperparameters {
296 pub learning_rate: f32,
298
299 pub batch_size: usize,
301
302 pub num_epochs: usize,
304
305 pub optimizer: OptimizerType,
307
308 pub loss_weights: HashMap<String, f32>,
310
311 pub regularization: RegularizationParameters,
313}
314
315#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
317pub enum OptimizerType {
318 Adam,
320
321 AdamW,
323
324 SGD,
326
327 RMSprop,
329
330 AdaGrad,
332}
333
334#[derive(Debug, Clone, Serialize, Deserialize)]
336pub struct RegularizationParameters {
337 pub l1_weight: f32,
339
340 pub l2_weight: f32,
342
343 pub dropout_rate: f32,
345
346 pub batch_norm: bool,
348
349 pub layer_norm: bool,
351}
352
353#[derive(Debug, Clone, Serialize, Deserialize)]
355pub struct TrainingMetrics {
356 pub loss_history: Vec<f32>,
358
359 pub accuracy_history: Vec<f32>,
361
362 pub time_per_epoch: Vec<f32>,
364
365 pub convergence_info: ConvergenceInfo,
367}
368
369#[derive(Debug, Clone, Serialize, Deserialize)]
371pub struct ValidationMetrics {
372 pub loss_history: Vec<f32>,
374
375 pub accuracy_history: Vec<f32>,
377
378 pub best_score: f32,
380
381 pub early_stopping: EarlyStoppingInfo,
383}
384
385#[derive(Debug, Clone, Serialize, Deserialize)]
387pub struct ConvergenceInfo {
388 pub converged: bool,
390
391 pub convergence_epoch: Option<usize>,
393
394 pub criteria: ConvergenceCriteria,
396}
397
398#[derive(Debug, Clone, Serialize, Deserialize)]
400pub struct ConvergenceCriteria {
401 pub loss_tolerance: f32,
403
404 pub patience: usize,
406
407 pub min_improvement: f32,
409}
410
411#[derive(Debug, Clone, Serialize, Deserialize)]
413pub struct EarlyStoppingInfo {
414 pub early_stopped: bool,
416
417 pub stopping_epoch: Option<usize>,
419
420 pub stopping_reason: Option<String>,
422}
423
424#[derive(Debug, Clone, Serialize, Deserialize)]
426pub struct StyleModelQualityMetrics {
427 pub overall_quality: f32,
429
430 pub transfer_accuracy: f32,
432
433 pub content_preservation: f32,
435
436 pub style_consistency: f32,
438
439 pub perceptual_scores: PerceptualQualityScores,
441
442 pub objective_metrics: ObjectiveQualityMetrics,
444}
445
446#[derive(Debug, Clone, Serialize, Deserialize)]
448pub struct PerceptualQualityScores {
449 pub naturalness: f32,
451
452 pub style_similarity: f32,
454
455 pub intelligibility: f32,
457
458 pub preference: f32,
460
461 pub confidence_intervals: HashMap<String, (f32, f32)>,
463}
464
465#[derive(Debug, Clone, Serialize, Deserialize)]
467pub struct ObjectiveQualityMetrics {
468 pub mcd: f32,
470
471 pub f0_rmse: f32,
473
474 pub voicing_error: f32,
476
477 pub spectral_distortion: f32,
479
480 pub prosodic_correlation: f32,
482}
483
484#[derive(Debug, Clone, Serialize, Deserialize)]
486pub struct StyleModelMetadata {
487 #[serde(skip)]
489 pub created: Option<Instant>,
490
491 pub version: String,
493
494 pub author: String,
496
497 pub description: String,
499
500 pub tags: Vec<String>,
502
503 pub license: String,
505
506 pub file_size: u64,
508
509 pub checksum: String,
511}
512
513#[derive(Debug, Clone, Serialize, Deserialize)]
515pub struct ModelPerformanceMetrics {
516 pub inference_time: f32,
518
519 pub memory_usage: f32,
521
522 pub gpu_utilization: f32,
524
525 pub throughput: f32,
527
528 pub real_time_factor: f32,
530}
531
532#[derive(Debug, Clone, Serialize, Deserialize)]
534pub struct ModelUsageStatistics {
535 pub usage_count: u64,
537
538 pub avg_quality_rating: f32,
540
541 pub success_rate: f32,
543
544 #[serde(skip)]
546 pub last_used: Option<Instant>,
547
548 pub usage_contexts: HashMap<String, u32>,
550}
551
552#[derive(Debug, Clone, Serialize, Deserialize)]
554pub struct RepositoryConfig {
555 pub max_models: usize,
557
558 pub cache_size_limit: u64,
560
561 pub auto_cleanup: bool,
563
564 pub cleanup_threshold: f32,
566
567 pub versioning_enabled: bool,
569}