swarm-engine-eval 0.1.6

Evaluation framework for SwarmEngine
Documentation
//! Coordination quality metrics

use serde::{Deserialize, Serialize};

/// Coordination quality metrics
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CoordinationMetrics {
    /// Manager intervention rate (manager activations / total ticks)
    pub manager_intervention_rate: f64,

    /// Number of manager activations
    pub manager_activations: u64,

    /// Delegation efficiency (successful delegations / total delegations)
    pub delegation_efficiency: f64,

    /// Message to task ratio
    pub message_task_ratio: f64,

    /// Total worker idle ticks
    pub total_idle_ticks: u64,

    /// Total worker acted ticks
    pub total_acted_ticks: u64,

    /// Worker idle ratio
    pub idle_ratio: f64,
}

impl CoordinationMetrics {
    /// Calculate from raw data
    pub fn calculate(
        manager_activations: u64,
        total_ticks: u64,
        total_idle: u64,
        total_acted: u64,
    ) -> Self {
        let manager_intervention_rate = if total_ticks > 0 {
            manager_activations as f64 / total_ticks as f64
        } else {
            0.0
        };

        let total_worker_ticks = total_idle + total_acted;
        let idle_ratio = if total_worker_ticks > 0 {
            total_idle as f64 / total_worker_ticks as f64
        } else {
            0.0
        };

        Self {
            manager_intervention_rate,
            manager_activations,
            delegation_efficiency: 0.0, // TODO: calculate from decision logs
            message_task_ratio: 0.0,    // TODO: calculate from communication events
            total_idle_ticks: total_idle,
            total_acted_ticks: total_acted,
            idle_ratio,
        }
    }
}