mlmf 0.2.0

Machine Learning Model Files - Loading, saving, and dynamic mapping for ML models
Documentation
use mlmf::{LoadOptions, Result, load_model};

fn main() -> Result<()> {
    // Test quantized tensor access with a small test file
    let test_file = "test_quantized.gguf";
    
    println!("Testing quantized tensor preservation in MLMF...\n");
    
    // Test 1: Load without preserving quantization (default behavior)
    println!("1. Testing default loading (no quantized tensor preservation):");
    let options_no_quant = LoadOptions {
        preserve_quantization: false,
        ..Default::default()
    };
    
    // Try to load a GGUF file if available
    match load_model(test_file, options_no_quant) {
        Ok(model) => {
            println!("   ✓ Model loaded successfully");
            println!("   Regular tensors: {}", model.raw_tensors.len());
            match &model.quantized_tensors {
                Some(qtensors) => println!("   Quantized tensors: {} (should be 0)", qtensors.len()),
                None => println!("   Quantized tensors: None (expected)"),
            }
        }
        Err(e) => {
            println!("   ⚠ Could not load test file: {}", e);
            println!("   This is expected if no GGUF file is available for testing");
        }
    }
    
    println!();
    
    // Test 2: Load with quantization preservation
    println!("2. Testing with quantized tensor preservation:");
    let options_with_quant = LoadOptions {
        preserve_quantization: true,
        ..Default::default()
    };
    
    match load_model(test_file, options_with_quant) {
        Ok(model) => {
            println!("   ✓ Model loaded successfully with quantization preservation");
            println!("   Regular tensors: {}", model.raw_tensors.len());
            match &model.quantized_tensors {
                Some(qtensors) => {
                    println!("   Quantized tensors: {}", qtensors.len());
                    if !qtensors.is_empty() {
                        println!("   ✓ Quantized tensors are preserved!");
                        // Show first few quantized tensor names
                        let mut count = 0;
                        for name in qtensors.keys() {
                            if count < 3 {
                                println!("     - {}", name);
                                count += 1;
                            }
                        }
                        if qtensors.len() > 3 {
                            println!("     ... and {} more", qtensors.len() - 3);
                        }
                    }
                }
                None => println!("   Quantized tensors: None"),
            }
        }
        Err(e) => {
            println!("   ⚠ Could not load test file: {}", e);
            println!("   This is expected if no GGUF file is available for testing");
        }
    }
    
    println!();
    
    // Test 3: Show the difference in LoadOptions
    println!("3. LoadOptions configuration:");
    println!("   Default preserve_quantization: {}", LoadOptions::default().preserve_quantization);
    println!("   With quantization enabled: true");
    
    println!();
    println!("✓ Quantized tensor preservation feature implementation complete!");
    println!();
    println!("Usage example:");
    println!("```rust");
    println!("use mlmf::{{LoadOptions, load_model}};");
    println!();
    println!("let options = LoadOptions {{");
    println!("    preserve_quantization: true,");
    println!("    ..Default::default()");
    println!("}};");
    println!();
    println!("let model = load_model(\"model.gguf\", options)?;");
    println!();
    println!("// Access regular tensors");
    println!("let regular_tensor = &model.raw_tensors[\"layer.0.weight\"];");
    println!();
    println!("// Access quantized tensors (if preserve_quantization = true)");
    println!("if let Some(ref qtensors) = model.quantized_tensors {{");
    println!("    let quantized_tensor = &qtensors[\"layer.0.weight\"];");
    println!("    // Use quantized_tensor with Candle's QTensor API");
    println!("}}");
    println!("```");
    
    Ok(())
}