| from __future__ import annotations |
|
|
| import unittest |
|
|
| from core.deployment import DeploymentPolicy |
| from models.llama_cpp_python_service import LlamaCppPythonService |
| from models.llama_cpp_service import LlamaCppService |
| from models.minicpm_vision import MiniCPMVisionService |
| from models.model_catalog import load_model_catalog |
| from models.ollama_service import OllamaService |
| from models.openai_compatible_service import OpenAICompatibleService |
| from models.placeholder_service import PlaceholderModelService |
| from models.service_factory import ( |
| TEXT_SERVICE_REGISTRY, |
| VISION_SERVICE_REGISTRY, |
| backend_statuses, |
| create_text_service, |
| create_vision_service, |
| ) |
| from models.sglang_runner import SGLangService |
| from models.transformers_text import TransformersTextService |
|
|
|
|
| class ServiceFactoryTest(unittest.TestCase): |
| def test_creates_placeholder_service_by_default(self) -> None: |
| catalog = load_model_catalog("config/models.yaml") |
| service = create_text_service(catalog["minicpm5_1b"], "placeholder") |
|
|
| self.assertIsInstance(service, PlaceholderModelService) |
|
|
| def test_space_policy_rejects_placeholder_service(self) -> None: |
| catalog = load_model_catalog("config/models.yaml") |
|
|
| with self.assertRaises(ValueError): |
| create_text_service( |
| catalog["minicpm5_1b"], |
| "placeholder", |
| DeploymentPolicy("space"), |
| ) |
|
|
| def test_creates_ollama_service_when_selected(self) -> None: |
| catalog = load_model_catalog("config/models.yaml") |
| service = create_text_service(catalog["minicpm5_1b"], "ollama") |
|
|
| self.assertIsInstance(service, OllamaService) |
|
|
| def test_creates_llama_cpp_service_when_selected(self) -> None: |
| catalog = load_model_catalog("config/models.yaml") |
| service = create_text_service(catalog["minicpm5_1b"], "llama.cpp") |
|
|
| self.assertIsInstance(service, LlamaCppService) |
|
|
| def test_creates_llama_cpp_python_service_when_selected(self) -> None: |
| catalog = load_model_catalog("config/models.yaml") |
| service = create_text_service(catalog["minicpm5_1b"], "llama-cpp-python") |
|
|
| self.assertIsInstance(service, LlamaCppPythonService) |
|
|
| def test_backend_statuses_include_placeholder_and_ollama(self) -> None: |
| statuses = backend_statuses() |
|
|
| self.assertIn("placeholder", [status.name for status in statuses]) |
| self.assertIn("llama.cpp", [status.name for status in statuses]) |
| self.assertIn("llama-cpp-python", [status.name for status in statuses]) |
| self.assertIn("ollama", [status.name for status in statuses]) |
| self.assertIn("transformers", [status.name for status in statuses]) |
| self.assertIn("openai-compatible", [status.name for status in statuses]) |
| self.assertIn("sglang", [status.name for status in statuses]) |
| self.assertIn("transformers-vision", [status.name for status in statuses]) |
|
|
| def test_space_backend_statuses_hide_placeholder(self) -> None: |
| statuses = backend_statuses(DeploymentPolicy("space")) |
|
|
| self.assertNotIn("placeholder", [status.name for status in statuses]) |
| self.assertIn("transformers", [status.name for status in statuses]) |
|
|
| def test_model_service_registries_include_all_backends(self) -> None: |
| expected = [ |
| "placeholder", |
| "llama.cpp", |
| "llama-cpp-python", |
| "ollama", |
| "transformers", |
| "openai-compatible", |
| "sglang", |
| ] |
|
|
| self.assertEqual(TEXT_SERVICE_REGISTRY.list(), expected) |
| self.assertEqual( |
| VISION_SERVICE_REGISTRY.list(), |
| ["placeholder", "llama.cpp", "llama-cpp-python", "ollama", "transformers"], |
| ) |
|
|
| def test_creates_transformers_service_when_selected(self) -> None: |
| catalog = load_model_catalog("config/models.yaml") |
| service = create_text_service(catalog["minicpm5_1b"], "transformers") |
|
|
| self.assertIsInstance(service, TransformersTextService) |
|
|
| def test_creates_openai_compatible_service_when_selected(self) -> None: |
| catalog = load_model_catalog("config/models.yaml") |
| service = create_text_service(catalog["minicpm5_1b"], "openai-compatible") |
|
|
| self.assertIsInstance(service, OpenAICompatibleService) |
|
|
| def test_creates_sglang_service_when_selected(self) -> None: |
| catalog = load_model_catalog("config/models.yaml") |
| service = create_text_service(catalog["minicpm5_1b"], "sglang") |
|
|
| self.assertIsInstance(service, SGLangService) |
|
|
| def test_creates_minicpm_vision_service_when_transformers_selected(self) -> None: |
| catalog = load_model_catalog("config/models.yaml") |
| service = create_vision_service(catalog["minicpm_v46"], "transformers") |
|
|
| self.assertIsInstance(service, MiniCPMVisionService) |
|
|
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|