File size: 1,083 Bytes
b4cb0dc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | diff --git a/src/llama-model-loader.cpp b/src/llama-model-loader.cpp
index bd9e6da88..5a120d69a 100644
--- a/src/llama-model-loader.cpp
+++ b/src/llama-model-loader.cpp
@@ -1,4 +1,26 @@
#include "llama-model-loader.h"
+#include <cstring>
+
+// EXAONE_GGUF_FIND_KEY_MACRO_HOOK
+// Hook gguf_find_key() inside this translation unit to handle EPS/RMS key mismatch for EXAONE.
+static auto gguf_find_key_orig = &gguf_find_key;
+
+static int gguf_find_key_exaone_fallback(const gguf_context * ctx, const char * key) {
+ int kid = gguf_find_key_orig(ctx, key);
+ if (kid >= 0) return kid;
+
+ if (strcmp(key, "exaone.attention.layer_norm_epsilon") == 0) {
+ return gguf_find_key_orig(ctx, "exaone.attention.layer_norm_rms_epsilon");
+ }
+ if (strcmp(key, "exaone.attention.layer_norm_rms_epsilon") == 0) {
+ return gguf_find_key_orig(ctx, "exaone.attention.layer_norm_epsilon");
+ }
+ return -1;
+}
+
+// Redirect all gguf_find_key calls in this file
+#define gguf_find_key(ctx, key) gguf_find_key_exaone_fallback((ctx), (key))
+
#include "ggml.h"
|