Skip to main content

vex_core/
rule.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use uuid::Uuid;
4
5/// A semantic rule extracted from a batch of experiments
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct OptimizationRule {
8    /// Unique ID of the rule
9    pub id: Uuid,
10    /// Human-readable description of the rule
11    pub rule_description: String,
12    /// List of traits this rule affects (e.g., ["aggression", "analysis_depth"])
13    pub affected_traits: Vec<String>,
14    /// Confidence score (0.0 - 1.0)
15    pub confidence: f64,
16    /// Number of experiments that supported this rule
17    pub source_experiments_count: usize,
18    /// When this rule was created
19    pub created_at: DateTime<Utc>,
20}
21
22impl OptimizationRule {
23    pub fn new(description: String, traits: Vec<String>, confidence: f64, count: usize) -> Self {
24        Self {
25            id: Uuid::new_v4(),
26            rule_description: description,
27            affected_traits: traits,
28            confidence: confidence.clamp(0.0, 1.0),
29            source_experiments_count: count,
30            created_at: Utc::now(),
31        }
32    }
33}