ubiquity-core 0.1.1

Core types and traits for Ubiquity consciousness-aware mesh
Documentation
//! Configuration types for Ubiquity

use serde::{Deserialize, Serialize};
use std::time::Duration;

/// LLM provider configuration
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LLMConfig {
    pub provider: LLMProvider,
    pub api_key: String,
    pub model: String,
    pub temperature: f32,
    pub max_tokens: usize,
    pub timeout: Duration,
    pub retry_attempts: u32,
    pub retry_delay: Duration,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum LLMProvider {
    Claude,
    OpenAI,
    Local,
    Mock, // For testing
}

/// Security configuration
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SecurityConfig {
    pub auth_enabled: bool,
    pub auth_type: AuthType,
    pub tls_enabled: bool,
    pub tls_cert_path: Option<String>,
    pub tls_key_path: Option<String>,
    pub allowed_origins: Vec<String>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AuthType {
    None,
    Token,
    Certificate,
    ApiKey,
}

/// Transport configuration with timeout and retry
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TransportConfigExt {
    pub connect_timeout: Duration,
    pub read_timeout: Duration,
    pub write_timeout: Duration,
    pub keep_alive_interval: Duration,
    pub max_message_size: usize,
    pub retry_attempts: u32,
    pub retry_delay: Duration,
    pub exponential_backoff: bool,
    pub max_connections: usize,
}

impl Default for TransportConfigExt {
    fn default() -> Self {
        Self {
            connect_timeout: Duration::from_secs(30),
            read_timeout: Duration::from_secs(60),
            write_timeout: Duration::from_secs(30),
            keep_alive_interval: Duration::from_secs(30),
            max_message_size: 10 * 1024 * 1024, // 10MB
            retry_attempts: 3,
            retry_delay: Duration::from_secs(1),
            exponential_backoff: true,
            max_connections: 100,
        }
    }
}

/// Monitoring configuration
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MonitoringConfig {
    pub metrics_enabled: bool,
    pub traces_enabled: bool,
    pub logs_level: LogLevel,
    pub metrics_port: u16,
    pub health_check_interval: Duration,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum LogLevel {
    Trace,
    Debug,
    Info,
    Warn,
    Error,
}

/// Complete Ubiquity configuration
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UbiquityConfig {
    pub agent: AgentConfigExt,
    pub llm: Option<LLMConfig>,
    pub security: SecurityConfig,
    pub transport: TransportConfigExt,
    pub monitoring: MonitoringConfig,
}

/// Extended agent configuration
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentConfigExt {
    pub default_consciousness_level: f64,
    pub consciousness_check_interval: Duration,
    pub task_timeout: Duration,
    pub max_concurrent_tasks: usize,
    pub enable_state_persistence: bool,
    pub state_save_interval: Duration,
}

impl Default for AgentConfigExt {
    fn default() -> Self {
        Self {
            default_consciousness_level: 0.85,
            consciousness_check_interval: Duration::from_secs(10),
            task_timeout: Duration::from_secs(300),
            max_concurrent_tasks: 10,
            enable_state_persistence: true,
            state_save_interval: Duration::from_secs(60),
        }
    }
}

/// Authentication token
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthToken {
    pub token: String,
    pub agent_id: String,
    pub capabilities: crate::AgentCapability,
    pub expires_at: Option<chrono::DateTime<chrono::Utc>>,
}

/// Health status
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HealthStatus {
    pub healthy: bool,
    pub consciousness_level: f64,
    pub active_tasks: usize,
    pub memory_usage_mb: f64,
    pub uptime_seconds: u64,
    pub last_error: Option<String>,
}