import pytest from llmux.model_registry import ModelRegistry @pytest.fixture def registry(): return ModelRegistry.from_config() def test_list_virtual_models(registry): models = registry.list_virtual_models() assert len(models) == 16 names = [m["id"] for m in models] assert "Qwen3.5-9B-FP8-Thinking" in names assert "GPT-OSS-20B-High" in names assert "cohere-transcribe" in names assert "Chatterbox-Multilingual" in names def test_virtual_model_openai_format(registry): models = registry.list_virtual_models() m = next(m for m in models if m["id"] == "Qwen3.5-9B-FP8-Thinking") assert m["object"] == "model" assert m["owned_by"] == "llmux" def test_resolve_virtual_to_physical(registry): physical_id, physical, params = registry.resolve("Qwen3.5-9B-FP8-Thinking") assert physical_id == "qwen3.5-9b-fp8" assert physical.backend == "transformers" assert params == {"enable_thinking": True} def test_resolve_instruct_variant(registry): physical_id, physical, params = registry.resolve("Qwen3.5-9B-FP8-Instruct") assert physical_id == "qwen3.5-9b-fp8" assert params == {"enable_thinking": False} def test_resolve_gpt_oss_reasoning(registry): physical_id, physical, params = registry.resolve("GPT-OSS-20B-Medium") assert physical_id == "gpt-oss-20b" assert params == {"system_prompt_prefix": "Reasoning: medium"} def test_resolve_same_physical_for_variants(registry): pid1, _, _ = registry.resolve("Qwen3.5-9B-FP8-Thinking") pid2, _, _ = registry.resolve("Qwen3.5-9B-FP8-Instruct") assert pid1 == pid2 def test_resolve_unknown_model_raises(registry): with pytest.raises(KeyError): registry.resolve("nonexistent-model") def test_get_physical(registry): physical = registry.get_physical("qwen3.5-9b-fp8") assert physical.type == "llm" assert physical.estimated_vram_gb == 9 def test_get_physical_unknown_raises(registry): with pytest.raises(KeyError): registry.get_physical("nonexistent")