from __future__ import annotations import unittest from models.model_catalog import load_model_catalog from models.transformers_text import TransformersTextConfig, TransformersTextService class TransformersTextServiceTest(unittest.TestCase): def test_status_reports_missing_package_or_installed_package(self) -> None: status = TransformersTextService.status() self.assertEqual(status.name, "transformers") self.assertIsInstance(status.available, bool) def test_unavailable_chat_does_not_download_weights(self) -> None: catalog = load_model_catalog("config/models.yaml") service = TransformersTextService(catalog["minicpm5_1b"]) response = service.chat("Be concise.", "Hello") if not TransformersTextService.status().available: self.assertIn("[Transformers unavailable]", response) def test_generation_kwargs_are_explicit(self) -> None: catalog = load_model_catalog("config/models.yaml") service = TransformersTextService( catalog["minicpm5_1b"], TransformersTextConfig(max_new_tokens=32, temperature=0.2, do_sample=False), ) self.assertEqual( service.generation_kwargs(), {"max_new_tokens": 32, "temperature": 0.2, "do_sample": False}, ) def test_fallback_chat_prompt_format(self) -> None: class PlainTokenizer: pass prompt = TransformersTextService._format_chat_prompt( PlainTokenizer(), "System", "User", ) self.assertIn("system: System", prompt) self.assertIn("user: User", prompt) self.assertTrue(prompt.endswith("assistant:")) if __name__ == "__main__": unittest.main()