Load hyperparameters from json string or json file.

This commit is contained in:
FiveMovesAhead 2025-10-06 12:40:28 +01:00
parent 3bb141beed
commit aa0246b1cd

View File

@ -34,7 +34,7 @@ fn cli() -> Command {
.value_parser(clap::value_parser!(PathBuf)), .value_parser(clap::value_parser!(PathBuf)),
) )
.arg( .arg(
arg!(--hyperparameters [HYPERPARAMETERS] "A json string of hyperparameters") arg!(--hyperparameters [HYPERPARAMETERS] "Hyperparameters json string or path to json file")
.value_parser(clap::value_parser!(String)), .value_parser(clap::value_parser!(String)),
) )
.arg( .arg(
@ -89,12 +89,7 @@ pub fn compute_solution(
let settings = load_settings(&settings); let settings = load_settings(&settings);
let seed = settings.calc_seed(&rand_hash, nonce); let seed = settings.calc_seed(&rand_hash, nonce);
let hyperparameters = hyperparameters.map(|x| { let hyperparameters = hyperparameters.map(|x| load_hyperparameters(&x));
dejsonify::<Map<String, Value>>(&x).unwrap_or_else(|_| {
eprintln!("Failed to parse hyperparameters as JSON");
std::process::exit(1);
})
});
let library = load_module(&library_path)?; let library = load_module(&library_path)?;
let fuel_remaining_ptr = unsafe { *library.get::<*mut u64>(b"__fuel_remaining")? }; let fuel_remaining_ptr = unsafe { *library.get::<*mut u64>(b"__fuel_remaining")? };
@ -332,6 +327,22 @@ fn load_settings(settings: &str) -> BenchmarkSettings {
}) })
} }
fn load_hyperparameters(hyperparameters: &str) -> Map<String, Value> {
let hyperparameters = if hyperparameters.ends_with(".json") {
fs::read_to_string(hyperparameters).unwrap_or_else(|_| {
eprintln!("Failed to read hyperparameters file: {}", hyperparameters);
std::process::exit(1);
})
} else {
hyperparameters.to_string()
};
dejsonify::<Map<String, Value>>(&hyperparameters).unwrap_or_else(|_| {
eprintln!("Failed to parse hyperparameters as JSON");
std::process::exit(1);
})
}
pub fn load_module(path: &PathBuf) -> Result<Library> { pub fn load_module(path: &PathBuf) -> Result<Library> {
let res = panic::catch_unwind(|| unsafe { Library::new(path) }); let res = panic::catch_unwind(|| unsafe { Library::new(path) });