use realizar::gguf::{MappedGGUFModel, OwnedQuantizedModel};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let path = "/home/noah/.cache/huggingface/hub/models--Qwen--Qwen2-0.5B-Instruct-GGUF/snapshots/198f08841147e5196a6a69bd0053690fb1fd3857/qwen2-0_5b-instruct-q4_0.gguf";
let mapped = MappedGGUFModel::from_path(path)?;
let model = OwnedQuantizedModel::from_mapped(&mapped)?;
let vocab = mapped.model.vocabulary().expect("vocab");
println!("=== Position-Specific Trace ===\n");
let _hidden_dim = model.config().hidden_dim;
let single = vec![17u32];
let logits_single = model.forward(&single)?;
let prefixes = vec![
(15, "0"), (16, "1"), (17, "2"), (18, "3"), (10, "+"), (28, "="), ];
println!("Single token '2' (token 17) at position 0:");
println!(" Logit[0] ('!'): {:.4}", logits_single[0]);
let mut single_idx: Vec<_> = logits_single.iter().enumerate().collect();
single_idx.sort_by(|a, b| b.1.partial_cmp(a.1).unwrap());
let top = single_idx[0].0;
let top_s = vocab.get(top).map_or("?", |s| s.as_str());
println!(" Top: {} ({:?}) = {:.4}", top, top_s, single_idx[0].1);
println!("\nToken '2' (token 17) at position 1 (after various prefixes):");
for (prefix_tok, prefix_name) in &prefixes {
let tokens = vec![*prefix_tok, 17];
let logits = model.forward(&tokens)?;
let mut idx: Vec<_> = logits.iter().enumerate().collect();
idx.sort_by(|a, b| b.1.partial_cmp(a.1).unwrap());
let top_tok = idx[0].0;
let top_s = vocab.get(top_tok).map_or("?", |s| s.as_str());
let marker = if top_tok == 0 { " <-- BUG" } else { "" };
println!(
" After '{}': Logit[0]={:.4}, Top={} ({:?}) = {:.4}{}",
prefix_name, logits[0], top_tok, top_s, idx[0].1, marker
);
}
println!("\n=== Single token predictions for each prefix ===");
for (prefix_tok, prefix_name) in &prefixes {
let tokens = vec![*prefix_tok];
let logits = model.forward(&tokens)?;
let mut idx: Vec<_> = logits.iter().enumerate().collect();
idx.sort_by(|a, b| b.1.partial_cmp(a.1).unwrap());
let top_tok = idx[0].0;
let top_s = vocab.get(top_tok).map_or("?", |s| s.as_str());
println!(
" '{}' (tok {}): Logit[0]={:.4}, Top={} ({:?})",
prefix_name, prefix_tok, logits[0], top_tok, top_s
);
}
println!("\n=== Correlation Analysis ===");
for (prefix_tok, prefix_name) in &prefixes {
let single_prefix = model.forward(&[*prefix_tok])?;
let with_suffix = model.forward(&[*prefix_tok, 17])?;
let increase = with_suffix[0] - single_prefix[0];
println!(
" '{}' + '2': Logit[0] increase = {:.4}",
prefix_name, increase
);
}
Ok(())
}