Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-memory/src/lexigram/ai/memory/__init__.py: 50%

18 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-25 07:19 +0800

1"""lexigram-ai-memory — three-tier AI memory for the Lexigram Framework. 

2 

3Provides working, episodic, and semantic memory tiers with pluggable 

4backends, consolidation scheduling, and multi-source retrieval. 

5""" 

6 

7from __future__ import annotations 

8 

9import importlib.metadata 

10from typing import TYPE_CHECKING 

11 

12__path__ = __import__("pkgutil").extend_path(__path__, __name__) 

13 

14from lexigram.ai.memory.constants import __version__ as __version__ 

15 

16if TYPE_CHECKING: 

17 from lexigram.ai.memory.config import MemoryConfig 

18 from lexigram.ai.memory.di.provider import MemoryProvider 

19 from lexigram.ai.memory.events import ( 

20 MemoryRetrievedEvent, 

21 MemoryStoredEvent, 

22 ) 

23 from lexigram.ai.memory.hooks import ( 

24 MemoryConsolidatedHook, 

25 MemoryRetrievedHook, 

26 MemoryWrittenHook, 

27 ) 

28 from lexigram.ai.memory.module import MemoryModule 

29 from lexigram.ai.memory.protocols import ( 

30 ConsolidationStrategyProtocol, 

31 MemoryIndexProtocol, 

32 ) 

33 from lexigram.ai.memory.pruning.pruner import DynamicContextPruner 

34 from lexigram.ai.memory.retrieval.retriever import MemoryRetriever 

35 from lexigram.ai.memory.working.conversation_buffer import ConversationBuffer 

36 

37_LAZY_IMPORTS: dict[str, str] = { 

38 # --- Events --- 

39 "MemoryRetrievedEvent": "lexigram.ai.memory.events", 

40 "MemoryStoredEvent": "lexigram.ai.memory.events", 

41 # --- Hooks --- 

42 "MemoryConsolidatedHook": "lexigram.ai.memory.hooks", 

43 "MemoryRetrievedHook": "lexigram.ai.memory.hooks", 

44 "MemoryWrittenHook": "lexigram.ai.memory.hooks", 

45 # --- Backends --- 

46 "CacheMemoryBackend": "lexigram.ai.memory.backends.cache", 

47 "DatabaseMemoryBackend": "lexigram.ai.memory.backends.database", 

48 "InMemoryMemoryBackend": "lexigram.ai.memory.backends.in_memory", 

49 "VectorMemoryBackend": "lexigram.ai.memory.backends.vector", 

50 # --- Config --- 

51 "ConsolidationConfig": "lexigram.ai.memory.config", 

52 "EpisodicMemoryConfig": "lexigram.ai.memory.config", 

53 "MemoryConfig": "lexigram.ai.memory.config", 

54 "SemanticMemoryConfig": "lexigram.ai.memory.config", 

55 "WorkingMemoryConfig": "lexigram.ai.memory.config", 

56 # --- Consolidation --- 

57 "MemoryConsolidator": "lexigram.ai.memory.consolidation.consolidator", 

58 "ConsolidationScheduler": "lexigram.ai.memory.consolidation.scheduler", 

59 "AccessFrequencyStrategy": "lexigram.ai.memory.consolidation.strategies", 

60 "DeduplicationStrategy": "lexigram.ai.memory.consolidation.strategies", 

61 "RecencyDecayStrategy": "lexigram.ai.memory.consolidation.strategies", 

62 # --- DI --- 

63 "MemoryModule": "lexigram.ai.memory.module", 

64 "MemoryProvider": "lexigram.ai.memory.di.provider", 

65 # --- Episodic --- 

66 "EpisodicCompressor": "lexigram.ai.memory.episodic.compressor", 

67 "EpisodicMemoryStore": "lexigram.ai.memory.episodic.store", 

68 # --- Exceptions --- 

69 "ConsolidationError": "lexigram.ai.memory.exceptions", 

70 "EmbeddingError": "lexigram.ai.memory.exceptions", 

71 "FactExtractionError": "lexigram.ai.memory.exceptions", 

72 "MemoryCapacityError": "lexigram.ai.memory.exceptions", 

73 "MemoryStoreError": "lexigram.ai.memory.exceptions", 

74 "MemorySystemError": "lexigram.ai.memory.exceptions", 

75 # --- Retrieval --- 

76 "RelevanceRanker": "lexigram.ai.memory.retrieval.ranking", 

77 "MemoryRetriever": "lexigram.ai.memory.retrieval.retriever", 

78 # --- Semantic --- 

79 "EntityExtractor": "lexigram.ai.memory.semantic.entity_extractor", 

80 "FactStore": "lexigram.ai.memory.semantic.fact_store", 

81 "SemanticMemoryStore": "lexigram.ai.memory.semantic.store", 

82 # --- Stores --- 

83 "BufferMemoryStore": "lexigram.ai.memory.stores.buffer", 

84 "ConversationMemoryStore": "lexigram.ai.memory.stores.conversation", 

85 "EntityMemoryStore": "lexigram.ai.memory.stores.entity", 

86 "SummaryMemoryStore": "lexigram.ai.memory.stores.summary", 

87 # --- Pruning --- 

88 "DynamicContextPruner": "lexigram.ai.memory.pruning.pruner", 

89 "HybridScorerImpl": "lexigram.ai.memory.pruning.scorer", 

90 "RecencyScorerImpl": "lexigram.ai.memory.pruning.scorer", 

91 "RelevanceScorerProtocol": "lexigram.ai.memory.pruning.scorer", 

92 "PruningResult": "lexigram.ai.memory.pruning.types", 

93 "PruningStrategy": "lexigram.ai.memory.pruning.types", 

94 # --- Working --- 

95 "ConversationBuffer": "lexigram.ai.memory.working.conversation_buffer", 

96 "WorkingMemoryManager": "lexigram.ai.memory.working.manager", 

97 "TokenBudgetAllocator": "lexigram.ai.memory.working.token_budget", 

98 # Internal protocols 

99 "MemoryIndexProtocol": "lexigram.ai.memory.protocols", 

100 "ConsolidationStrategyProtocol": "lexigram.ai.memory.protocols", 

101} 

102 

103 

104def __getattr__(name: str) -> object: 

105 if name in _LAZY_IMPORTS: 

106 import importlib 

107 

108 module = importlib.import_module(_LAZY_IMPORTS[name]) 

109 value = getattr(module, name) 

110 globals()[name] = value 

111 return value 

112 msg = f"module {__name__!r} has no attribute {name!r}" 

113 raise AttributeError(msg) 

114 

115 

116def __dir__() -> list[str]: 

117 return sorted(set(__all__) | set(_LAZY_IMPORTS.keys())) 

118 

119 

120__all__ = list(_LAZY_IMPORTS.keys())