]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
gguf-py: enable reading non-native endian files (#12081)
authorAleksei Nikiforov <redacted>
Wed, 26 Feb 2025 11:39:27 +0000 (12:39 +0100)
committerGitHub <redacted>
Wed, 26 Feb 2025 11:39:27 +0000 (11:39 +0000)
Currently self.byte_order is never used.
Actually use it to byteswap read data to
allow reading big endian files on little endian systems
and vice versa.

Now it's possible to convert little-endian model
into a big-endian model and back
on a little-endian system.

gguf-py/gguf/gguf_reader.py

index e17a4e83147d50e08dcf681c13003b36d90ad030..3568ea0dfc86b878fa79735aa65d5d80138a7e07 100644 (file)
@@ -146,9 +146,11 @@ class GGUFReader:
         itemsize = int(np.empty([], dtype = dtype).itemsize)
         end_offs = offset + itemsize * count
         arr = self.data[offset:end_offs].view(dtype=dtype)[:count]
-        if override_order is None:
-            return arr
-        return arr.view(arr.dtype.newbyteorder(override_order))
+        if override_order is not None:
+            return arr.view(arr.dtype.newbyteorder(override_order))
+        if self.byte_order == 'S':
+            return arr.view(arr.dtype.newbyteorder(self.byte_order))
+        return arr
 
     def _push_field(self, field: ReaderField, skip_sum: bool = False) -> int:
         if field.name in self.fields: