gguf-py: enable reading non-native endian files (#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.
This commit is contained in:
Aleksei Nikiforov 2025-02-26 12:39:27 +01:00 committed by GitHub
parent 53e4db1012
commit 3567ee3a94
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View 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: