Skip to content

Commit 3567ee3

Browse files
gguf-py: enable reading non-native endian files (ggml-org#12081)
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.
1 parent 53e4db1 commit 3567ee3

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

gguf-py/gguf/gguf_reader.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,11 @@ def _get(
146146
itemsize = int(np.empty([], dtype = dtype).itemsize)
147147
end_offs = offset + itemsize * count
148148
arr = self.data[offset:end_offs].view(dtype=dtype)[:count]
149-
if override_order is None:
150-
return arr
151-
return arr.view(arr.dtype.newbyteorder(override_order))
149+
if override_order is not None:
150+
return arr.view(arr.dtype.newbyteorder(override_order))
151+
if self.byte_order == 'S':
152+
return arr.view(arr.dtype.newbyteorder(self.byte_order))
153+
return arr
152154

153155
def _push_field(self, field: ReaderField, skip_sum: bool = False) -> int:
154156
if field.name in self.fields:

0 commit comments

Comments
 (0)