use crate::convert::GgufToAprConverter;
use crate::gguf::{GGUF_MAGIC, GGUF_VERSION_V3};
fn build_divergent_pygmy_llama_no_layers() -> Vec<u8> {
let mut data = Vec::new();
data.extend_from_slice(&GGUF_MAGIC.to_le_bytes());
data.extend_from_slice(&GGUF_VERSION_V3.to_le_bytes());
data.extend_from_slice(&1u64.to_le_bytes()); data.extend_from_slice(&3u64.to_le_bytes());
let key1 = "general.architecture";
data.extend_from_slice(&(key1.len() as u64).to_le_bytes());
data.extend_from_slice(key1.as_bytes());
data.extend_from_slice(&8u32.to_le_bytes()); let val1 = "llama";
data.extend_from_slice(&(val1.len() as u64).to_le_bytes());
data.extend_from_slice(val1.as_bytes());
let key2 = "llama.block_count";
data.extend_from_slice(&(key2.len() as u64).to_le_bytes());
data.extend_from_slice(key2.as_bytes());
data.extend_from_slice(&4u32.to_le_bytes()); data.extend_from_slice(&32u32.to_le_bytes());
let key3 = "llama.embedding_length";
data.extend_from_slice(&(key3.len() as u64).to_le_bytes());
data.extend_from_slice(key3.as_bytes());
data.extend_from_slice(&4u32.to_le_bytes());
data.extend_from_slice(&4096u32.to_le_bytes());
let tensor_name = "token_embd.weight";
data.extend_from_slice(&(tensor_name.len() as u64).to_le_bytes());
data.extend_from_slice(tensor_name.as_bytes());
data.extend_from_slice(&2u32.to_le_bytes()); data.extend_from_slice(&32000u64.to_le_bytes()); data.extend_from_slice(&4096u64.to_le_bytes()); data.extend_from_slice(&0u32.to_le_bytes()); data.extend_from_slice(&0u64.to_le_bytes());
while data.len() % 32 != 0 {
data.push(0);
}
for _ in 0..16 {
data.extend_from_slice(&1.0f32.to_le_bytes());
}
data
}
fn build_divergent_pygmy_gpt2_llama_tensors() -> Vec<u8> {
let mut data = Vec::new();
data.extend_from_slice(&GGUF_MAGIC.to_le_bytes());
data.extend_from_slice(&GGUF_VERSION_V3.to_le_bytes());
data.extend_from_slice(&3u64.to_le_bytes()); data.extend_from_slice(&2u64.to_le_bytes());
let key1 = "general.architecture";
data.extend_from_slice(&(key1.len() as u64).to_le_bytes());
data.extend_from_slice(key1.as_bytes());
data.extend_from_slice(&8u32.to_le_bytes());
let val1 = "gpt2";
data.extend_from_slice(&(val1.len() as u64).to_le_bytes());
data.extend_from_slice(val1.as_bytes());
let key2 = "gpt2.block_count";
data.extend_from_slice(&(key2.len() as u64).to_le_bytes());
data.extend_from_slice(key2.as_bytes());
data.extend_from_slice(&4u32.to_le_bytes());
data.extend_from_slice(&1u32.to_le_bytes());
let tensors = [
("blk.0.attn_q.weight", 64, 64), ("blk.0.attn_k.weight", 64, 64), ("blk.0.ffn_gate.weight", 128, 64), ];
let mut offset = 0u64;
for (name, d0, d1) in tensors {
data.extend_from_slice(&(name.len() as u64).to_le_bytes());
data.extend_from_slice(name.as_bytes());
data.extend_from_slice(&2u32.to_le_bytes());
data.extend_from_slice(&(d0 as u64).to_le_bytes());
data.extend_from_slice(&(d1 as u64).to_le_bytes());
data.extend_from_slice(&0u32.to_le_bytes()); data.extend_from_slice(&offset.to_le_bytes());
offset += (d0 * d1 * 4) as u64;
}
while data.len() % 32 != 0 {
data.push(0);
}
for _ in 0..(offset / 4) {
data.extend_from_slice(&0.5f32.to_le_bytes());
}
data
}
fn build_divergent_pygmy_dimension_mismatch() -> Vec<u8> {
let mut data = Vec::new();
data.extend_from_slice(&GGUF_MAGIC.to_le_bytes());
data.extend_from_slice(&GGUF_VERSION_V3.to_le_bytes());
data.extend_from_slice(&2u64.to_le_bytes());
data.extend_from_slice(&3u64.to_le_bytes());
let key1 = "general.architecture";
data.extend_from_slice(&(key1.len() as u64).to_le_bytes());
data.extend_from_slice(key1.as_bytes());
data.extend_from_slice(&8u32.to_le_bytes());
let val1 = "llama";
data.extend_from_slice(&(val1.len() as u64).to_le_bytes());
data.extend_from_slice(val1.as_bytes());
let key2 = "llama.embedding_length";
data.extend_from_slice(&(key2.len() as u64).to_le_bytes());
data.extend_from_slice(key2.as_bytes());
data.extend_from_slice(&4u32.to_le_bytes());
data.extend_from_slice(&4096u32.to_le_bytes());
let key3 = "llama.block_count";
data.extend_from_slice(&(key3.len() as u64).to_le_bytes());
data.extend_from_slice(key3.as_bytes());
data.extend_from_slice(&4u32.to_le_bytes());
data.extend_from_slice(&1u32.to_le_bytes());
let t1 = "token_embd.weight";
data.extend_from_slice(&(t1.len() as u64).to_le_bytes());
data.extend_from_slice(t1.as_bytes());
data.extend_from_slice(&2u32.to_le_bytes());
data.extend_from_slice(&1000u64.to_le_bytes()); data.extend_from_slice(&128u64.to_le_bytes()); data.extend_from_slice(&0u32.to_le_bytes());
data.extend_from_slice(&0u64.to_le_bytes());
let t2 = "blk.0.attn_q.weight";
data.extend_from_slice(&(t2.len() as u64).to_le_bytes());
data.extend_from_slice(t2.as_bytes());
data.extend_from_slice(&2u32.to_le_bytes());
data.extend_from_slice(&128u64.to_le_bytes());
data.extend_from_slice(&128u64.to_le_bytes());
data.extend_from_slice(&0u32.to_le_bytes());
data.extend_from_slice(&((1000 * 128 * 4) as u64).to_le_bytes());
while data.len() % 32 != 0 {
data.push(0);
}
for _ in 0..1000 {
data.extend_from_slice(&0.1f32.to_le_bytes());
}
data
}
fn build_divergent_pygmy_unknown_architecture() -> Vec<u8> {
let mut data = Vec::new();
data.extend_from_slice(&GGUF_MAGIC.to_le_bytes());
data.extend_from_slice(&GGUF_VERSION_V3.to_le_bytes());
data.extend_from_slice(&1u64.to_le_bytes());
data.extend_from_slice(&1u64.to_le_bytes());
let key = "general.architecture";
data.extend_from_slice(&(key.len() as u64).to_le_bytes());
data.extend_from_slice(key.as_bytes());
data.extend_from_slice(&8u32.to_le_bytes());
let val = "quantum_transformer_9000"; data.extend_from_slice(&(val.len() as u64).to_le_bytes());
data.extend_from_slice(val.as_bytes());
let t = "token_embd.weight";
data.extend_from_slice(&(t.len() as u64).to_le_bytes());
data.extend_from_slice(t.as_bytes());
data.extend_from_slice(&2u32.to_le_bytes());
data.extend_from_slice(&100u64.to_le_bytes());
data.extend_from_slice(&64u64.to_le_bytes());
data.extend_from_slice(&0u32.to_le_bytes());
data.extend_from_slice(&0u64.to_le_bytes());
while data.len() % 32 != 0 {
data.push(0);
}
for _ in 0..100 {
data.extend_from_slice(&1.0f32.to_le_bytes());
}
data
}
fn build_divergent_pygmy_empty_architecture() -> Vec<u8> {
let mut data = Vec::new();
data.extend_from_slice(&GGUF_MAGIC.to_le_bytes());
data.extend_from_slice(&GGUF_VERSION_V3.to_le_bytes());
data.extend_from_slice(&1u64.to_le_bytes());
data.extend_from_slice(&1u64.to_le_bytes());
let key = "general.architecture";
data.extend_from_slice(&(key.len() as u64).to_le_bytes());
data.extend_from_slice(key.as_bytes());
data.extend_from_slice(&8u32.to_le_bytes());
data.extend_from_slice(&0u64.to_le_bytes());
let t = "test.weight";
data.extend_from_slice(&(t.len() as u64).to_le_bytes());
data.extend_from_slice(t.as_bytes());
data.extend_from_slice(&1u32.to_le_bytes());
data.extend_from_slice(&64u64.to_le_bytes());
data.extend_from_slice(&0u32.to_le_bytes());
data.extend_from_slice(&0u64.to_le_bytes());
while data.len() % 32 != 0 {
data.push(0);
}
for _ in 0..64 {
data.extend_from_slice(&1.0f32.to_le_bytes());
}
data
}
fn build_divergent_pygmy_metadata_heavy() -> Vec<u8> {
let mut data = Vec::new();
data.extend_from_slice(&GGUF_MAGIC.to_le_bytes());
data.extend_from_slice(&GGUF_VERSION_V3.to_le_bytes());
data.extend_from_slice(&1u64.to_le_bytes()); data.extend_from_slice(&20u64.to_le_bytes());
for i in 0..20 {
let key = format!("custom.param_{:02}", i);
data.extend_from_slice(&(key.len() as u64).to_le_bytes());
data.extend_from_slice(key.as_bytes());
data.extend_from_slice(&4u32.to_le_bytes()); data.extend_from_slice(&(i as u32).to_le_bytes());
}
let t = "weights";
data.extend_from_slice(&(t.len() as u64).to_le_bytes());
data.extend_from_slice(t.as_bytes());
data.extend_from_slice(&1u32.to_le_bytes());
data.extend_from_slice(&16u64.to_le_bytes());
data.extend_from_slice(&0u32.to_le_bytes());
data.extend_from_slice(&0u64.to_le_bytes());
while data.len() % 32 != 0 {
data.push(0);
}
for _ in 0..16 {
data.extend_from_slice(&1.0f32.to_le_bytes());
}
data
}
fn build_divergent_pygmy_conflicting_heads() -> Vec<u8> {
let mut data = Vec::new();
data.extend_from_slice(&GGUF_MAGIC.to_le_bytes());
data.extend_from_slice(&GGUF_VERSION_V3.to_le_bytes());
data.extend_from_slice(&1u64.to_le_bytes());
data.extend_from_slice(&4u64.to_le_bytes());
let key1 = "general.architecture";
data.extend_from_slice(&(key1.len() as u64).to_le_bytes());
data.extend_from_slice(key1.as_bytes());
data.extend_from_slice(&8u32.to_le_bytes());
let val1 = "llama";
data.extend_from_slice(&(val1.len() as u64).to_le_bytes());
data.extend_from_slice(val1.as_bytes());
let key2 = "llama.attention.head_count";
data.extend_from_slice(&(key2.len() as u64).to_le_bytes());
data.extend_from_slice(key2.as_bytes());
data.extend_from_slice(&4u32.to_le_bytes());
data.extend_from_slice(&32u32.to_le_bytes());
let key3 = "llama.attention.head_count_kv";
data.extend_from_slice(&(key3.len() as u64).to_le_bytes());
data.extend_from_slice(key3.as_bytes());
data.extend_from_slice(&4u32.to_le_bytes());
data.extend_from_slice(&8u32.to_le_bytes());
let key4 = "llama.embedding_length";
data.extend_from_slice(&(key4.len() as u64).to_le_bytes());
data.extend_from_slice(key4.as_bytes());
data.extend_from_slice(&4u32.to_le_bytes());
data.extend_from_slice(&64u32.to_le_bytes());
let t = "token_embd.weight";
data.extend_from_slice(&(t.len() as u64).to_le_bytes());
data.extend_from_slice(t.as_bytes());
data.extend_from_slice(&2u32.to_le_bytes());
data.extend_from_slice(&1000u64.to_le_bytes());
data.extend_from_slice(&64u64.to_le_bytes());
data.extend_from_slice(&0u32.to_le_bytes());
data.extend_from_slice(&0u64.to_le_bytes());
while data.len() % 32 != 0 {
data.push(0);
}
for _ in 0..100 {
data.extend_from_slice(&1.0f32.to_le_bytes());
}
data
}
fn build_divergent_pygmy_zero_vocab() -> Vec<u8> {
let mut data = Vec::new();
data.extend_from_slice(&GGUF_MAGIC.to_le_bytes());
data.extend_from_slice(&GGUF_VERSION_V3.to_le_bytes());
data.extend_from_slice(&1u64.to_le_bytes());
data.extend_from_slice(&2u64.to_le_bytes());
let key1 = "general.architecture";
data.extend_from_slice(&(key1.len() as u64).to_le_bytes());
data.extend_from_slice(key1.as_bytes());
data.extend_from_slice(&8u32.to_le_bytes());
let val1 = "llama";
data.extend_from_slice(&(val1.len() as u64).to_le_bytes());
data.extend_from_slice(val1.as_bytes());
let key2 = "llama.vocab_size";
data.extend_from_slice(&(key2.len() as u64).to_le_bytes());
data.extend_from_slice(key2.as_bytes());
data.extend_from_slice(&4u32.to_le_bytes());
data.extend_from_slice(&0u32.to_le_bytes());
let t = "token_embd.weight";
data.extend_from_slice(&(t.len() as u64).to_le_bytes());
data.extend_from_slice(t.as_bytes());
data.extend_from_slice(&2u32.to_le_bytes());
data.extend_from_slice(&1000u64.to_le_bytes()); data.extend_from_slice(&64u64.to_le_bytes());
data.extend_from_slice(&0u32.to_le_bytes());
data.extend_from_slice(&0u64.to_le_bytes());
while data.len() % 32 != 0 {
data.push(0);
}
for _ in 0..100 {
data.extend_from_slice(&1.0f32.to_le_bytes());
}
data
}
include!("tests_signed_metadata.rs");