use serde::{Deserialize, Serialize};
use std::time::Duration;
#[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, }
#[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,
}
#[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, retry_attempts: 3,
retry_delay: Duration::from_secs(1),
exponential_backoff: true,
max_connections: 100,
}
}
}
#[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,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UbiquityConfig {
pub agent: AgentConfigExt,
pub llm: Option<LLMConfig>,
pub security: SecurityConfig,
pub transport: TransportConfigExt,
pub monitoring: MonitoringConfig,
}
#[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),
}
}
}
#[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>>,
}
#[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>,
}