diff --git a/tig-runtime/src/main.rs b/tig-runtime/src/main.rs index 823d080..1356845 100644 --- a/tig-runtime/src/main.rs +++ b/tig-runtime/src/main.rs @@ -34,7 +34,7 @@ fn cli() -> Command { .value_parser(clap::value_parser!(PathBuf)), ) .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)), ) .arg( @@ -89,12 +89,7 @@ pub fn compute_solution( let settings = load_settings(&settings); let seed = settings.calc_seed(&rand_hash, nonce); - let hyperparameters = hyperparameters.map(|x| { - dejsonify::>(&x).unwrap_or_else(|_| { - eprintln!("Failed to parse hyperparameters as JSON"); - std::process::exit(1); - }) - }); + let hyperparameters = hyperparameters.map(|x| load_hyperparameters(&x)); let library = load_module(&library_path)?; 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 { + 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::>(&hyperparameters).unwrap_or_else(|_| { + eprintln!("Failed to parse hyperparameters as JSON"); + std::process::exit(1); + }) +} + pub fn load_module(path: &PathBuf) -> Result { let res = panic::catch_unwind(|| unsafe { Library::new(path) });