use tempfile::tempdir;
use super::*;
fn write(dir: &Path, name: &str, body: &str) {
let path = dir.join(name);
fs::create_dir_all(path.parent().unwrap()).unwrap();
fs::write(path, body).unwrap();
}
#[test]
fn discovers_single_safetensors_and_optional_files() {
let dir = tempdir().unwrap();
write(dir.path(), "config.json", r#"{"model_type":"bert"}"#);
write(dir.path(), "tokenizer.json", "{}");
write(dir.path(), "tokenizer_config.json", "{}");
write(dir.path(), "model.safetensors", "");
write(
dir.path(),
"1_Pooling/config.json",
r#"{"pooling_mode_cls_token":true}"#,
);
let files = discover(dir.path(), Pipeline::Dense).unwrap();
assert_eq!(files.weights, vec![dir.path().join("model.safetensors")]);
assert!(files.pooling_config.is_some());
assert!(files.modules.is_none());
assert!(files.tokenizer_config.is_some());
assert_eq!(read_architecture(&files.config).unwrap(), "bert");
assert_eq!(
read_pooling(files.pooling_config.as_ref().unwrap()).unwrap(),
Pooling::Cls
);
}
#[test]
fn discovers_sharded_weights_in_order() {
let dir = tempdir().unwrap();
write(dir.path(), "config.json", r#"{"model_type":"bert"}"#);
write(dir.path(), "tokenizer.json", "{}");
write(
dir.path(),
"model.safetensors.index.json",
r#"{"weight_map":{"a":"model-00002-of-00002.safetensors","b":"model-00001-of-00002.safetensors","c":"model-00001-of-00002.safetensors"}}"#,
);
let files = discover(dir.path(), Pipeline::Dense).unwrap();
assert_eq!(
files.weights,
vec![
dir.path().join("model-00001-of-00002.safetensors"),
dir.path().join("model-00002-of-00002.safetensors")
]
);
}
#[test]
fn discovers_a_torch_pickle_when_there_is_no_safetensors() {
let dir = tempdir().unwrap();
write(dir.path(), "config.json", r#"{"model_type":"xlm-roberta"}"#);
write(dir.path(), "tokenizer.json", "{}");
write(dir.path(), "pytorch_model.bin", "");
let files = discover(dir.path(), Pipeline::Dense).unwrap();
assert_eq!(files.weights, vec![dir.path().join("pytorch_model.bin")]);
}
mod errors;
mod pipeline;
mod shape;