use std::path::PathBuf;
use std::time::Duration;
#[derive(Debug, Clone, PartialEq)]
pub enum WeightFormat {
HuggingFaceBin, SafeTensors, ONNX, TensorFlow, GGUF, Custom(String), }
#[derive(Debug, Clone)]
pub struct WeightLoadingConfig {
pub format: Option<WeightFormat>,
pub lazy_loading: bool,
pub memory_mapped: bool,
pub streaming: bool,
pub device: String,
pub dtype: WeightDataType,
pub quantization: Option<QuantizationConfig>,
pub cache_dir: Option<PathBuf>,
pub verify_checksums: bool,
pub distributed: Option<DistributedConfig>,
}
#[derive(Debug, Clone)]
pub struct DistributedConfig {
pub nodes: Vec<NodeConfig>,
pub load_balancer: LoadBalancingStrategy,
pub fault_tolerance: FaultToleranceConfig,
pub network: NetworkConfig,
pub distributed_cache: DistributedCacheConfig,
pub compression: bool,
}
#[derive(Debug, Clone)]
pub struct NodeConfig {
pub id: String,
pub address: String,
pub port: u16,
pub weight_capacity: u64, pub bandwidth: f64, pub priority: u8, pub storage_paths: Vec<PathBuf>, }
#[derive(Debug, Clone, PartialEq)]
pub enum LoadBalancingStrategy {
RoundRobin,
LeastLoaded,
WeightedRoundRobin,
ConsistentHashing,
LocalityAware,
PerformanceBased,
Adaptive,
}
#[derive(Debug, Clone)]
pub struct FaultToleranceConfig {
pub max_retries: u32,
pub retry_delay: Duration,
pub timeout: Duration,
pub enable_failover: bool,
pub health_check_interval: Duration,
pub backup_nodes: Vec<String>, }
#[derive(Debug, Clone)]
pub struct NetworkConfig {
pub max_concurrent_connections: usize,
pub connection_timeout: Duration,
pub read_timeout: Duration,
pub chunk_size: usize,
pub enable_keepalive: bool,
pub compression_threshold: usize, }
#[derive(Debug, Clone)]
pub struct DistributedCacheConfig {
pub cache_strategy: CacheStrategy,
pub replication_factor: u8, pub eviction_policy: CacheEvictionPolicy,
pub consistency_level: ConsistencyLevel,
}
#[derive(Debug, Clone, PartialEq)]
pub enum CacheStrategy {
None,
ReadThrough,
WriteThrough,
WriteBack,
ReadAround,
}
#[derive(Debug, Clone, PartialEq)]
pub enum CacheEvictionPolicy {
LRU,
LFU,
FIFO,
Random,
TTL,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ConsistencyLevel {
Strong,
Eventual,
Weak,
}
#[derive(Debug, Clone)]
pub enum WeightDataType {
Float32,
Float16,
BFloat16,
Int8,
Int4,
}
#[derive(Debug, Clone)]
pub struct QuantizationConfig {
pub bits: u8,
pub group_size: Option<usize>,
pub symmetric: bool,
}
impl Default for WeightLoadingConfig {
fn default() -> Self {
Self {
format: None,
lazy_loading: false,
memory_mapped: false,
streaming: false,
device: "cpu".to_string(),
dtype: WeightDataType::Float32,
quantization: None,
cache_dir: None,
verify_checksums: true,
distributed: None,
}
}
}
impl Default for FaultToleranceConfig {
fn default() -> Self {
Self {
max_retries: 3,
retry_delay: Duration::from_millis(1000),
timeout: Duration::from_secs(30),
enable_failover: true,
health_check_interval: Duration::from_secs(60),
backup_nodes: Vec::new(),
}
}
}
impl Default for NetworkConfig {
fn default() -> Self {
Self {
max_concurrent_connections: 10,
connection_timeout: Duration::from_secs(30),
read_timeout: Duration::from_secs(60),
chunk_size: 8192,
enable_keepalive: true,
compression_threshold: 1024 * 1024, }
}
}
impl Default for DistributedCacheConfig {
fn default() -> Self {
Self {
cache_strategy: CacheStrategy::ReadThrough,
replication_factor: 2,
eviction_policy: CacheEvictionPolicy::LRU,
consistency_level: ConsistencyLevel::Eventual,
}
}
}