use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphTransformerConfig {
pub embed_dim: usize,
pub num_heads: usize,
pub dropout: f32,
pub proof_gated: bool,
#[cfg(feature = "sublinear")]
pub sublinear: SublinearConfig,
#[cfg(feature = "physics")]
pub physics: PhysicsConfig,
#[cfg(feature = "biological")]
pub biological: BiologicalConfig,
#[cfg(feature = "self-organizing")]
pub self_organizing: SelfOrganizingConfig,
#[cfg(feature = "verified-training")]
pub verified_training: VerifiedTrainingConfig,
#[cfg(feature = "manifold")]
pub manifold: ManifoldConfig,
#[cfg(feature = "temporal")]
pub temporal: TemporalConfig,
#[cfg(feature = "economic")]
pub economic: EconomicConfig,
}
impl Default for GraphTransformerConfig {
fn default() -> Self {
Self {
embed_dim: 64,
num_heads: 4,
dropout: 0.1,
proof_gated: true,
#[cfg(feature = "sublinear")]
sublinear: SublinearConfig::default(),
#[cfg(feature = "physics")]
physics: PhysicsConfig::default(),
#[cfg(feature = "biological")]
biological: BiologicalConfig::default(),
#[cfg(feature = "self-organizing")]
self_organizing: SelfOrganizingConfig::default(),
#[cfg(feature = "verified-training")]
verified_training: VerifiedTrainingConfig::default(),
#[cfg(feature = "manifold")]
manifold: ManifoldConfig::default(),
#[cfg(feature = "temporal")]
temporal: TemporalConfig::default(),
#[cfg(feature = "economic")]
economic: EconomicConfig::default(),
}
}
}
#[cfg(feature = "sublinear")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SublinearConfig {
pub lsh_buckets: usize,
pub ppr_samples: usize,
pub sparsification_factor: f32,
}
#[cfg(feature = "sublinear")]
impl Default for SublinearConfig {
fn default() -> Self {
Self {
lsh_buckets: 16,
ppr_samples: 32,
sparsification_factor: 0.5,
}
}
}
#[cfg(feature = "physics")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PhysicsConfig {
pub dt: f32,
pub leapfrog_steps: usize,
pub energy_tolerance: f32,
}
#[cfg(feature = "physics")]
impl Default for PhysicsConfig {
fn default() -> Self {
Self {
dt: 0.01,
leapfrog_steps: 10,
energy_tolerance: 1e-4,
}
}
}
#[cfg(feature = "biological")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BiologicalConfig {
pub tau_membrane: f32,
pub threshold: f32,
pub stdp_rate: f32,
pub max_weight: f32,
}
#[cfg(feature = "biological")]
impl Default for BiologicalConfig {
fn default() -> Self {
Self {
tau_membrane: 20.0,
threshold: 1.0,
stdp_rate: 0.01,
max_weight: 5.0,
}
}
}
#[cfg(feature = "self-organizing")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SelfOrganizingConfig {
pub diffusion_rate: f32,
pub reaction_rate: f32,
pub max_growth_steps: usize,
pub coherence_threshold: f32,
}
#[cfg(feature = "self-organizing")]
impl Default for SelfOrganizingConfig {
fn default() -> Self {
Self {
diffusion_rate: 0.1,
reaction_rate: 0.05,
max_growth_steps: 100,
coherence_threshold: 0.8,
}
}
}
#[cfg(feature = "verified-training")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VerifiedTrainingConfig {
pub lipschitz_bound: f32,
pub verify_monotonicity: bool,
pub learning_rate: f32,
pub fail_closed: bool,
pub warmup_steps: u64,
pub dataset_manifest_hash: Option<[u8; 32]>,
pub code_build_hash: Option<[u8; 32]>,
}
#[cfg(feature = "verified-training")]
impl Default for VerifiedTrainingConfig {
fn default() -> Self {
Self {
lipschitz_bound: 10.0,
verify_monotonicity: true,
learning_rate: 0.001,
fail_closed: true,
warmup_steps: 0,
dataset_manifest_hash: None,
code_build_hash: None,
}
}
}
#[cfg(feature = "manifold")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ManifoldConfig {
pub spherical_dim: usize,
pub hyperbolic_dim: usize,
pub euclidean_dim: usize,
pub curvature: f32,
}
#[cfg(feature = "manifold")]
impl Default for ManifoldConfig {
fn default() -> Self {
Self {
spherical_dim: 16,
hyperbolic_dim: 16,
euclidean_dim: 16,
curvature: -1.0,
}
}
}
#[cfg(feature = "temporal")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TemporalConfig {
pub decay_rate: f32,
pub max_lag: usize,
pub granger_lags: usize,
}
#[cfg(feature = "temporal")]
impl Default for TemporalConfig {
fn default() -> Self {
Self {
decay_rate: 0.9,
max_lag: 10,
granger_lags: 5,
}
}
}
#[cfg(feature = "economic")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EconomicConfig {
pub utility_weight: f32,
pub temperature: f32,
pub convergence_threshold: f32,
pub max_iterations: usize,
pub min_stake: f32,
pub slash_fraction: f32,
pub num_permutations: usize,
}
#[cfg(feature = "economic")]
impl Default for EconomicConfig {
fn default() -> Self {
Self {
utility_weight: 1.0,
temperature: 1.0,
convergence_threshold: 0.01,
max_iterations: 100,
min_stake: 1.0,
slash_fraction: 0.1,
num_permutations: 100,
}
}
}