use clap::Parser;
use diskann_providers::storage::FileStorageProvider;
use diskann_providers::utils::random;
use diskann_tools::utils::{
init_subscriber, relative_contrast::compute_relative_contrast, CMDResult, DataType,
};
use diskann_vector::Half;
fn main() -> CMDResult<()> {
init_subscriber();
let args = RelativeContrastArgs::parse();
let storage_provider = FileStorageProvider;
let mut rng = random::create_rnd();
let result = match args.data_type {
DataType::Float => compute_relative_contrast::<f32, _, _>(
&storage_provider,
&args.data_file,
&args.query_file,
&args.gt_file,
args.recall_at,
args.search_list,
&mut rng,
),
DataType::Fp16 => compute_relative_contrast::<Half, _, _>(
&storage_provider,
&args.data_file,
&args.query_file,
&args.gt_file,
args.recall_at,
args.search_list,
&mut rng,
),
DataType::Uint8 => compute_relative_contrast::<u8, _, _>(
&storage_provider,
&args.data_file,
&args.query_file,
&args.gt_file,
args.recall_at,
args.search_list,
&mut rng,
),
DataType::Int8 => compute_relative_contrast::<i8, _, _>(
&storage_provider,
&args.data_file,
&args.query_file,
&args.gt_file,
args.recall_at,
args.search_list,
&mut rng,
),
};
match result {
Ok(_) => {
tracing::info!("Relative contrast computation completed successfully");
Ok(())
}
Err(err) => {
tracing::error!("Error: {:?}", err);
Err(err)
}
}
}
#[derive(Debug, Parser)]
struct RelativeContrastArgs {
#[arg(long = "data_type", default_value = "fp16")]
pub data_type: DataType,
#[arg(long = "data_file", short, required = true)]
pub data_file: String,
#[arg(long = "query_file", short, required = true)]
pub query_file: String,
#[arg(long = "gt_file", required = true)]
pub gt_file: String,
#[arg(long = "recall_at", short = 'K', default_value = "10")]
pub recall_at: usize,
#[arg(long = "search_list", short = 'L', default_value = "10")]
pub search_list: usize,
}