1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
8pub enum CloudProvider {
9 IBM,
11 AWS,
13 Azure,
15 Google,
17 IonQ,
19 Rigetti,
21 Xanadu,
23 DWave,
25 Custom(String),
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct MultiProviderConfig {
32 pub enabled_providers: Vec<CloudProvider>,
34 pub provider_configs: HashMap<CloudProvider, ProviderConfig>,
36 pub selection_strategy: ProviderSelectionStrategy,
38 pub failover_config: FailoverConfig,
40 pub sync_config: CrossProviderSyncConfig,
42 pub health_monitoring: ProviderHealthConfig,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize, Default)]
48pub struct ProviderConfig {
49 pub api_endpoint: String,
50 pub credentials: HashMap<String, String>,
51 pub resource_limits: HashMap<String, usize>,
52 pub features: ProviderFeatures,
54 pub connection: ConnectionSettings,
56 pub rate_limits: RateLimits,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct ProviderFeatures {
63 pub gate_sets: Vec<String>,
65 pub max_qubits: usize,
67 pub coherence_times: CoherenceMetrics,
69 pub error_rates: ErrorMetrics,
71 pub special_capabilities: Vec<SpecialCapability>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct CoherenceMetrics {
78 pub t1_avg: f64,
80 pub t2_avg: f64,
82 pub gate_time_avg: f64,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize)]
88pub struct ErrorMetrics {
89 pub single_qubit_error: f64,
91 pub two_qubit_error: f64,
93 pub readout_error: f64,
95}
96
97#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
99pub enum SpecialCapability {
100 MiddleCircuitMeasurement,
101 DynamicCircuits,
102 ErrorMitigation,
103 PulseControl,
104 ParametricGates,
105 Transpilation,
106 CustomGates,
107}
108
109#[derive(Debug, Clone, Serialize, Deserialize)]
111pub struct ConnectionSettings {
112 pub timeout: std::time::Duration,
114 pub retry_attempts: usize,
116 pub keep_alive: bool,
118 pub ssl_config: SSLConfig,
120}
121
122#[derive(Debug, Clone, Serialize, Deserialize)]
124pub struct SSLConfig {
125 pub enabled: bool,
127 pub verify_certificates: bool,
129 pub certificate_path: Option<String>,
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize)]
135pub struct RateLimits {
136 pub requests_per_second: usize,
138 pub requests_per_minute: usize,
140 pub requests_per_hour: usize,
142 pub burst_allowance: usize,
144}
145
146#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
148pub enum ProviderSelectionStrategy {
149 RoundRobin,
151 LoadBased,
153 CostBased,
155 PerformanceBased,
157 LatencyBased,
159 AvailabilityBased,
161 MultiCriteria(MultiCriteriaConfig),
163 Custom(String),
165}
166
167#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
169pub struct MultiCriteriaConfig {
170 pub weights: HashMap<SelectionCriterion, f64>,
172 pub aggregation_method: AggregationMethod,
174 pub normalization: NormalizationMethod,
176}
177
178#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
180pub enum SelectionCriterion {
181 Cost,
182 Performance,
183 Latency,
184 Availability,
185 QueueTime,
186 ErrorRate,
187 ResourceUtilization,
188}
189
190#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
192pub enum AggregationMethod {
193 WeightedSum,
194 WeightedProduct,
195 TOPSIS,
196 ELECTRE,
197 AHP,
198}
199
200#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
202pub enum NormalizationMethod {
203 MinMax,
204 ZScore,
205 Robust,
206 None,
207}
208
209#[derive(Debug, Clone, Serialize, Deserialize)]
211pub struct FailoverConfig {
212 pub enable_failover: bool,
213 pub failover_threshold: f64,
214 pub failover_providers: Vec<String>,
215 pub strategy: FailoverStrategy,
217 pub detection: FailureDetectionConfig,
219 pub recovery: FailoverRecoveryConfig,
221}
222
223#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
225pub enum FailoverStrategy {
226 Immediate,
227 Graceful,
228 Conditional,
229 Hybrid,
230}
231
232#[derive(Debug, Clone, Serialize, Deserialize)]
234pub struct FailureDetectionConfig {
235 pub health_check_interval: std::time::Duration,
237 pub failure_threshold: usize,
239 pub detection_methods: Vec<FailureDetectionMethod>,
241}
242
243#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
245pub enum FailureDetectionMethod {
246 HealthEndpoint,
247 ResponseTime,
248 ErrorRate,
249 CustomMetric(String),
250}
251
252#[derive(Debug, Clone, Serialize, Deserialize)]
254pub struct FailoverRecoveryConfig {
255 pub recovery_timeout: std::time::Duration,
257 pub recovery_strategy: RecoveryStrategy,
259 pub backoff: BackoffStrategy,
261}
262
263#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
265pub enum RecoveryStrategy {
266 Automatic,
267 Manual,
268 Hybrid,
269}
270
271#[derive(Debug, Clone, Serialize, Deserialize)]
273pub struct BackoffStrategy {
274 pub initial_delay: std::time::Duration,
276 pub max_delay: std::time::Duration,
278 pub multiplier: f64,
280 pub jitter: bool,
282}
283
284#[derive(Debug, Clone, Serialize, Deserialize)]
286pub struct CrossProviderSyncConfig {
287 pub sync_enabled: bool,
288 pub sync_interval: u64,
289 pub sync_strategies: Vec<String>,
290 pub sync_scope: SyncScope,
292 pub conflict_resolution: ConflictResolution,
294 pub consistency: ConsistencyConfig,
296}
297
298#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
300pub enum SyncScope {
301 JobStatus,
302 ResourceUsage,
303 Configurations,
304 All,
305}
306
307#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
309pub enum ConflictResolution {
310 LastWriteWins,
311 FirstWriteWins,
312 MergeStrategy,
313 ManualResolution,
314}
315
316#[derive(Debug, Clone, Serialize, Deserialize)]
318pub struct ConsistencyConfig {
319 pub level: ConsistencyLevel,
321 pub timeout: std::time::Duration,
323 pub retry_policy: RetryPolicy,
325}
326
327#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
329pub enum ConsistencyLevel {
330 Strong,
331 Eventual,
332 Session,
333 Bounded,
334}
335
336#[derive(Debug, Clone, Serialize, Deserialize)]
338pub struct RetryPolicy {
339 pub max_retries: usize,
341 pub retry_delay: std::time::Duration,
343 pub exponential_backoff: bool,
345}
346
347#[derive(Debug, Clone, Serialize, Deserialize)]
349pub struct ProviderHealthConfig {
350 pub health_check_interval: u64,
351 pub health_thresholds: HashMap<String, f64>,
352 pub metrics: Vec<HealthMetric>,
354 pub alerting: HealthAlertingConfig,
356}
357
358#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
360pub enum HealthMetric {
361 ResponseTime,
362 ErrorRate,
363 Availability,
364 QueueLength,
365 ResourceUtilization,
366 CustomMetric(String),
367}
368
369#[derive(Debug, Clone, Serialize, Deserialize)]
371pub struct HealthAlertingConfig {
372 pub enabled: bool,
374 pub thresholds: HashMap<HealthMetric, f64>,
376 pub channels: Vec<NotificationChannel>,
378 pub escalation: EscalationConfig,
380}
381
382#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
384pub enum NotificationChannel {
385 Email,
386 SMS,
387 Slack,
388 Webhook,
389 Dashboard,
390}
391
392#[derive(Debug, Clone, Serialize, Deserialize, Default)]
394pub struct EscalationConfig {
395 pub levels: Vec<EscalationLevel>,
397 pub timeouts: HashMap<String, std::time::Duration>,
399}
400
401#[derive(Debug, Clone, Serialize, Deserialize)]
403pub struct EscalationLevel {
404 pub name: String,
406 pub threshold: f64,
408 pub actions: Vec<EscalationAction>,
410}
411
412#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
414pub enum EscalationAction {
415 Notify,
416 Failover,
417 Throttle,
418 Shutdown,
419}
420
421impl Default for MultiProviderConfig {
422 fn default() -> Self {
423 Self {
424 enabled_providers: vec![CloudProvider::IBM, CloudProvider::AWS],
425 provider_configs: HashMap::new(),
426 selection_strategy: ProviderSelectionStrategy::PerformanceBased,
427 failover_config: FailoverConfig::default(),
428 sync_config: CrossProviderSyncConfig::default(),
429 health_monitoring: ProviderHealthConfig::default(),
430 }
431 }
432}
433
434impl Default for ProviderFeatures {
435 fn default() -> Self {
436 Self {
437 gate_sets: vec!["clifford".to_string(), "universal".to_string()],
438 max_qubits: 100,
439 coherence_times: CoherenceMetrics::default(),
440 error_rates: ErrorMetrics::default(),
441 special_capabilities: vec![],
442 }
443 }
444}
445
446impl Default for CoherenceMetrics {
447 fn default() -> Self {
448 Self {
449 t1_avg: 100.0, t2_avg: 50.0, gate_time_avg: 0.1, }
453 }
454}
455
456impl Default for ErrorMetrics {
457 fn default() -> Self {
458 Self {
459 single_qubit_error: 0.001,
460 two_qubit_error: 0.01,
461 readout_error: 0.02,
462 }
463 }
464}
465
466impl Default for ConnectionSettings {
467 fn default() -> Self {
468 Self {
469 timeout: std::time::Duration::from_secs(30),
470 retry_attempts: 3,
471 keep_alive: true,
472 ssl_config: SSLConfig::default(),
473 }
474 }
475}
476
477impl Default for SSLConfig {
478 fn default() -> Self {
479 Self {
480 enabled: true,
481 verify_certificates: true,
482 certificate_path: None,
483 }
484 }
485}
486
487impl Default for RateLimits {
488 fn default() -> Self {
489 Self {
490 requests_per_second: 10,
491 requests_per_minute: 100,
492 requests_per_hour: 1000,
493 burst_allowance: 20,
494 }
495 }
496}
497
498impl Default for FailoverConfig {
499 fn default() -> Self {
500 Self {
501 enable_failover: true,
502 failover_threshold: 0.8,
503 failover_providers: vec![],
504 strategy: FailoverStrategy::Graceful,
505 detection: FailureDetectionConfig::default(),
506 recovery: FailoverRecoveryConfig::default(),
507 }
508 }
509}
510
511impl Default for FailureDetectionConfig {
512 fn default() -> Self {
513 Self {
514 health_check_interval: std::time::Duration::from_secs(60),
515 failure_threshold: 3,
516 detection_methods: vec![
517 FailureDetectionMethod::HealthEndpoint,
518 FailureDetectionMethod::ResponseTime,
519 ],
520 }
521 }
522}
523
524impl Default for FailoverRecoveryConfig {
525 fn default() -> Self {
526 Self {
527 recovery_timeout: std::time::Duration::from_secs(300),
528 recovery_strategy: RecoveryStrategy::Automatic,
529 backoff: BackoffStrategy::default(),
530 }
531 }
532}
533
534impl Default for BackoffStrategy {
535 fn default() -> Self {
536 Self {
537 initial_delay: std::time::Duration::from_secs(1),
538 max_delay: std::time::Duration::from_secs(60),
539 multiplier: 2.0,
540 jitter: true,
541 }
542 }
543}
544
545impl Default for CrossProviderSyncConfig {
546 fn default() -> Self {
547 Self {
548 sync_enabled: false,
549 sync_interval: 300, sync_strategies: vec![],
551 sync_scope: SyncScope::JobStatus,
552 conflict_resolution: ConflictResolution::LastWriteWins,
553 consistency: ConsistencyConfig::default(),
554 }
555 }
556}
557
558impl Default for ConsistencyConfig {
559 fn default() -> Self {
560 Self {
561 level: ConsistencyLevel::Eventual,
562 timeout: std::time::Duration::from_secs(30),
563 retry_policy: RetryPolicy::default(),
564 }
565 }
566}
567
568impl Default for RetryPolicy {
569 fn default() -> Self {
570 Self {
571 max_retries: 3,
572 retry_delay: std::time::Duration::from_secs(1),
573 exponential_backoff: true,
574 }
575 }
576}
577
578impl Default for ProviderHealthConfig {
579 fn default() -> Self {
580 Self {
581 health_check_interval: 60,
582 health_thresholds: HashMap::new(),
583 metrics: vec![
584 HealthMetric::ResponseTime,
585 HealthMetric::ErrorRate,
586 HealthMetric::Availability,
587 ],
588 alerting: HealthAlertingConfig::default(),
589 }
590 }
591}
592
593impl Default for HealthAlertingConfig {
594 fn default() -> Self {
595 Self {
596 enabled: true,
597 thresholds: HashMap::new(),
598 channels: vec![NotificationChannel::Dashboard],
599 escalation: EscalationConfig::default(),
600 }
601 }
602}