Felipe97/llama-cpp-compiled
01.1k
1#include "gguf-model-data.h"2 3#include <cstdio>4 5#define TEST_ASSERT(cond, msg) \6 do { \7 if (!(cond)) { \8 fprintf(stderr, "FAIL: %s (line %d): %s\n", #cond, __LINE__, msg); \9 return 1; \10 } \11 } while (0)12 13int main() {14 fprintf(stderr, "=== test-gguf-model-data ===\n");15 16 // Fetch Qwen3-0.6B Q8_0 metadata17 auto result = gguf_fetch_model_meta("ggml-org/Qwen3-0.6B-GGUF", "Q8_0");18 19 if (!result.has_value()) {20 fprintf(stderr, "SKIP: could not fetch model metadata (no network or HTTP disabled)\n");21 return 0;22 }23 24 const auto & model = result.value();25 26 fprintf(stderr, "Architecture: %s\n", model.architecture.c_str());27 fprintf(stderr, "n_embd: %u\n", model.n_embd);28 fprintf(stderr, "n_ff: %u\n", model.n_ff);29 fprintf(stderr, "n_vocab: %u\n", model.n_vocab);30 fprintf(stderr, "n_layer: %u\n", model.n_layer);31 fprintf(stderr, "n_head: %u\n", model.n_head);32 fprintf(stderr, "n_head_kv: %u\n", model.n_head_kv);33 fprintf(stderr, "n_expert: %u\n", model.n_expert);34 fprintf(stderr, "n_embd_head_k: %u\n", model.n_embd_head_k);35 fprintf(stderr, "n_embd_head_v: %u\n", model.n_embd_head_v);36 fprintf(stderr, "tensors: %zu\n", model.tensors.size());37 38 // Verify architecture39 TEST_ASSERT(model.architecture == "qwen3", "expected architecture 'qwen3'");40 41 // Verify key dimensions (Qwen3-0.6B)42 TEST_ASSERT(model.n_layer == 28, "expected n_layer == 28");43 TEST_ASSERT(model.n_embd == 1024, "expected n_embd == 1024");44 TEST_ASSERT(model.n_head == 16, "expected n_head == 16");45 TEST_ASSERT(model.n_head_kv == 8, "expected n_head_kv == 8");46 TEST_ASSERT(model.n_expert == 0, "expected n_expert == 0 (not MoE)");47 TEST_ASSERT(model.n_vocab == 151936, "expected n_vocab == 151936");48 49 // Verify tensor count50 TEST_ASSERT(model.tensors.size() == 311, "expected tensor count == 311");51 52 // Verify known tensor names exist53 bool found_attn_q = false;54 bool found_token_embd = false;55 bool found_output_norm = false;56 for (const auto & t : model.tensors) {57 if (t.name == "blk.0.attn_q.weight") {58 found_attn_q = true;59 }60 if (t.name == "token_embd.weight") {61 found_token_embd = true;62 }63 if (t.name == "output_norm.weight") {64 found_output_norm = true;65 }66 }67 TEST_ASSERT(found_attn_q, "expected tensor 'blk.0.attn_q.weight'");68 TEST_ASSERT(found_token_embd, "expected tensor 'token_embd.weight'");69 TEST_ASSERT(found_output_norm, "expected tensor 'output_norm.weight'");70 71 // Verify token_embd.weight shape72 for (const auto & t : model.tensors) {73 if (t.name == "token_embd.weight") {74 TEST_ASSERT(t.ne[0] == 1024, "expected token_embd.weight ne[0] == 1024");75 TEST_ASSERT(t.n_dims == 2, "expected token_embd.weight to be 2D");76 break;77 }78 }79 80 // Test that second call uses cache (just call again, it should work)81 auto result2 = gguf_fetch_model_meta("ggml-org/Qwen3-0.6B-GGUF", "Q8_0");82 TEST_ASSERT(result2.has_value(), "cached fetch should succeed");83 TEST_ASSERT(result2->tensors.size() == model.tensors.size(), "cached result should match");84 85 // Test a split MoE model without specifying quant (should default to Q8_0)86 auto result3 = gguf_fetch_model_meta("ggml-org/GLM-4.6V-GGUF");87 if (!result3.has_value()) {88 fprintf(stderr, "SKIP: could not fetch GLM-4.6V metadata (no network?)\n");89 return 0;90 }91 const auto & model3 = result3.value();92 93 fprintf(stderr, "Architecture: %s\n", model3.architecture.c_str());94 fprintf(stderr, "n_embd: %u\n", model3.n_embd);95 fprintf(stderr, "n_ff: %u\n", model3.n_ff);96 fprintf(stderr, "n_vocab: %u\n", model3.n_vocab);97 fprintf(stderr, "n_layer: %u\n", model3.n_layer);98 fprintf(stderr, "n_head: %u\n", model3.n_head);99 fprintf(stderr, "n_head_kv: %u\n", model3.n_head_kv);100 fprintf(stderr, "n_expert: %u\n", model3.n_expert);101 fprintf(stderr, "n_embd_head_k: %u\n", model3.n_embd_head_k);102 fprintf(stderr, "n_embd_head_v: %u\n", model3.n_embd_head_v);103 fprintf(stderr, "tensors: %zu\n", model3.tensors.size());104 105 // Verify architecture106 TEST_ASSERT(model3.architecture == "glm4moe", "expected architecture 'glm4moe'");107 108 // Verify key dimensions (GLM-4.6V)109 TEST_ASSERT(model3.n_layer == 46, "expected n_layer == 46");110 TEST_ASSERT(model3.n_embd == 4096, "expected n_embd == 4096");111 TEST_ASSERT(model3.n_head == 96, "expected n_head == 96");112 TEST_ASSERT(model3.n_head_kv == 8, "expected n_head_kv == 8");113 TEST_ASSERT(model3.n_expert == 128, "expected n_expert == 128 (MoE)");114 TEST_ASSERT(model3.n_vocab == 151552, "expected n_vocab == 151552");115 116 // Verify tensor count117 TEST_ASSERT(model3.tensors.size() == 780, "expected tensor count == 780");118 119 // Test a hybrid-attention model with array-valued head counts120 auto result4 = gguf_fetch_model_meta("ggml-org/Step-3.5-Flash-GGUF", "Q4_K");121 if (!result4.has_value()) {122 fprintf(stderr, "FAIL: could not fetch Step-3.5-Flash metadata\n");123 return 1;124 }125 const auto & model4 = result4.value();126 127 fprintf(stderr, "Architecture: %s\n", model4.architecture.c_str());128 fprintf(stderr, "n_embd: %u\n", model4.n_embd);129 fprintf(stderr, "n_ff: %u\n", model4.n_ff);130 fprintf(stderr, "n_vocab: %u\n", model4.n_vocab);131 fprintf(stderr, "n_layer: %u\n", model4.n_layer);132 fprintf(stderr, "n_head: %u\n", model4.n_head);133 fprintf(stderr, "n_head_kv: %u\n", model4.n_head_kv);134 fprintf(stderr, "n_expert: %u\n", model4.n_expert);135 fprintf(stderr, "n_embd_head_k: %u\n", model4.n_embd_head_k);136 fprintf(stderr, "n_embd_head_v: %u\n", model4.n_embd_head_v);137 fprintf(stderr, "tensors: %zu\n", model4.tensors.size());138 139 TEST_ASSERT(model4.architecture == "step35", "expected architecture 'step35'");140 141 TEST_ASSERT(model4.n_layer == 45, "expected n_layer == 45");142 TEST_ASSERT(model4.n_embd == 4096, "expected n_embd == 4096");143 TEST_ASSERT(model4.n_ff == 11264, "expected n_ff == 11264");144 TEST_ASSERT(model4.n_head == 64, "expected n_head == 64 (first element of per-layer array)");145 TEST_ASSERT(model4.n_head_kv == 8, "expected n_head_kv == 8 (first element of per-layer array)");146 TEST_ASSERT(model4.n_expert == 288, "expected n_expert == 288");147 TEST_ASSERT(model4.n_embd_head_k == 128, "expected n_embd_head_k == 128");148 TEST_ASSERT(model4.n_embd_head_v == 128, "expected n_embd_head_v == 128");149 TEST_ASSERT(model4.n_vocab == 128896, "expected n_vocab == 128896");150 TEST_ASSERT(model4.tensors.size() == 754, "expected tensor count == 754");151 152 fprintf(stderr, "=== ALL TESTS PASSED ===\n");153 return 0;154}155 