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

15 statements  

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

1"""MemoryModule — DI module for lexigram-ai-memory.""" 

2 

3from __future__ import annotations 

4 

5from typing import TYPE_CHECKING 

6 

7from lexigram.contracts.ai.memory import ( 

8 EpisodicMemoryProtocol, 

9 MemoryConsolidatorProtocol, 

10 MemoryStoreProtocol, 

11 SemanticMemoryProtocol, 

12 WorkingMemoryProtocol, 

13) 

14from lexigram.di.module import DynamicModule, Module, module 

15 

16if TYPE_CHECKING: 

17 from lexigram.ai.memory.config import MemoryConfig 

18 

19 

20@module 

21class MemoryModule(Module): 

22 """Three-tier AI memory: working, episodic, and semantic. 

23 

24 Call :meth:`configure` to register :class:`~lexigram.ai.memory.di.provider.MemoryProvider` 

25 and expose all memory protocol contracts for injection. 

26 

27 Usage:: 

28 

29 from lexigram.ai.memory.config import MemoryConfig 

30 from lexigram.ai.memory import MemoryModule 

31 

32 @module( 

33 imports=[MemoryModule.configure(MemoryConfig(...))] 

34 ) 

35 class AppModule(Module): 

36 pass 

37 """ 

38 

39 @classmethod 

40 def configure( 

41 cls, 

42 config: MemoryConfig | None = None, 

43 enable_consolidation: bool = True, 

44 ) -> DynamicModule: 

45 """Create a MemoryModule with explicit configuration. 

46 

47 Args: 

48 config: :class:`~lexigram.ai.memory.config.MemoryConfig` or ``None`` 

49 for defaults (in-memory backend, standard budget fractions). 

50 enable_consolidation: Register the 

51 :class:`~lexigram.ai.memory.consolidation.ConsolidationScheduler` 

52 which periodically promotes episodic memories into semantic 

53 storage. Defaults to ``True``. 

54 

55 Returns: 

56 A :class:`~lexigram.di.module.DynamicModule` descriptor. 

57 """ 

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

59 

60 return DynamicModule( 

61 module=cls, 

62 providers=[ 

63 MemoryProvider(config=config, enable_consolidation=enable_consolidation) 

64 ], 

65 exports=[ 

66 MemoryStoreProtocol, 

67 EpisodicMemoryProtocol, 

68 SemanticMemoryProtocol, 

69 WorkingMemoryProtocol, 

70 MemoryConsolidatorProtocol, 

71 ], 

72 ) 

73 

74 @classmethod 

75 def stub(cls, config: MemoryConfig | None = None) -> DynamicModule: 

76 """Create a MemoryModule suitable for unit and integration testing. 

77 

78 Uses in-memory backends with minimal side effects. Consolidation 

79 scheduling is disabled by default to avoid background timer tasks 

80 during tests. 

81 

82 Args: 

83 config: Optional :class:`~lexigram.ai.memory.config.MemoryConfig` 

84 override. Uses safe test defaults when ``None``. 

85 

86 Returns: 

87 A :class:`~lexigram.di.module.DynamicModule` descriptor. 

88 """ 

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

90 

91 return DynamicModule( 

92 module=cls, 

93 providers=[MemoryProvider(config=config, enable_consolidation=False)], 

94 exports=[ 

95 MemoryStoreProtocol, 

96 EpisodicMemoryProtocol, 

97 SemanticMemoryProtocol, 

98 WorkingMemoryProtocol, 

99 MemoryConsolidatorProtocol, 

100 ], 

101 ) 

102 

103 

104__all__ = ["MemoryModule"]