|
| 1 | +from unittest.mock import Mock |
| 2 | + |
| 3 | +import pytest |
| 4 | + |
| 5 | +import llama_cpp |
| 6 | +from llama_cpp.server.model import LlamaProxy |
| 7 | +from llama_cpp.server.settings import ModelSettings |
| 8 | + |
| 9 | + |
| 10 | +@pytest.mark.parametrize( |
| 11 | + "value", |
| 12 | + [ |
| 13 | + "user: ", |
| 14 | + "{{ messages[0]['role'] == 'user' }}", |
| 15 | + "user: name=value", |
| 16 | + "", |
| 17 | + ":", |
| 18 | + "=", |
| 19 | + "用户: name=value", |
| 20 | + ], |
| 21 | +) |
| 22 | +def test_server_kv_overrides_preserve_string_values(monkeypatch, value): |
| 23 | + create_model = Mock() |
| 24 | + monkeypatch.setattr(llama_cpp, "Llama", create_model) |
| 25 | + settings = ModelSettings( |
| 26 | + model="unused.gguf", |
| 27 | + kv_overrides=[f"tokenizer.chat_template=str:{value}"], |
| 28 | + ) |
| 29 | + |
| 30 | + result = LlamaProxy.load_llama_from_model_settings(settings) |
| 31 | + |
| 32 | + assert result is create_model.return_value |
| 33 | + assert create_model.call_args.kwargs["kv_overrides"] == { |
| 34 | + "tokenizer.chat_template": value |
| 35 | + } |
| 36 | + |
| 37 | + |
| 38 | +def test_server_kv_overrides_preserve_numeric_and_bool_values(monkeypatch): |
| 39 | + create_model = Mock() |
| 40 | + monkeypatch.setattr(llama_cpp, "Llama", create_model) |
| 41 | + settings = ModelSettings( |
| 42 | + model="unused.gguf", |
| 43 | + kv_overrides=[ |
| 44 | + "tokenizer.ggml.add_bos_token=bool:true", |
| 45 | + "tokenizer.ggml.add_eos_token=bool:false", |
| 46 | + "llama.context_length=int:2048", |
| 47 | + "llama.rope.freq_base=float:10000.5", |
| 48 | + ], |
| 49 | + ) |
| 50 | + |
| 51 | + LlamaProxy.load_llama_from_model_settings(settings) |
| 52 | + |
| 53 | + assert create_model.call_args.kwargs["kv_overrides"] == { |
| 54 | + "tokenizer.ggml.add_bos_token": True, |
| 55 | + "tokenizer.ggml.add_eos_token": False, |
| 56 | + "llama.context_length": 2048, |
| 57 | + "llama.rope.freq_base": 10000.5, |
| 58 | + } |
0 commit comments