git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
87 lines
2.5 KiB
Rust
87 lines
2.5 KiB
Rust
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
|
use ruvector_tiny_dancer_core::{
|
|
feature_engineering::{FeatureConfig, FeatureEngineer},
|
|
Candidate,
|
|
};
|
|
use std::collections::HashMap;
|
|
|
|
fn bench_cosine_similarity(c: &mut Criterion) {
|
|
let engineer = FeatureEngineer::new();
|
|
|
|
c.bench_function("cosine_similarity_384d", |b| {
|
|
let a = vec![0.5; 384];
|
|
let b = vec![0.4; 384];
|
|
|
|
let candidate = Candidate {
|
|
id: "test".to_string(),
|
|
embedding: b.clone(),
|
|
metadata: HashMap::new(),
|
|
created_at: chrono::Utc::now().timestamp(),
|
|
access_count: 10,
|
|
success_rate: 0.9,
|
|
};
|
|
|
|
b.iter(|| {
|
|
engineer
|
|
.extract_features(black_box(&a), black_box(&candidate), None)
|
|
.unwrap()
|
|
});
|
|
});
|
|
}
|
|
|
|
fn bench_feature_weights(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("feature_weighting");
|
|
|
|
let configs = vec![
|
|
("balanced", FeatureConfig::default()),
|
|
(
|
|
"similarity_heavy",
|
|
FeatureConfig {
|
|
similarity_weight: 0.7,
|
|
recency_weight: 0.1,
|
|
frequency_weight: 0.1,
|
|
success_weight: 0.05,
|
|
metadata_weight: 0.05,
|
|
..Default::default()
|
|
},
|
|
),
|
|
(
|
|
"recency_heavy",
|
|
FeatureConfig {
|
|
similarity_weight: 0.2,
|
|
recency_weight: 0.5,
|
|
frequency_weight: 0.1,
|
|
success_weight: 0.1,
|
|
metadata_weight: 0.1,
|
|
..Default::default()
|
|
},
|
|
),
|
|
];
|
|
|
|
for (name, config) in configs {
|
|
group.bench_function(name, |b| {
|
|
let engineer = FeatureEngineer::with_config(config);
|
|
let query = vec![0.5; 128];
|
|
let candidate = Candidate {
|
|
id: "test".to_string(),
|
|
embedding: vec![0.4; 128],
|
|
metadata: HashMap::new(),
|
|
created_at: chrono::Utc::now().timestamp(),
|
|
access_count: 100,
|
|
success_rate: 0.95,
|
|
};
|
|
|
|
b.iter(|| {
|
|
engineer
|
|
.extract_features(black_box(&query), black_box(&candidate), None)
|
|
.unwrap()
|
|
});
|
|
});
|
|
}
|
|
|
|
group.finish();
|
|
}
|
|
|
|
criterion_group!(benches, bench_cosine_similarity, bench_feature_weights);
|
|
criterion_main!(benches);
|