use super::net::NeuralPrior;
use crate::game::moves::Move;
use crate::game::rules::Variant;
use candle_core::Device;
fn corpus_json(variant: Variant) -> &'static str {
match variant.name() {
"5T" => include_str!("../../../assets/neural/corpus-5T.json"),
_ => "[]",
}
}
fn prior_bytes(variant: Variant) -> &'static [u8] {
match variant.name() {
"5T" => include_bytes!("../../../assets/neural/prior-5T.safetensors"),
_ => &[],
}
}
pub fn corpus(variant: Variant) -> Vec<Vec<Move>> {
serde_json::from_str(corpus_json(variant)).unwrap_or_default()
}
pub fn has_corpus(variant: Variant) -> bool {
corpus_json(variant).trim() != "[]"
}
pub fn prior(variant: Variant) -> Option<NeuralPrior> {
let bytes = prior_bytes(variant);
if bytes.is_empty() {
return None;
}
let path = std::env::temp_dir().join(format!(
"mso-bundled-{}-{}.safetensors",
variant.name(),
std::process::id()
));
std::fs::write(&path, bytes).ok()?;
let res = NeuralPrior::load(&path.to_string_lossy(), Device::Cpu);
let _ = std::fs::remove_file(&path);
res.ok()
}
pub fn has_prior(variant: Variant) -> bool {
!prior_bytes(variant).is_empty()
}