use super::*;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProviderConfig {
pub name: String,
pub provider_type: String,
pub api_key: String,
pub base_url: Option<String>,
pub api_version: Option<String>,
pub organization: Option<String>,
pub project: Option<String>,
#[serde(default = "default_weight")]
pub weight: f32,
#[serde(default = "default_rpm")]
pub rpm: u32,
#[serde(default = "default_tpm")]
pub tpm: u32,
#[serde(default = "default_max_connections")]
pub max_concurrent_requests: u32,
#[serde(default = "default_timeout")]
pub timeout: u64,
#[serde(default = "default_max_retries")]
pub max_retries: u32,
#[serde(default)]
pub retry: RetryConfig,
#[serde(default)]
pub health_check: HealthCheckConfig,
#[serde(default)]
pub settings: HashMap<String, serde_json::Value>,
#[serde(default)]
pub models: Vec<String>,
#[serde(default)]
pub tags: Vec<String>,
#[serde(default = "default_true")]
pub enabled: bool,
}
impl Default for ProviderConfig {
fn default() -> Self {
Self {
name: String::new(),
provider_type: String::new(),
api_key: String::new(),
base_url: None,
api_version: None,
organization: None,
project: None,
weight: default_weight(),
rpm: default_rpm(),
tpm: default_tpm(),
max_concurrent_requests: default_max_connections(),
timeout: default_timeout(),
max_retries: default_max_retries(),
retry: RetryConfig::default(),
health_check: HealthCheckConfig::default(),
settings: HashMap::new(),
models: Vec::new(),
tags: Vec::new(),
enabled: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RetryConfig {
#[serde(default = "default_base_delay")]
pub base_delay: u64,
#[serde(default = "default_max_delay")]
pub max_delay: u64,
#[serde(default = "default_backoff_multiplier")]
pub backoff_multiplier: f64,
#[serde(default)]
pub jitter: f64,
}
impl Default for RetryConfig {
fn default() -> Self {
Self {
base_delay: default_base_delay(),
max_delay: default_max_delay(),
backoff_multiplier: default_backoff_multiplier(),
jitter: 0.1,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HealthCheckConfig {
#[serde(default = "default_health_check_interval")]
pub interval: u64,
#[serde(default = "default_failure_threshold")]
pub failure_threshold: u32,
#[serde(default = "default_recovery_timeout")]
pub recovery_timeout: u64,
pub endpoint: Option<String>,
#[serde(default)]
pub expected_codes: Vec<u16>,
}
impl Default for HealthCheckConfig {
fn default() -> Self {
Self {
interval: default_health_check_interval(),
failure_threshold: default_failure_threshold(),
recovery_timeout: default_recovery_timeout(),
endpoint: None,
expected_codes: vec![200],
}
}
}
fn default_true() -> bool {
true
}