| from __future__ import annotations |
|
|
| from pathlib import Path |
| import unittest |
|
|
| from agent_harness.lm_studio import ( |
| LMStudioClient, |
| LMStudioError, |
| normalize_identity, |
| select_expected_model, |
| ) |
| from agent_harness.specs import load_models |
|
|
|
|
| ROOT = Path(__file__).resolve().parents[1] |
|
|
|
|
| class LMStudioIdentityTests(unittest.TestCase): |
| def setUp(self) -> None: |
| self.spec = load_models(ROOT)["M001"] |
|
|
| def test_identity_normalization(self) -> None: |
| self.assertEqual(normalize_identity("Qwen3.6-35B-A3B"), "qwen3635ba3b") |
|
|
| def test_resolves_expected_model_and_native_metadata(self) -> None: |
| resolved = select_expected_model( |
| self.spec, |
| [{"id": "qwen/qwen3.6-35b-a3b", "object": "model"}], |
| [ |
| { |
| "key": "qwen/qwen3.6-35b-a3b", |
| "selected_variant": "qwen/qwen3.6-35b-a3b@4bit", |
| "format": "mlx", |
| "quantization": {"name": "4bit"}, |
| "loaded_instances": [{"config": {"context_length": 262144}}], |
| "capabilities": {"reasoning": {"default": "on"}}, |
| } |
| ], |
| ) |
| self.assertEqual(resolved.inference_key, "qwen/qwen3.6-35b-a3b") |
| self.assertEqual( |
| resolved.native_record["selected_variant"], |
| "qwen/qwen3.6-35b-a3b@4bit", |
| ) |
|
|
| def test_rejects_missing_model(self) -> None: |
| with self.assertRaises(LMStudioError): |
| select_expected_model(self.spec, [{"id": "some-other-model"}]) |
|
|
| def test_rejects_ambiguous_variants(self) -> None: |
| with self.assertRaises(LMStudioError): |
| select_expected_model( |
| self.spec, |
| [ |
| {"id": "qwen3.6-35b-a3b-q4"}, |
| {"id": "qwen3.6-35b-a3b-q8"}, |
| ], |
| ) |
|
|
| def test_inference_probe_rejects_http_success_without_marker(self) -> None: |
| client = LMStudioClient(self.spec) |
| client.chat_completions = lambda *args, **kwargs: { |
| "choices": [ |
| { |
| "finish_reason": "length", |
| "message": {"content": "", "reasoning_content": "unfinished"}, |
| } |
| ] |
| } |
| with self.assertRaises(LMStudioError): |
| client.inference_probe(self.spec.expected_inference_key) |
|
|
| def test_inference_probe_accepts_exact_visible_marker(self) -> None: |
| client = LMStudioClient(self.spec) |
| response = { |
| "choices": [ |
| { |
| "finish_reason": "stop", |
| "message": {"content": "\nMODEL_OK", "reasoning_content": "checked"}, |
| } |
| ] |
| } |
| client.chat_completions = lambda *args, **kwargs: response |
| self.assertIs(client.inference_probe(self.spec.expected_inference_key), response) |
|
|
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|