From a970acff78290b038c7bf6009bda1d0c22775639 Mon Sep 17 00:00:00 2001 From: Allen Flux <26239570+allenflux@users.noreply.github.com> Date: Fri, 9 Oct 2026 08:53:07 +0700 Subject: [PATCH 1/2] fix(server): preserve delimiters in string metadata overrides --- CHANGELOG.md | 2 ++ llama_cpp/server/model.py | 4 +-- tests/test_server_model.py | 58 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 tests/test_server_model.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c34e2729..b73636ca1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +- fix(server): preserve delimiters in string metadata overrides by @allenflux + ## [0.3.36] - feat: update llama.cpp to ggml-org/llama.cpp@0c1e57098 diff --git a/llama_cpp/server/model.py b/llama_cpp/server/model.py index 8aa929202..ca03143fe 100644 --- a/llama_cpp/server/model.py +++ b/llama_cpp/server/model.py @@ -236,9 +236,9 @@ def load_llama_from_model_settings(settings: ModelSettings) -> llama_cpp.Llama: assert isinstance(settings.kv_overrides, list) kv_overrides = {} for kv in settings.kv_overrides: - key, value = kv.split("=") + key, value = kv.split("=", 1) if ":" in value: - value_type, value = value.split(":") + value_type, value = value.split(":", 1) if value_type == "bool": kv_overrides[key] = value.lower() in ["true", "1"] elif value_type == "int": diff --git a/tests/test_server_model.py b/tests/test_server_model.py new file mode 100644 index 000000000..daa0f51c1 --- /dev/null +++ b/tests/test_server_model.py @@ -0,0 +1,58 @@ +from unittest.mock import Mock + +import pytest + +import llama_cpp +from llama_cpp.server.model import LlamaProxy +from llama_cpp.server.settings import ModelSettings + + +@pytest.mark.parametrize( + "value", + [ + "user: ", + "{{ messages[0]['role'] == 'user' }}", + "user: name=value", + "", + ":", + "=", + "用户: name=value", + ], +) +def test_server_kv_overrides_preserve_string_values(monkeypatch, value): + create_model = Mock() + monkeypatch.setattr(llama_cpp, "Llama", create_model) + settings = ModelSettings( + model="unused.gguf", + kv_overrides=[f"tokenizer.chat_template=str:{value}"], + ) + + result = LlamaProxy.load_llama_from_model_settings(settings) + + assert result is create_model.return_value + assert create_model.call_args.kwargs["kv_overrides"] == { + "tokenizer.chat_template": value + } + + +def test_server_kv_overrides_preserve_numeric_and_bool_values(monkeypatch): + create_model = Mock() + monkeypatch.setattr(llama_cpp, "Llama", create_model) + settings = ModelSettings( + model="unused.gguf", + kv_overrides=[ + "tokenizer.ggml.add_bos_token=bool:true", + "tokenizer.ggml.add_eos_token=bool:false", + "llama.context_length=int:2048", + "llama.rope.freq_base=float:10000.5", + ], + ) + + LlamaProxy.load_llama_from_model_settings(settings) + + assert create_model.call_args.kwargs["kv_overrides"] == { + "tokenizer.ggml.add_bos_token": True, + "tokenizer.ggml.add_eos_token": False, + "llama.context_length": 2048, + "llama.rope.freq_base": 10000.5, + } From 2fda3bc81297ce2541c90b2f10ec8f1c33f23bc3 Mon Sep 17 00:00:00 2001 From: Allen Flux <26239570+allenflux@users.noreply.github.com> Date: Fri, 9 Oct 2026 08:54:23 +0700 Subject: [PATCH 2/2] docs: link server override fix in changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b73636ca1..d0a340ecd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -- fix(server): preserve delimiters in string metadata overrides by @allenflux +- fix(server): preserve delimiters in string metadata overrides by @allenflux in #2380 ## [0.3.36]