(self)
| 18 | |
| 19 | class TestGeneralTextMemory(unittest.TestCase): |
| 20 | def setUp(self): |
| 21 | # Mock configurations for GeneralTextMemoryConfig arguments |
| 22 | self.mock_llm_config_arg = MagicMock(spec=LLMConfigFactory) |
| 23 | self.mock_llm_config_arg.backend = "ollama" # Example valid backend |
| 24 | self.mock_llm_config_arg.config = {"model_name_or_path": "test-llm"} |
| 25 | self.mock_llm_config_arg.model_schema = "memos.configs.llm.LLMConfigFactory" |
| 26 | |
| 27 | self.mock_embedder_config_arg = MagicMock(spec=EmbedderConfigFactory) |
| 28 | self.mock_embedder_config_arg.backend = "ollama" # Example valid backend |
| 29 | self.mock_embedder_config_arg.config = {"model_name_or_path": "test-embedder"} |
| 30 | self.mock_embedder_config_arg.model_schema = "memos.configs.embedder.EmbedderConfigFactory" |
| 31 | |
| 32 | self.mock_vector_db_config_arg = MagicMock(spec=VectorDBConfigFactory) |
| 33 | self.mock_vector_db_config_arg.backend = "qdrant" # Example valid backend |
| 34 | self.mock_vector_db_config_arg.config = {"collection_name": "test-collection-for-factory"} |
| 35 | self.mock_vector_db_config_arg.model_schema = "memos.configs.vec_db.VectorDBConfigFactory" |
| 36 | |
| 37 | # This mock_qdrant_config is for the *internal* config of the QdrantVecDB mock instance. |
| 38 | # It is NOT passed directly to GeneralTextMemoryConfig. |
| 39 | self.mock_qdrant_config = MagicMock() |
| 40 | self.mock_qdrant_config.collection_name = "test_textual_memory_unittest" |
| 41 | |
| 42 | # Mocks for the actual LLM, VectorDB, Embedder instances that factories will return |
| 43 | self.mock_llm = MagicMock(spec=OllamaLLM) |
| 44 | self.mock_vector_db = MagicMock(spec=QdrantVecDB) |
| 45 | # The mocked QdrantVecDB instance will have its .config attribute point to self.mock_qdrant_config |
| 46 | self.mock_vector_db.config = self.mock_qdrant_config |
| 47 | self.mock_embedder = MagicMock(spec=OllamaEmbedder) |
| 48 | |
| 49 | # Patch factories used in GeneralTextMemory constructor |
| 50 | self.patcher_llm_factory = patch("memos.memories.textual.general.LLMFactory") |
| 51 | self.patcher_vecdb_factory = patch("memos.memories.textual.general.VecDBFactory") |
| 52 | self.patcher_embedder_factory = patch("memos.memories.textual.general.EmbedderFactory") |
| 53 | |
| 54 | self.mock_llm_factory = self.patcher_llm_factory.start() |
| 55 | self.mock_vecdb_factory = self.patcher_vecdb_factory.start() |
| 56 | self.mock_embedder_factory = self.patcher_embedder_factory.start() |
| 57 | |
| 58 | # Configure patched factories to return the above mocks |
| 59 | self.mock_llm_factory.from_config.return_value = self.mock_llm |
| 60 | self.mock_vecdb_factory.from_config.return_value = self.mock_vector_db |
| 61 | self.mock_embedder_factory.from_config.return_value = self.mock_embedder |
| 62 | |
| 63 | # Instantiate GeneralTextMemoryConfig with the correctly specced *ConfigFactory mocks |
| 64 | # that now have .backend and .config attributes |
| 65 | self.config = GeneralTextMemoryConfig( |
| 66 | extractor_llm=self.mock_llm_config_arg, |
| 67 | vector_db=self.mock_vector_db_config_arg, |
| 68 | embedder=self.mock_embedder_config_arg, |
| 69 | ) |
| 70 | |
| 71 | # Instantiate the class under test |
| 72 | self.memory = GeneralTextMemory(self.config) |
| 73 | |
| 74 | def tearDown(self): |
| 75 | self.patcher_llm_factory.stop() |
nothing calls this directly
no test coverage detected