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"