aprender-serve 0.64.0

Pure Rust ML inference engine built from scratch - model serving for GGUF and safetensors

/// IMP-205a: Test tokenization comparison
#[test]
fn test_imp_205a_tokenization_comparison() {
    let result = TokenizationComparisonResult::new(
        "llama.cpp",
        "realizar",
        "Hello, world!",
        vec![1, 15043, 29892, 3186, 29991],
        vec![1, 15043, 29892, 3186, 29991],
    );

    assert!(
        result.tokens_identical,
        "IMP-205a: Tokens should be identical"
    );
    assert!(result.meets_qa002, "IMP-205a: Should meet QA-002");
    assert_eq!(result.diff_count, 0, "IMP-205a: Should have no differences");

    println!("\nIMP-205a: Tokenization Comparison:");
    println!("  Text: {}", result.input_text);
    println!("  Reference tokens: {:?}", result.reference_tokens);
    println!("  Test tokens: {:?}", result.test_tokens);
    println!("  Identical: {}", result.tokens_identical);
}

/// IMP-205b: Test tokenization differences
#[test]
fn test_imp_205b_tokenization_differences() {
    let result = TokenizationComparisonResult::new(
        "llama.cpp",
        "realizar",
        "Hello",
        vec![1, 15043],
        vec![1, 15043, 2], // Extra EOS token
    );

    assert!(
        !result.tokens_identical,
        "IMP-205b: Should detect difference"
    );
    assert!(!result.meets_qa002, "IMP-205b: Should not meet QA-002");
    assert!(result.diff_count > 0, "IMP-205b: Should have differences");

    println!("\nIMP-205b: Tokenization Differences:");
    println!("  Diff count: {}", result.diff_count);
    println!("  Meets QA-002: {}", result.meets_qa002);
}

/// IMP-205c: Test special tokens
#[test]
fn test_imp_205c_special_tokens() {
    // BOS=1, EOS=2, PAD=0
    let with_special = TokenizationComparisonResult::new(
        "ref",
        "test",
        "<s>Hello</s>",
        vec![1, 15043, 2],
        vec![1, 15043, 2],
    );

    assert!(
        with_special.tokens_identical,
        "IMP-205c: Special tokens should match"
    );

    println!("\nIMP-205c: Special Tokens:");
    println!(
        "  BOS (1): {}",
        with_special.reference_tokens.first() == Some(&1)
    );
    println!(
        "  EOS (2): {}",
        with_special.reference_tokens.last() == Some(&2)
    );
}

/// IMP-205d: Real-world tokenization comparison
#[test]
#[ignore = "Requires running llama.cpp server"]
fn test_imp_205d_realworld_tokenization() {
    let client = reqwest::blocking::Client::new();
    let text = "The quick brown fox jumps over the lazy dog.";

    let resp = client
        .post("http://localhost:8082/tokenize")
        .json(&serde_json::json!({ "content": text }))
        .send()
        .expect("Tokenize request failed");

    let json: serde_json::Value = resp.json().expect("Invalid JSON");
    let tokens: Vec<u32> = json["tokens"]
        .as_array()
        .map(|arr| {
            arr.iter()
                .filter_map(|v| v.as_u64().map(|n| n as u32))
                .collect()
        })
        .unwrap_or_default();

    let result = TokenizationComparisonResult::new(
        "llama.cpp",
        "realizar",
        text,
        tokens.clone(),
        tokens, // Compare against self for now
    );

    println!("\nIMP-205d: Real-World Tokenization:");
    println!("  Text: {}", text);
    println!("  Token count: {}", result.reference_tokens.len());
    println!(
        "  QA-002: {}",
        if result.meets_qa002 { "PASS" } else { "FAIL" }
    );
}

// ==================== IMP-206: Attention Scores Match (QA-003) ====================
// Per spec: Attention scores match reference implementation within 1e-5

/// Attention score comparison result
#[derive(Debug, Clone)]
pub struct AttentionComparisonResult {
    pub layer_idx: usize,
    pub head_idx: usize,
    pub reference_scores: Vec<f32>,
    pub test_scores: Vec<f32>,
    pub max_diff: f32,
    pub mean_diff: f32,
    pub tolerance: f32,
    pub meets_qa003: bool,
}

impl AttentionComparisonResult {
    pub fn new(
        layer: usize,
        head: usize,
        ref_scores: Vec<f32>,
        test_scores: Vec<f32>,
        tolerance: f32,
    ) -> Self {
        let diffs: Vec<f32> = ref_scores
            .iter()
            .zip(test_scores.iter())
            .map(|(a, b)| (a - b).abs())
            .collect();

        let max_diff = diffs.iter().cloned().fold(0.0_f32, f32::max);
        let mean_diff = if diffs.is_empty() {
            0.0
        } else {
            diffs.iter().sum::<f32>() / diffs.len() as f32
        };

        let meets_qa003 = max_diff <= tolerance;

        Self {
            layer_idx: layer,
            head_idx: head,
            reference_scores: ref_scores,
            test_scores,
            max_diff,
            mean_diff,
            tolerance,
            meets_qa003,
        }
    }
}

/// IMP-206a: Test attention comparison
#[test]
fn test_imp_206a_attention_comparison() {
    let ref_scores = vec![0.1, 0.2, 0.3, 0.4];
    let test_scores = vec![0.1, 0.2, 0.3, 0.4];

    let result = AttentionComparisonResult::new(0, 0, ref_scores, test_scores, 1e-5);

    assert!(result.meets_qa003, "IMP-206a: Should meet QA-003");
    assert!(
        result.max_diff < 1e-5,
        "IMP-206a: Max diff should be within tolerance"
    );

    println!("\nIMP-206a: Attention Comparison:");
    println!("  Layer: {}, Head: {}", result.layer_idx, result.head_idx);
    println!("  Max diff: {:.2e}", result.max_diff);
    println!("  Mean diff: {:.2e}", result.mean_diff);
}

/// IMP-206b: Test attention tolerance
#[test]
fn test_imp_206b_attention_tolerance() {
    let ref_scores = vec![0.25, 0.25, 0.25, 0.25];
    let test_scores = vec![0.250001, 0.249999, 0.250001, 0.249999];

    let result = AttentionComparisonResult::new(0, 0, ref_scores, test_scores, 1e-5);

    assert!(result.meets_qa003, "IMP-206b: Should be within tolerance");

    println!("\nIMP-206b: Attention Tolerance:");
    println!("  Tolerance: {:.0e}", result.tolerance);
    println!("  Max diff: {:.2e}", result.max_diff);
    println!("  Within tolerance: {}", result.meets_qa003);
}

/// IMP-206c: Test attention out of tolerance
#[test]
fn test_imp_206c_attention_out_of_tolerance() {
    let ref_scores = vec![0.25, 0.25, 0.25, 0.25];
    let test_scores = vec![0.26, 0.24, 0.26, 0.24]; // 0.01 diff

    let result = AttentionComparisonResult::new(0, 0, ref_scores, test_scores, 1e-5);

    assert!(!result.meets_qa003, "IMP-206c: Should not meet QA-003");

    println!("\nIMP-206c: Attention Out of Tolerance:");
    println!("  Max diff: {:.2e}", result.max_diff);
    println!("  Tolerance: {:.0e}", result.tolerance);
}

/// IMP-206d: Real-world attention comparison
#[test]
#[ignore = "Requires attention score extraction from inference"]
fn test_imp_206d_realworld_attention() {
    // test attention scores from layer 0, head 0
    let ref_scores = vec![0.1, 0.15, 0.2, 0.25, 0.3];
    let test_scores = vec![0.1, 0.15, 0.2, 0.25, 0.3];

    let result = AttentionComparisonResult::new(0, 0, ref_scores, test_scores, 1e-5);

    println!("\nIMP-206d: Real-World Attention Comparison:");
    println!("  Layer 0, Head 0");
    println!("  Max diff: {:.2e}", result.max_diff);
    println!(
        "  QA-003: {}",
        if result.meets_qa003 { "PASS" } else { "FAIL" }
    );
}

// ==================== IMP-207: RoPE Embeddings Match (QA-004) ====================
// Per spec: RoPE embeddings match reference within 1e-6

/// RoPE embedding comparison result
#[derive(Debug, Clone)]
pub struct RoPEComparisonResult {
    pub position: usize,
    pub dim: usize,
    pub reference_embedding: Vec<f32>,
    pub test_embedding: Vec<f32>,
    pub max_diff: f32,
    pub tolerance: f32,
    pub meets_qa004: bool,
}

impl RoPEComparisonResult {
    pub fn new(
        pos: usize,
        dim: usize,
        ref_emb: Vec<f32>,
        test_emb: Vec<f32>,
        tolerance: f32,
    ) -> Self {
        let max_diff = ref_emb
            .iter()
            .zip(test_emb.iter())
            .map(|(a, b)| (a - b).abs())
            .fold(0.0_f32, f32::max);

        let meets_qa004 = max_diff <= tolerance;

        Self {
            position: pos,
            dim,
            reference_embedding: ref_emb,
            test_embedding: test_emb,
            max_diff,
            tolerance,
            meets_qa004,
        }
    }
}

/// IMP-207a: Test RoPE comparison
#[test]
fn test_imp_207a_rope_comparison() {
    let ref_emb = vec![0.841_470_96, 0.540_302_3, 0.909_297_4, -0.416_146_84];
    let test_emb = vec![0.841_470_96, 0.540_302_3, 0.909_297_4, -0.416_146_84];

    let result = RoPEComparisonResult::new(0, 4, ref_emb, test_emb, 1e-6);

    assert!(result.meets_qa004, "IMP-207a: Should meet QA-004");

    println!("\nIMP-207a: RoPE Comparison:");
    println!("  Position: {}", result.position);
    println!("  Dimension: {}", result.dim);
    println!("  Max diff: {:.2e}", result.max_diff);
}

/// IMP-207b: Test RoPE tolerance
#[test]
fn test_imp_207b_rope_tolerance() {
    let ref_emb = vec![0.841_470_96];
    let test_emb = vec![0.841_470_96]; // 1e-10 diff

    let result = RoPEComparisonResult::new(0, 1, ref_emb, test_emb, 1e-6);

    assert!(
        result.meets_qa004,
        "IMP-207b: Should be within 1e-6 tolerance"
    );

    println!("\nIMP-207b: RoPE Tolerance:");
    println!("  Max diff: {:.2e}", result.max_diff);
    println!("  Tolerance: {:.0e}", result.tolerance);
}

/// IMP-207c: Test RoPE at different positions
#[test]
fn test_imp_207c_rope_positions() {
    // RoPE at position 0 and 100
    let pos0 = RoPEComparisonResult::new(0, 2, vec![1.0, 0.0], vec![1.0, 0.0], 1e-6);
    let pos100 = RoPEComparisonResult::new(100, 2, vec![0.5, 0.866], vec![0.5, 0.866], 1e-6);

    assert!(pos0.meets_qa004, "IMP-207c: Position 0 should match");
    assert!(pos100.meets_qa004, "IMP-207c: Position 100 should match");

    println!("\nIMP-207c: RoPE at Positions:");
    println!("  Position 0: meets QA-004 = {}", pos0.meets_qa004);
    println!("  Position 100: meets QA-004 = {}", pos100.meets_qa004);
}

/// IMP-207d: Real-world RoPE verification
#[test]
#[ignore = "Requires RoPE extraction from model"]
fn test_imp_207d_realworld_rope() {
    let ref_emb = vec![0.841_470_96, 0.540_302_3];
    let test_emb = vec![0.841_470_96, 0.540_302_3];

    let result = RoPEComparisonResult::new(1, 2, ref_emb, test_emb, 1e-6);

    println!("\nIMP-207d: Real-World RoPE:");
    println!("  Position: {}", result.position);
    println!("  Max diff: {:.2e}", result.max_diff);
    println!(
        "  QA-004: {}",
        if result.meets_qa004 { "PASS" } else { "FAIL" }
    );
}