| import json |
|
|
| import pytest |
|
|
| from telltale.models.llama_runtime import ( |
| DEFAULT_NEMOTRON_MODEL_NAME, |
| LocalTextRuntime, |
| LlamaRuntimeConfig, |
| LocalLlamaCppRuntime, |
| RuntimeConfigurationError, |
| RuntimeSettings, |
| ) |
|
|
|
|
| def test_mock_runtime_uses_nemotron_metadata_without_gguf(): |
| runtime = LocalTextRuntime(RuntimeSettings(mode="mock")) |
|
|
| result = runtime.generate("", context={"suggested_action": "call", "agent_name": "Teddy"}) |
|
|
| assert '"action": "call"' in result.text |
| assert result.metadata["model_name"] == DEFAULT_NEMOTRON_MODEL_NAME |
| assert result.metadata["runtime_backend"] == "mock" |
|
|
|
|
| def test_llama_cpp_mode_is_compatibility_alias(): |
| with pytest.raises(RuntimeConfigurationError, match="llama-server request failed"): |
| LocalTextRuntime(RuntimeSettings(mode="llama_cpp", server_url="http://127.0.0.1:9")) |
|
|
|
|
| def test_llama_server_runtime_calls_openai_compatible_endpoint(monkeypatch): |
| calls = [] |
|
|
| class FakeResponse: |
| def __init__(self, payload): |
| self.payload = payload |
|
|
| def __enter__(self): |
| return self |
|
|
| def __exit__(self, exc_type, exc, tb): |
| return False |
|
|
| def read(self): |
| return json.dumps(self.payload).encode("utf-8") |
|
|
| def fake_urlopen(request, timeout): |
| calls.append( |
| { |
| "url": request.full_url, |
| "method": request.get_method(), |
| "body": json.loads(request.data.decode("utf-8")) if request.data else None, |
| "timeout": timeout, |
| } |
| ) |
| if request.full_url.endswith("/v1/models"): |
| return FakeResponse({"data": [{"id": "telltale-agent"}]}) |
| return FakeResponse( |
| { |
| "choices": [ |
| { |
| "message": {"content": ' {"action":"check"}\n'}, |
| "finish_reason": "stop", |
| } |
| ], |
| "usage": {"completion_tokens": 5}, |
| } |
| ) |
|
|
| monkeypatch.setattr("telltale.models.llama_runtime.request.urlopen", fake_urlopen) |
|
|
| runtime = LocalTextRuntime(RuntimeSettings(mode="llama_server", server_url="http://llama.test:8080")) |
|
|
| result = runtime.generate("prompt", max_tokens=32, temperature=0.4, seed=17) |
|
|
| assert result.text == ' {"action":"check"}\n' |
| assert calls[0]["url"] == "http://llama.test:8080/v1/models" |
| assert calls[1]["url"] == "http://llama.test:8080/v1/chat/completions" |
| assert calls[1]["body"]["messages"] == [{"role": "user", "content": "prompt"}] |
| assert calls[1]["body"]["max_tokens"] == 32 |
| assert calls[1]["body"]["temperature"] == 0.4 |
| assert calls[1]["body"]["seed"] == 17 |
| assert result.metadata["runtime_backend"] == "llama_server" |
| assert runtime.last_generation_metadata["finish_reason"] == "stop" |
| assert runtime.last_generation_metadata["usage"] == {"completion_tokens": 5} |
|
|
|
|
| def test_eval_runtime_uses_llama_server(monkeypatch): |
| calls = [] |
|
|
| class FakeResponse: |
| def __init__(self, payload): |
| self.payload = payload |
|
|
| def __enter__(self): |
| return self |
|
|
| def __exit__(self, exc_type, exc, tb): |
| return False |
|
|
| def read(self): |
| return json.dumps(self.payload).encode("utf-8") |
|
|
| def fake_urlopen(request, timeout): |
| calls.append(request.full_url) |
| if request.full_url.endswith("/v1/models"): |
| return FakeResponse({"data": [{"id": "telltale-agent"}]}) |
| return FakeResponse({"choices": [{"message": {"content": "{}"}}]}) |
|
|
| monkeypatch.setattr("telltale.models.llama_runtime.request.urlopen", fake_urlopen) |
|
|
| runtime = LocalLlamaCppRuntime( |
| LlamaRuntimeConfig( |
| repo_id="nvidia/NVIDIA-Nemotron-3-Nano-4B-GGUF", |
| filename="NVIDIA-Nemotron3-Nano-4B-Q4_K_M.gguf", |
| context_size=2048, |
| n_gpu_layers=-1, |
| server_url="http://llama.test:8080", |
| ) |
| ) |
|
|
| output = runtime.generate("prompt", max_tokens=32, temperature=0.4, seed=17) |
|
|
| assert output == "{}" |
| assert calls == ["http://llama.test:8080/v1/models", "http://llama.test:8080/v1/chat/completions"] |
| assert runtime.last_generation_metadata["runtime_backend"] == "llama_server" |
|
|