ruvector-tiny-dancer-core 2.0.6

Production-grade AI agent routing system with FastGRNN neural inference
Documentation
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);