diff --git a/modules/metadata_gguf.py b/modules/metadata_gguf.py index 70ad41dc41..f859440d87 100644 --- a/modules/metadata_gguf.py +++ b/modules/metadata_gguf.py @@ -1,92 +1,147 @@ +import os +import sys import struct from enum import IntEnum - +from io import BufferedReader +from typing import Union class GGUFValueType(IntEnum): - UINT8 = 0 - INT8 = 1 - UINT16 = 2 - INT16 = 3 - UINT32 = 4 - INT32 = 5 + # Occasionally check to ensure this class is consistent with gguf + UINT8 = 0 + INT8 = 1 + UINT16 = 2 + INT16 = 3 + UINT32 = 4 + INT32 = 5 FLOAT32 = 6 - BOOL = 7 - STRING = 8 - ARRAY = 9 - UINT64 = 10 - INT64 = 11 + BOOL = 7 + STRING = 8 + ARRAY = 9 + UINT64 = 10 + INT64 = 11 FLOAT64 = 12 -_simple_value_packing = { - GGUFValueType.UINT8: " Union[str, int, float, bool]: + """Read a single value from an open file""" if value_type == GGUFValueType.STRING: - value_length = struct.unpack(" dict[str, Union[str, int, float, bool, list]]: + """ + Given a path to a GGUF file, peek at its header for metadata -def load_metadata(fname): - metadata = {} - with open(fname, 'rb') as file: - GGUF_MAGIC = struct.unpack("