@@ -204,6 +204,31 @@ def detokenize(self, tokens: List[int]) -> bytes:
204204 output [1 :] if len (tokens ) > 0 and tokens [0 ] == self .token_bos () else output
205205 )
206206
207+ # Extra
208+ def metadata (self ) -> Dict [str , str ]:
209+ assert self .model is not None
210+ metadata : Dict [str , str ] = {}
211+ buffer_size = 1024
212+ buffer = ctypes .create_string_buffer (buffer_size )
213+ # zero the buffer
214+ buffer .value = b'\0 ' * buffer_size
215+ # iterate over model keys
216+ for i in range (llama_cpp .llama_model_meta_count (self .model )):
217+ nbytes = llama_cpp .llama_model_meta_key_by_index (self .model , i , buffer , buffer_size )
218+ if nbytes > buffer_size :
219+ buffer_size = nbytes
220+ buffer = ctypes .create_string_buffer (buffer_size )
221+ nbytes = llama_cpp .llama_model_meta_key_by_index (self .model , i , buffer , buffer_size )
222+ key = buffer .value .decode ("utf-8" )
223+ nbytes = llama_cpp .llama_model_meta_val_str_by_index (self .model , i , buffer , buffer_size )
224+ if nbytes > buffer_size :
225+ buffer_size = nbytes
226+ buffer = ctypes .create_string_buffer (buffer_size )
227+ nbytes = llama_cpp .llama_model_meta_val_str_by_index (self .model , i , buffer , buffer_size )
228+ value = buffer .value .decode ("utf-8" )
229+ metadata [key ] = value
230+ return metadata
231+
207232 @staticmethod
208233 def default_params ():
209234 """Get the default llama_model_params."""
0 commit comments