Skip to content

Commit 5d7002d

Browse files
minarchistJohnSomeoneSerge
authored
server : add --override-kv parameter (#4710)
* Changes to server to allow metadata override * documentation * flake.nix: expose full scope in legacyPackages * flake.nix: rocm not yet supported on aarch64, so hide the output * flake.nix: expose checks * workflows: nix-ci: init; build flake outputs * workflows: nix-ci: add a job for eval * workflows: weekly `nix flake update` * workflows: nix-flakestry: drop tag filters ...and add a job for flakehub.com * workflows: nix-ci: add a qemu job for jetsons * flake.nix: suggest the binary caches * flake.lock: update to a commit recently cached by nixpkgs-cuda-ci --------- Co-authored-by: John <[email protected]> Co-authored-by: Someone Serge <[email protected]>
1 parent 26f3071 commit 5d7002d

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

examples/server/server.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2016,6 +2016,10 @@ static void server_print_usage(const char *argv0, const gpt_params &params,
20162016
printf(" --mmproj MMPROJ_FILE path to a multimodal projector file for LLaVA.\n");
20172017
printf(" --log-disable disables logging to a file.\n");
20182018
printf("\n");
2019+
printf(" --override-kv KEY=TYPE:VALUE\n");
2020+
printf(" advanced option to override model metadata by key. may be specified multiple times.\n");
2021+
printf(" types: int, float, bool. example: --override-kv tokenizer.ggml.add_bos_token=bool:false\n");
2022+
printf("\n");
20192023
}
20202024

20212025
static void server_params_parse(int argc, char **argv, server_params &sparams,
@@ -2379,13 +2383,60 @@ static void server_params_parse(int argc, char **argv, server_params &sparams,
23792383
log_set_target(stdout);
23802384
LOG_INFO("logging to file is disabled.", {});
23812385
}
2386+
else if (arg == "--override-kv")
2387+
{
2388+
if (++i >= argc) {
2389+
invalid_param = true;
2390+
break;
2391+
}
2392+
char * sep = strchr(argv[i], '=');
2393+
if (sep == nullptr || sep - argv[i] >= 128) {
2394+
fprintf(stderr, "error: Malformed KV override: %s\n", argv[i]);
2395+
invalid_param = true;
2396+
break;
2397+
}
2398+
struct llama_model_kv_override kvo;
2399+
std::strncpy(kvo.key, argv[i], sep - argv[i]);
2400+
kvo.key[sep - argv[i]] = 0;
2401+
sep++;
2402+
if (strncmp(sep, "int:", 4) == 0) {
2403+
sep += 4;
2404+
kvo.tag = LLAMA_KV_OVERRIDE_INT;
2405+
kvo.int_value = std::atol(sep);
2406+
} else if (strncmp(sep, "float:", 6) == 0) {
2407+
sep += 6;
2408+
kvo.tag = LLAMA_KV_OVERRIDE_FLOAT;
2409+
kvo.float_value = std::atof(sep);
2410+
} else if (strncmp(sep, "bool:", 5) == 0) {
2411+
sep += 5;
2412+
kvo.tag = LLAMA_KV_OVERRIDE_BOOL;
2413+
if (std::strcmp(sep, "true") == 0) {
2414+
kvo.bool_value = true;
2415+
} else if (std::strcmp(sep, "false") == 0) {
2416+
kvo.bool_value = false;
2417+
} else {
2418+
fprintf(stderr, "error: Invalid boolean value for KV override: %s\n", argv[i]);
2419+
invalid_param = true;
2420+
break;
2421+
}
2422+
} else {
2423+
fprintf(stderr, "error: Invalid type for KV override: %s\n", argv[i]);
2424+
invalid_param = true;
2425+
break;
2426+
}
2427+
params.kv_overrides.push_back(kvo);
2428+
}
23822429
else
23832430
{
23842431
fprintf(stderr, "error: unknown argument: %s\n", arg.c_str());
23852432
server_print_usage(argv[0], default_params, default_sparams);
23862433
exit(1);
23872434
}
23882435
}
2436+
if (!params.kv_overrides.empty()) {
2437+
params.kv_overrides.emplace_back(llama_model_kv_override());
2438+
params.kv_overrides.back().key[0] = 0;
2439+
}
23892440

23902441
if (invalid_param)
23912442
{

0 commit comments

Comments
 (0)