benchmark_provider

Function benchmark_provider 

Source
pub async fn benchmark_provider<T: ProviderTrait + Send + Sync + ?Sized>(
    provider: &T,
    test_data: &BenchmarkTestData,
) -> Result<BenchmarkResults>
Expand description

Benchmark a single embedding provider

Examples found in repository?
examples/benchmark_hash.rs (line 27)
7async fn main() -> Result<(), Box<dyn std::error::Error>> {
8    println!("šŸ”„ Manx Embedding Provider Benchmarks");
9    println!("=====================================\n");
10
11    // Test different hash dimensions
12    let dimensions = vec![128, 256, 384, 512, 768];
13    let test_data = BenchmarkTestData::new_default();
14    let extended_data = BenchmarkTestData::extended();
15
16    println!("šŸ“Š Testing Hash Provider with Different Dimensions");
17    println!(
18        "Test Data: {} texts with {} similarity pairs\n",
19        test_data.texts.len(),
20        test_data.semantic_pairs.len()
21    );
22
23    let mut results = Vec::new();
24
25    for dim in &dimensions {
26        let provider = HashProvider::new(*dim);
27        let result = benchmark_provider(&provider, &test_data).await?;
28        results.push(result);
29    }
30
31    print_benchmark_results(&results);
32
33    println!("\nšŸ“ˆ Extended Dataset Benchmark (Hash-384)");
34    println!(
35        "Extended Data: {} texts with {} similarity pairs\n",
36        extended_data.texts.len(),
37        extended_data.semantic_pairs.len()
38    );
39
40    let provider_384 = HashProvider::new(384);
41    let extended_result = benchmark_provider(&provider_384, &extended_data).await?;
42    print_benchmark_results(&[extended_result]);
43
44    println!("\nāœ… Benchmark Complete!");
45    println!("šŸ’” Next: Compare with ONNX-based embeddings for quality improvements");
46
47    Ok(())
48}
More examples
Hide additional examples
examples/benchmark_onnx_vs_hash.rs (line 45)
13async fn main() -> Result<()> {
14    // Initialize logging to see what's happening
15    env_logger::builder()
16        .filter_level(log::LevelFilter::Info)
17        .init();
18
19    println!("šŸš€ Manx Embedding Provider Performance Comparison");
20    println!("================================================");
21    println!("Comparing Hash vs ONNX-based embeddings\n");
22
23    // Test data for comparison
24    let test_data = BenchmarkTestData::extended();
25    println!("šŸ“Š Test Dataset:");
26    println!(
27        "   {} texts with {} semantic similarity pairs",
28        test_data.texts.len(),
29        test_data.semantic_pairs.len()
30    );
31
32    println!("\nšŸ“‹ Sample texts:");
33    for (i, text) in test_data.texts.iter().take(3).enumerate() {
34        println!("   {}. {}", i + 1, text);
35    }
36    println!("   ... and {} more", test_data.texts.len() - 3);
37
38    println!("\n{}", "=".repeat(60));
39
40    // Benchmark 1: Hash Provider (current baseline)
41    println!("\nšŸ”§ PHASE 1: Hash-based Embeddings (Baseline)");
42    println!("---------------------------------------------");
43
44    let hash_provider = HashProvider::new(384);
45    let hash_result = benchmark_provider(&hash_provider, &test_data).await?;
46
47    print_benchmark_results(std::slice::from_ref(&hash_result));
48
49    // Benchmark 2: ONNX Provider (if available)
50    println!("\nšŸ¤– PHASE 2: ONNX-based Embeddings (Testing)");
51    println!("--------------------------------------------");
52
53    // Check if we need to download the model
54    let model_name = "sentence-transformers/all-MiniLM-L6-v2";
55    println!("šŸ“¦ Checking for ONNX model: {}", model_name);
56
57    // Note: In a real implementation, we'd download the model here
58    // For now, we'll create a simulation to show what the comparison would look like
59    println!("āš ļø  ONNX model download not implemented in this demo");
60    println!("    In production, this would:");
61    println!("    1. Download {} from HuggingFace", model_name);
62    println!("    2. Convert to ONNX format if needed");
63    println!("    3. Load tokenizer and model files");
64    println!("    4. Initialize ONNX Runtime session");
65
66    // Simulate what ONNX results would look like based on research
67    simulate_onnx_comparison(&hash_result).await?;
68
69    println!("\n{}", "=".repeat(60));
70    println!("\nšŸ“ˆ SUMMARY & RECOMMENDATIONS");
71    println!("============================");
72
73    print_recommendations(&hash_result);
74
75    println!("\nāœ… Benchmark Complete!");
76    println!("\nšŸ’” To enable real ONNX testing:");
77    println!("   1. Implement model download from HuggingFace");
78    println!("   2. Add ONNX model file handling");
79    println!(
80        "   3. Test with: cargo run --example benchmark_onnx_vs_hash --features onnx-embeddings"
81    );
82
83    Ok(())
84}