use serde::{Deserialize, Serialize};
use chrono::{DateTime, Utc};
use uuid::Uuid;
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AiModel {
pub id: Uuid,
pub name: String,
pub version: String,
pub size_gb: f64,
pub model_type: ModelType,
pub provider: String,
pub description: Option<String>,
pub tags: Vec<String>,
pub capabilities: Vec<String>,
pub requirements: ModelRequirements,
pub status: ModelStatus,
pub download_url: Option<String>,
pub checksum: Option<String>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ModelType {
TextGeneration,
ChatCompletion,
Embedding,
CodeGeneration,
ImageGeneration,
Multimodal,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ModelStatus {
Available, Downloading, Downloaded, Installing, Installed, Running, Stopped, Error, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelRequirements {
pub min_ram_gb: f64,
pub min_vram_gb: Option<f64>,
pub gpu_required: bool,
pub cpu_cores: u32,
pub disk_space_gb: f64,
pub supported_platforms: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelDeployment {
pub id: Uuid,
pub model_id: Uuid,
pub name: String,
pub port: u16,
pub bind_address: String,
pub api_key: String,
pub max_concurrent: u32,
pub config: DeploymentConfig,
pub resource_config: ResourceConfig,
pub status: DeploymentStatus,
pub pid: Option<u32>,
pub started_at: Option<DateTime<Utc>>,
pub stopped_at: Option<DateTime<Utc>>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DeploymentStatus {
Stopped,
Starting,
Running,
Stopping,
Error,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeploymentConfig {
pub auto_start: bool,
pub restart_on_failure: bool,
pub max_restart_count: u32,
pub health_check_interval: u64,
pub timeout_seconds: u64,
pub log_level: LogLevel,
pub custom_args: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceConfig {
pub context_length: u32,
pub temperature: f32,
pub top_p: f32,
pub top_k: u32,
pub max_tokens: u32,
pub gpu_layers: Option<u32>,
pub threads: Option<u32>,
pub batch_size: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum LogLevel {
Debug,
Info,
Warn,
Error,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SystemMetrics {
pub id: Uuid,
pub timestamp: DateTime<Utc>,
pub cpu_usage: f64,
pub memory_usage: f64,
pub memory_total: u64,
pub disk_usage: f64,
pub disk_total: u64,
pub gpu_usage: Option<f64>,
pub gpu_memory_usage: Option<f64>,
pub network_rx: u64,
pub network_tx: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelMetrics {
pub id: Uuid,
pub deployment_id: Uuid,
pub timestamp: DateTime<Utc>,
pub request_count: u64,
pub error_count: u64,
pub average_response_time: f64,
pub tokens_per_second: f64,
pub concurrent_requests: u32,
pub queue_length: u32,
pub memory_usage: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RequestLog {
pub id: Uuid,
pub deployment_id: Uuid,
pub timestamp: DateTime<Utc>,
pub method: String,
pub endpoint: String,
pub status_code: u16,
pub response_time_ms: u64,
pub input_tokens: Option<u32>,
pub output_tokens: Option<u32>,
pub user_id: Option<String>,
pub client_ip: String,
pub user_agent: Option<String>,
pub error_message: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SystemLog {
pub id: Uuid,
pub timestamp: DateTime<Utc>,
pub level: LogLevel,
pub component: String,
pub message: String,
pub context: HashMap<String, String>,
pub deployment_id: Option<Uuid>,
pub model_id: Option<Uuid>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserSettings {
pub id: Uuid,
pub user_id: String,
pub theme: Theme,
pub language: String,
pub font_size: FontSize,
pub auto_refresh_interval: u32,
pub notifications_enabled: bool,
pub notification_types: Vec<NotificationType>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Theme {
Light,
Dark,
System,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum FontSize {
Small,
Medium,
Large,
ExtraLarge,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum NotificationType {
ModelStarted,
ModelStopped,
ModelError,
HighResourceUsage,
LowDiskSpace,
SecurityAlert,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SecurityConfig {
pub id: Uuid,
pub api_keys: Vec<ApiKey>,
pub rate_limiting: RateLimitConfig,
pub access_control: AccessControlConfig,
pub firewall_rules: Vec<FirewallRule>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ApiKey {
pub id: Uuid,
pub name: String,
pub key_hash: String,
pub permissions: Vec<Permission>,
pub rate_limit: Option<u32>,
pub expires_at: Option<DateTime<Utc>>,
pub last_used_at: Option<DateTime<Utc>>,
pub created_at: DateTime<Utc>,
pub is_active: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Permission {
ModelRead,
ModelWrite,
ModelDeploy,
SystemMonitor,
LogsRead,
SettingsRead,
SettingsWrite,
AdminAll,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccessControlConfig {
pub allow_localhost_only: bool,
pub allowed_ips: Vec<String>,
pub blocked_ips: Vec<String>,
pub require_api_key: bool,
pub session_timeout: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RateLimitConfig {
pub enabled: bool,
pub requests_per_minute: u32,
pub requests_per_hour: u32,
pub burst_limit: u32,
pub whitelist_ips: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FirewallRule {
pub id: Uuid,
pub name: String,
pub rule_type: FirewallRuleType,
pub source_ip: Option<String>,
pub destination_port: Option<u16>,
pub protocol: Protocol,
pub action: FirewallAction,
pub is_enabled: bool,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum FirewallRuleType {
Allow,
Deny,
Log,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Protocol {
Tcp,
Udp,
Http,
Https,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum FirewallAction {
Accept,
Drop,
Reject,
Log,
}