From a37539ea9b6eef501565836e09e2f17e197a5cc1 Mon Sep 17 00:00:00 2001 From: Pascal Date: Mon, 15 Dec 2025 19:27:07 +0100 Subject: [PATCH] common: add comma escape support for --override-kv --- common/arg.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/common/arg.cpp b/common/arg.cpp index f5ee3b5663..e76465fbc4 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -2208,7 +2208,32 @@ common_params_context common_params_parser_init(common_params & params, llama_ex "advanced option to override model metadata by key. to specify multiple overrides, either use comma-separated or repeat this argument.\n" "types: int, float, bool, str. example: --override-kv tokenizer.ggml.add_bos_token=bool:false,tokenizer.ggml.add_eos_token=bool:false", [](common_params & params, const std::string & value) { - for (const auto & kv_override : string_split(value, ',')) { + std::vector kv_overrides; + + std::string current; + bool escaping = false; + + for (const char c : value) { + if (escaping) { + current.push_back(c); + escaping = false; + } else if (c == '\\') { + escaping = true; + } else if (c == ',') { + kv_overrides.push_back(current); + current.clear(); + } else { + current.push_back(c); + } + } + + if (escaping) { + current.push_back('\\'); + } + + kv_overrides.push_back(current); + + for (const auto & kv_override : kv_overrides) { if (!string_parse_kv_override(kv_override.c_str(), params.kv_overrides)) { throw std::runtime_error(string_format("error: Invalid type for KV override: %s\n", kv_override.c_str())); }