@@ -71,63 +71,56 @@ def open(cls, path: str) -> "GGUFWriter":
71
71
f = open (path , "wb" )
72
72
return cls (f )
73
73
74
- def write_key (self , key : str , value_type : GGUFValueType ):
75
- encoded_key = key .encode ("utf8" )
76
- self .buffered_writer .write (struct .pack ("<I" , len (encoded_key )))
77
- self .buffered_writer .write (encoded_key )
78
- self .buffered_writer .write (struct .pack ("<I" , value_type ))
74
+ def write_key (self , key : str ):
75
+ self .write_value (key , GGUFValueType .STRING )
79
76
80
77
def write_uint8 (self , key : str , value : int ):
81
- self .write_key (key , GGUFValueType . UINT8 )
82
- self .buffered_writer . write ( struct . pack ( "<B" , value ) )
78
+ self .write_key (key )
79
+ self .write_value ( value , GGUFValueType . UINT8 )
83
80
84
81
def write_int8 (self , key : str , value : int ):
85
- self .write_key (key , GGUFValueType . INT8 )
86
- self .buffered_writer . write ( struct . pack ( "<b" , value ) )
82
+ self .write_key (key )
83
+ self .write_value ( value , GGUFValueType . INT8 )
87
84
88
85
def write_uint16 (self , key : str , value : int ):
89
- self .write_key (key , GGUFValueType . UINT16 )
90
- self .buffered_writer . write ( struct . pack ( "<H" , value ) )
86
+ self .write_key (key )
87
+ self .write_value ( value , GGUFValueType . UINT16 )
91
88
92
89
def write_int16 (self , key : str , value : int ):
93
- self .write_key (key , GGUFValueType . INT16 )
94
- self .buffered_writer . write ( struct . pack ( "<h" , value ) )
90
+ self .write_key (key )
91
+ self .write_value ( value , GGUFValueType . INT16 )
95
92
96
93
def write_uint32 (self , key : str , value : int ):
97
- self .write_key (key , GGUFValueType . UINT32 )
98
- self .buffered_writer . write (struct . pack ( "<I" , value ) )
94
+ self .write_key (key )
95
+ self .write (value , GGUFValueType . UINT32 )
99
96
100
97
def write_int32 (self , key : str , value : int ):
101
- self .write_key (key , GGUFValueType . INT32 )
102
- self .buffered_writer . write ( struct . pack ( "<i" , value ) )
98
+ self .write_key (key )
99
+ self .write_value ( value , GGUFValueType . INT32 )
103
100
104
101
def write_float32 (self , key : str , value : float ):
105
- self .write_key (key , GGUFValueType . FLOAT32 )
106
- self .buffered_writer . write ( struct . pack ( "<f" , value ) )
102
+ self .write_key (key )
103
+ self .write_value ( value , GGUFValueType . FLOAT32 )
107
104
108
105
def write_bool (self , key : str , value : bool ):
109
- self .write_key (key , GGUFValueType . BOOL )
110
- self .buffered_writer . write ( struct . pack ( "<?" , value ) )
106
+ self .write_key (key )
107
+ self .write_value ( value , GGUFValueType . BOOL )
111
108
112
109
def write_string (self , key : str , value : str ):
113
- self .write_key (key , GGUFValueType .STRING )
114
- encoded_string = value .encode ('utf-8' )
115
- self .buffered_writer .write (struct .pack ("<I" , len (encoded_string )))
116
- self .buffered_writer .write (encoded_string )
110
+ self .write_key (key )
111
+ self .write_value (value , GGUFValueType .STRING )
117
112
118
113
def write_array (self , key : str , value : list ):
119
114
if not isinstance (value , list ):
120
115
raise ValueError ("Value must be a list for array type" )
121
116
122
- self .write_key (key , GGUFValueType .ARRAY )
123
-
124
- self .buffered_writer .write (struct .pack ("<I" , len (value )))
117
+ self .write_key (key )
118
+ self .write_value (value , GGUFValueType .ARRAY )
125
119
126
- for item in value :
127
- self .write_value (item )
120
+ def write_value (self : str , value : Any , value_type : GGUFValueType = None ):
121
+ if value_type is None :
122
+ value_type = GGUFValueType .get_type (value )
128
123
129
- def write_value (self : str , value : Any ):
130
- value_type = GGUFValueType .get_type (value )
131
124
self .buffered_writer .write (struct .pack ("<I" , value_type ))
132
125
133
126
if value_type == GGUFValueType .UINT8 :
0 commit comments