llmp 0.1.0

Measures how well a local LLM setup uses its model: a recording proxy and a prompt-reuse analysis
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
pub struct Measured<T> {
    pub value: T,
    pub source: Source,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Source {
    Server,
    Tokenizer,
    Proxy,
    Estimate,
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn serialises_value_and_source() {
        let m = Measured {
            value: 1234u32,
            source: Source::Server,
        };
        assert_eq!(
            serde_json::to_string(&m).unwrap(),
            r#"{"value":1234,"source":"server"}"#
        );
    }

    #[test]
    fn unmeasured_is_null() {
        let m: Option<Measured<u32>> = None;
        assert_eq!(serde_json::to_string(&m).unwrap(), "null");
    }

    #[test]
    fn sources_order_from_strongest_to_weakest() {
        assert!(Source::Server < Source::Tokenizer);
        assert!(Source::Tokenizer < Source::Proxy);
        assert!(Source::Proxy < Source::Estimate);
    }
}