Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GGUF : gguf_find_key #2438

Merged
merged 3 commits into from
Jul 28, 2023
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