8000 feat: Expose gguf model metadata in metadata property · notwa/llama-cpp-python@5a34c57 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5a34c57

Browse files
committed
feat: Expose gguf model metadata in metadata property
1 parent 833a7f1 commit 5a34c57

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

llama_cpp/_internals.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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."""

llama_cpp/llama.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,16 @@ def __init__(
331331

332332
self._mirostat_mu = ctypes.c_float(2.0 * 5.0) # TODO: Move this to sampling context
333333

334+
try:
335+
self.metadata = self._model.metadata()
336+
except Exception as e:
337+
self.metadata = {}
338+
if self.verbose:
339+
print(f"Failed to load metadata: {e}", file=sys.stderr)
340+
341+
if self.verbose:
342+
print(f"Model metadata: {self.metadata}", file=sys.stderr)
343+
334344
@property
335345
def ctx(self) -> llama_cpp.llama_context_p:
336346
assert self._ctx.ctx is not None

0 commit comments

Comments
 (0)
0