@@ -79,7 +79,7 @@ int main(int argc, char ** argv) {
79
79
tokenizer_model_reader.llama_gguf_reader_get_metadata_str (" general.name" , " N/A" ).c_str ());
80
80
printf (" Tokenizer Model Architecture: %s\n " ,
81
81
tokenizer_model_reader.llama_gguf_reader_get_metadata_str (" general.architecture" , " N/A" ).c_str ());
82
- printf (" Tokenizer Model Tensor Count: %ld \n " ,
82
+ printf (" Tokenizer Model Tensor Count: %llu \n " ,
83
83
tokenizer_model_reader.llama_gguf_reader_get_tensor_count ());
84
84
printf (" Diagnostic Test: Tokenizer Model GGUF read successful.\n " );
85
85
} else {
@@ -100,12 +100,10 @@ int main(int argc, char ** argv) {
100
100
llama_gguf_converter converter;
101
101
bool success = converter.llama_gguf_converter_convert (params, model);
102
102
103
- // Clean up llama model
104
- llama_model_free (model);
105
- llama_backend_free ();
106
-
107
103
if (!success) {
108
104
fprintf (stderr, " error: GGUF conversion failed.\n " );
105
+ llama_model_free (model); // Free model on conversion failure
106
+ llama_backend_free ();
109
107
return 1 ;
110
108
}
111
109
@@ -120,12 +118,14 @@ int main(int argc, char ** argv) {
120
118
121
119
if (!reader.llama_gguf_reader_is_initialized ()) {
122
120
fprintf (stderr, " error: llama_gguf_reader failed to initialize for preview.\n " );
121
+ llama_model_free (model); // Free model before exiting
122
+ llama_backend_free ();
123
123
return 1 ;
124
124
}
125
125
126
126
printf (" Dataset Name: %s\n " ,
127
127
reader.llama_gguf_reader_get_metadata_str (" training.dataset.name" , " N/A" ).c_str ());
128
- printf (" Sequence Count: %lu \n " , reader.llama_gguf_reader_get_metadata_u64 (" training.sequence.count" , 0 ));
128
+ printf (" Sequence Count: %llu \n " , reader.llama_gguf_reader_get_metadata_u64 (" training.sequence.count" , 0 ));
129
129
printf (" Tokenizer Model: %s\n " ,
130
130
reader.llama_gguf_reader_get_metadata_str (" training.tokenizer.gguf.model" , " N/A" ).c_str ());
131
131
@@ -153,14 +153,19 @@ int main(int argc, char ** argv) {
153
153
std::string detokenized_text = " " ;
154
154
// Buffer for a single token
155
155
std::array<char , 256 > piece_buf; // Large enough buffer for a single token
156
- for (llama_token token : sequence_tokens) {
157
- int n_chars = llama_token_to_piece (llama_model_get_vocab (model), token,
158
- piece_buf.data (), piece_buf.size (), 1 , false );
159
- if (n_chars > 0 ) {
160
- detokenized_text.append (piece_buf.data (), n_chars);
156
+ // Ensure model is valid before calling llama_model_get_vocab
157
+ if (model != nullptr ) {
158
+ for (llama_token token : sequence_tokens) {
159
+ int n_chars = llama_token_to_piece (llama_model_get_vocab (model), token,
160
+ piece_buf.data (), piece_buf.size (), 1 , false );
161
+ if (n_chars > 0 ) {
162
+ detokenized_text.append (piece_buf.data (), n_chars);
163
+ }
161
164
}
165
+ printf (" Detokenized: \" %s\"\n " , detokenized_text.c_str ());
166
+ } else {
167
+ fprintf (stderr, " Warning: Cannot detokenize preview, model is null.\n " );
162
168
}
163
- printf (" Detokenized: \" %s\"\n " , detokenized_text.c_str ());
164
169
}
165
170
166
171
} else {
@@ -173,10 +178,16 @@ int main(int argc, char ** argv) {
173
178
174
179
} catch (const std::runtime_error & e) {
175
180
fprintf (stderr, " error: GGUF preview failed: %s\n " , e.what ());
181
+ llama_model_free (model); // Free model before exiting
182
+ llama_backend_free ();
176
183
return 1 ;
177
184
}
178
185
printf (" --- End of GGUF file preview ---\n " );
179
186
}
180
187
188
+ // Clean up llama model and backend after all usage
189
+ llama_model_free (model);
190
+ llama_backend_free ();
191
+
181
192
return 0 ;
182
193
}
0 commit comments