@@ -696,12 +696,12 @@ struct gguf_file_saver {
696
696
// we need to calculate the delta in number of bytes written with a counter as a struct member.
697
697
698
698
gguf_file file;
699
- gguf_file_loader * fl;
699
+ gguf_context * ctx; // loaded gguf context (used to re-write the KV section (good enough for now))
700
700
size_t info_offset;
701
701
size_t tensor_offset = 0 ;
702
702
703
- gguf_file_saver (const char * fname, gguf_file_loader * fl )
704
- : file(fname, " wb" ), fl(fl ) {
703
+ gguf_file_saver (const char * fname, gguf_context * ctx )
704
+ : file(fname, " wb" ), ctx(ctx ) {
705
705
fprintf (stderr, " llama.cpp: saving model to %s\n " , fname);
706
706
write_header ();
707
707
write_kv ();
@@ -710,15 +710,15 @@ struct gguf_file_saver {
710
710
void write_header () {
711
711
file.write_i32 (GGUF_MAGIC);
712
712
file.write_i32 (GGUF_VERSION);
713
- file.write_i32 (gguf_get_n_tensors (fl-> gguf_ctx ));
714
- file.write_i32 (gguf_get_n_kv (fl-> gguf_ctx ));
713
+ file.write_i32 (gguf_get_n_tensors (ctx ));
714
+ file.write_i32 (gguf_get_n_kv (ctx ));
715
715
}
716
716
717
717
void write_kv_arr_str (const std::string & key, enum gguf_type type, int i, int n_arr) {
718
718
std::vector<std::string> data (n_arr);
719
719
720
720
for (int j = 0 ; j < n_arr; ++j) {
721
- std::string val = gguf_get_arr_str (fl-> gguf_ctx , i, j);
721
+ std::string val = gguf_get_arr_str (ctx , i, j);
722
722
data[j] = val;
723
723
}
724
724
@@ -729,7 +729,7 @@ struct gguf_file_saver {
729
729
std::vector<float > data (n_arr);
730
730
731
731
for (int j = 0 ; j < n_arr; ++j) {
732
- float val = gguf_get_arr_f32 (fl-> gguf_ctx , i, j);
732
+ float val = gguf_get_arr_f32 (ctx , i, j);
733
733
data[j] = val;
734
734
}
735
735
@@ -738,28 +738,28 @@ struct gguf_file_saver {
738
738
739
739
// re-write the key-value section from the loaded file
740
740
void write_kv () {
741
- const int32_t n_kv = gguf_get_n_kv (fl-> gguf_ctx );
741
+ const int32_t n_kv = gguf_get_n_kv (ctx );
742
742
for (int i = 0 ; i < n_kv; ++i) {
743
- const char * key = gguf_get_key (fl-> gguf_ctx , i);
743
+ const char * key = gguf_get_key (ctx , i);
744
744
if (strcmp (key, " general.quantization_version" ) == 0 ) {
745
745
file.write_val <uint32_t >(" general.quantization_version" , GGUF_TYPE_UINT32, GGML_QNT_VERSION);
746
746
} else {
747
- const gguf_type vtype = gguf_get_kv_type (fl-> gguf_ctx , i);
747
+ const gguf_type vtype = gguf_get_kv_type (ctx , i);
748
748
749
749
switch (vtype) {
750
- case GGUF_TYPE_BOOL: file.write_val <bool > (key, GGUF_TYPE_BOOL, gguf_get_val_bool (fl-> gguf_ctx , i)); break ;
751
- case GGUF_TYPE_FLOAT32: file.write_val <float > (key, GGUF_TYPE_FLOAT32, gguf_get_val_f32 (fl-> gguf_ctx , i)); break ;
752
- case GGUF_TYPE_INT16: file.write_val <int16_t > (key, GGUF_TYPE_INT16, gguf_get_val_i16 (fl-> gguf_ctx , i)); break ;
753
- case GGUF_TYPE_INT32: file.write_val <int32_t > (key, GGUF_TYPE_INT32, gguf_get_val_i32 (fl-> gguf_ctx , i)); break ;
754
- case GGUF_TYPE_INT8: file.write_val <int8_t > (key, GGUF_TYPE_INT8, gguf_get_val_i8 (fl-> gguf_ctx , i)); break ;
755
- case GGUF_TYPE_STRING: file.write_str (key, GGUF_TYPE_STRING, gguf_get_val_str (fl-> gguf_ctx , i)); break ;
756
- case GGUF_TYPE_UINT16: file.write_val <uint16_t >(key, GGUF_TYPE_UINT16, gguf_get_val_u16 (fl-> gguf_ctx , i)); break ;
757
- case GGUF_TYPE_UINT32: file.write_val <uint32_t >(key, GGUF_TYPE_UINT32, gguf_get_val_u32 (fl-> gguf_ctx , i)); break ;
758
- case GGUF_TYPE_UINT8: file.write_val <uint8_t > (key, GGUF_TYPE_UINT8, gguf_get_val_u8 (fl-> gguf_ctx , i)); break ;
750
+ case GGUF_TYPE_BOOL: file.write_val <bool > (key, GGUF_TYPE_BOOL, gguf_get_val_bool (ctx , i)); break ;
751
+ case GGUF_TYPE_FLOAT32: file.write_val <float > (key, GGUF_TYPE_FLOAT32, gguf_get_val_f32 (ctx , i)); break ;
752
+ case GGUF_TYPE_INT16: file.write_val <int16_t > (key, GGUF_TYPE_INT16, gguf_get_val_i16 (ctx , i)); break ;
753
+ case GGUF_TYPE_INT32: file.write_val <int32_t > (key, GGUF_TYPE_INT32, gguf_get_val_i32 (ctx , i)); break ;
754
+ case GGUF_TYPE_INT8: file.write_val <int8_t > (key, GGUF_TYPE_INT8, gguf_get_val_i8 (ctx , i)); break ;
755
+ case GGUF_TYPE_STRING: file.write_str (key, GGUF_TYPE_STRING, gguf_get_val_str (ctx , i)); break ;
756
+ case GGUF_TYPE_UINT16: file.write_val <uint16_t >(key, GGUF_TYPE_UINT16, gguf_get_val_u16 (ctx , i)); break ;
757
+ case GGUF_TYPE_UINT32: file.write_val <uint32_t >(key, GGUF_TYPE_UINT32, gguf_get_val_u32 (ctx , i)); break ;
758
+ case GGUF_TYPE_UINT8: file.write_val <uint8_t > (key, GGUF_TYPE_UINT8, gguf_get_val_u8 (ctx , i)); break ;
759
759
case GGUF_TYPE_ARRAY:
760
760
{
761
- const gguf_type arr_type = gguf_get_arr_type (fl-> gguf_ctx , i);
762
- const int n_arr = gguf_get_arr_n (fl-> gguf_ctx , i);
761
+ const gguf_type arr_type = gguf_get_arr_type (ctx , i);
762
+ const int n_arr = gguf_get_arr_n (ctx , i);
763
763
if (arr_type == GGUF_TYPE_FLOAT32) {
764
764
write_kv_arr_f32 (key, arr_type, i, n_arr);
765
765
} else if (arr_type == GGUF_TYPE_STRING) {
@@ -776,9 +776,9 @@ struct gguf_file_saver {
776
776
777
777
info_offset = file.tell ();
778
778
779
- GGML_ASSERT (gguf_get_data_offset (fl-> gguf_ctx ) >= info_offset);
779
+ GGML_ASSERT (gguf_get_data_offset (ctx ) >= info_offset);
780
780
781
- size_t count = gguf_get_data_offset (fl-> gguf_ctx ) - info_offset;
781
+ size_t count = gguf_get_data_offset (ctx ) - info_offset;
782
782
file.write_zeros (count);
783
783
file.seek (info_offset, SEEK_SET);
784
784
GGML_ASSERT (info_offset == file.tell ());
@@ -3219,7 +3219,7 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s
3219
3219
}
3220
3220
3221
3221
std::unique_ptr<llama_model_loader> model_loader (new llama_model_loader (fname_inp, /* use_mmap*/ false ));
3222
- gguf_file_saver file_saver (fname_out.c_str (), model_loader->file_loader . get () );
3222
+ gguf_file_saver file_saver (fname_out.c_str (), model_loader->file_loader -> gguf_ctx );
3223
3223
3224
3224
#ifdef GGML_USE_K_QUANTS
3225
3225
int n_attention_wv = 0 ;
0 commit comments