arms 0.0.3

🧬 The adaptive model routing system for exploration and exploitation.
Documentation
use std::collections::HashMap;
use std::sync::atomic::{AtomicUsize, Ordering};

use crate::client::config::ModelName;

pub struct RouterStats {
    requests_per_model: HashMap<ModelName, AtomicUsize>,
}

impl RouterStats {
    pub fn default() -> Self {
        RouterStats {
            requests_per_model: HashMap::new(),
        }
    }

    pub fn increment_request(&mut self, model_id: &ModelName) -> usize {
        let counter = self
            .requests_per_model
            .entry(model_id.clone())
            .or_insert_with(|| AtomicUsize::new(0));
        counter.fetch_add(1, Ordering::Relaxed)
    }
}