Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions examples/gguf/gguf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,20 @@ bool gguf_ex_read_0(const std::string & fname) {
}
}

// find kv string
{
char findkey[32];
sprintf(findkey, "some.parameter.string");

int keyidx = gguf_find_key(ctx, findkey);
if (keyidx == -1) {
fprintf(stdout, "%s: find key: %s not found.\n", __func__, findkey);
} else {
const char * key_value = gguf_get_val_str(ctx, keyidx);
fprintf(stdout, "%s: find key: %s found, kv[%d] value = %s\n", __func__, findkey, keyidx, key_value);
}
}

// tensor info
{
const int n_tensors = gguf_get_n_tensors(ctx);
Expand Down
15 changes: 15 additions & 0 deletions ggml.c
Original file line number Diff line number Diff line change
Expand Up @@ -18745,6 +18745,21 @@ int gguf_get_n_kv(struct gguf_context * ctx) {
return ctx->header.n_kv;
}

int gguf_find_key(struct gguf_context * ctx, const char * key) {
// return -1 if key not found
const int n_kv = gguf_get_n_kv(ctx);
int keyfound = -1;

for (int i = 0; i < n_kv; ++i) {
if (strcmp(key, gguf_get_key(ctx, i)) == 0) {
keyfound = i;
break;
}
}

return keyfound;
}

const char * gguf_get_key(struct gguf_context * ctx, int i) {
return ctx->header.kv[i].key.data;
}
Expand Down
1 change: 1 addition & 0 deletions ggml.h
Original file line number Diff line number Diff line change
Expand Up @@ -1653,6 +1653,7 @@ extern "C" {
GGML_API void * gguf_get_data (struct gguf_context * ctx);

GGML_API int gguf_get_n_kv(struct gguf_context * ctx);
GGML_API int gguf_find_key(struct gguf_context * ctx, const char * key);
GGML_API const char * gguf_get_key (struct gguf_context * ctx, int i);
GGML_API void gguf_get_val (struct gguf_context * ctx, int i, void * val);

Expand Down