use mlmf::formats::gguf::GGUFContent;
use std::path::Path;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("๐งช Testing GGUF Loading with Lightbulb Models");
println!("===========================================\n");
let test_models = [
"../lightbulb/models/TinyLlama-1.1B-Chat-v1.0-f16.gguf",
"../lightbulb/models/tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf",
"../lightbulb/models/Phi-3-mini-4k-instruct-q4.gguf",
];
for model_path in &test_models {
println!("๐ Testing model: {}", model_path);
if !Path::new(model_path).exists() {
println!(" โ ๏ธ File not found, skipping...\n");
continue;
}
match test_gguf_model(model_path) {
Ok(_) => println!(" โ
Test passed!\n"),
Err(e) => println!(" โ Test failed: {}\n", e),
}
}
println!("๐ GGUF testing complete!");
Ok(())
}
fn test_gguf_model(path: &str) -> Result<(), Box<dyn std::error::Error>> {
let gguf_content = GGUFContent::read(path)?;
let tensor_names = gguf_content.tensor_names();
println!(" ๐ Found {} tensors", tensor_names.len());
let display_count = std::cmp::min(5, tensor_names.len());
for (i, name) in tensor_names.iter().take(display_count).enumerate() {
println!(" {}. {}", i + 1, name);
}
if tensor_names.len() > display_count {
println!(" ... and {} more", tensor_names.len() - display_count);
}
if let Some(first_tensor_name) = tensor_names.first() {
match gguf_content.get_qtensor(first_tensor_name) {
Ok(_) => println!(" โ
Successfully loaded tensor: {}", first_tensor_name),
Err(e) => {
if e.to_string().contains("not yet fully implemented") {
println!(" โ ๏ธ Tensor loading placeholder active (expected)");
} else {
println!(" โ Unexpected error loading tensor: {}", e);
}
}
}
}
let all_names = gguf_content.get_all_tensor_names();
println!(
" ๐ get_all_tensor_names() returned {} names",
all_names.len()
);
if all_names.len() == tensor_names.len() {
println!(" โ
Tensor name counts match");
} else {
println!(
" โ ๏ธ Name count mismatch: {} vs {}",
all_names.len(),
tensor_names.len()
);
}
Ok(())
}