| import pytest
|
| import pytest_asyncio
|
| import os
|
| from mnemocore.core.config import get_config, reset_config
|
| from mnemocore.core.engine import HAIMEngine
|
|
|
| @pytest.fixture
|
| def test_engine(tmp_path):
|
| from mnemocore.core.hnsw_index import HNSWIndexManager
|
| HNSWIndexManager._instance = None
|
| reset_config()
|
|
|
| data_dir = tmp_path / "data"
|
| data_dir.mkdir()
|
|
|
| os.environ["HAIM_DATA_DIR"] = str(data_dir)
|
| os.environ["HAIM_ENCODING_MODE"] = "binary"
|
| os.environ["HAIM_DIMENSIONALITY"] = "1024"
|
| os.environ["HAIM_SYNAPSE_SIMILARITY_THRESHOLD"] = "0.4"
|
| os.environ["HAIM_SYNAPSE_AUTO_BIND_ON_STORE"] = "True"
|
| os.environ["HAIM_TIERS_HOT_LTP_THRESHOLD_MIN"] = "0.01"
|
| os.environ["HAIM_LTP_INITIAL_IMPORTANCE"] = "0.8"
|
| os.environ["HAIM_MEMORY_FILE"] = str(data_dir / "memory.jsonl")
|
| os.environ["HAIM_CODEBOOK_FILE"] = str(data_dir / "codebook.json")
|
| os.environ["HAIM_SYNAPSES_FILE"] = str(data_dir / "synapses.json")
|
| os.environ["HAIM_WARM_MMAP_DIR"] = str(data_dir / "warm")
|
| os.environ["HAIM_COLD_ARCHIVE_DIR"] = str(data_dir / "cold")
|
|
|
| reset_config()
|
| engine = HAIMEngine()
|
| yield engine
|
|
|
| del os.environ["HAIM_DATA_DIR"]
|
| del os.environ["HAIM_ENCODING_MODE"]
|
| del os.environ["HAIM_DIMENSIONALITY"]
|
| del os.environ["HAIM_SYNAPSE_SIMILARITY_THRESHOLD"]
|
| del os.environ["HAIM_SYNAPSE_AUTO_BIND_ON_STORE"]
|
| del os.environ["HAIM_TIERS_HOT_LTP_THRESHOLD_MIN"]
|
| del os.environ["HAIM_LTP_INITIAL_IMPORTANCE"]
|
| for key in ["HAIM_MEMORY_FILE", "HAIM_CODEBOOK_FILE", "HAIM_SYNAPSES_FILE", "HAIM_WARM_MMAP_DIR", "HAIM_COLD_ARCHIVE_DIR"]:
|
| os.environ.pop(key, None)
|
| reset_config()
|
|
|
| @pytest.mark.asyncio
|
| async def test_auto_bind_on_store(test_engine):
|
| await test_engine.initialize()
|
|
|
|
|
| concept = "Python Memory Management and Garbage Collection"
|
| mid1 = await test_engine.store(concept)
|
|
|
|
|
| concept2 = "Python Garbage Collection and Memory Management"
|
| mid2 = await test_engine.store(concept2)
|
|
|
|
|
| async with test_engine.synapse_lock:
|
| syn = test_engine._synapse_index.get(mid1, mid2)
|
| assert syn is not None, "Synapse should be auto-created between similar concepts"
|
| assert syn.fire_count >= 1
|
|
|
| await test_engine.close()
|
|
|