Files
wifi-densepose/crates/ruvector-tiny-dancer-core/benches/feature_engineering.rs
ruv d803bfe2b1 Squashed 'vendor/ruvector/' content from commit b64c2172
git-subtree-dir: vendor/ruvector
git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
2026-02-28 14:39:40 -05:00

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);