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
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 07:19 +0800
1"""MemoryModule — DI module for lexigram-ai-memory."""
3from __future__ import annotations
5from typing import TYPE_CHECKING
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
16if TYPE_CHECKING:
17 from lexigram.ai.memory.config import MemoryConfig
20@module
21class MemoryModule(Module):
22 """Three-tier AI memory: working, episodic, and semantic.
24 Call :meth:`configure` to register :class:`~lexigram.ai.memory.di.provider.MemoryProvider`
25 and expose all memory protocol contracts for injection.
27 Usage::
29 from lexigram.ai.memory.config import MemoryConfig
30 from lexigram.ai.memory import MemoryModule
32 @module(
33 imports=[MemoryModule.configure(MemoryConfig(...))]
34 )
35 class AppModule(Module):
36 pass
37 """
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.
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``.
55 Returns:
56 A :class:`~lexigram.di.module.DynamicModule` descriptor.
57 """
58 from lexigram.ai.memory.di.provider import MemoryProvider
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 )
74 @classmethod
75 def stub(cls, config: MemoryConfig | None = None) -> DynamicModule:
76 """Create a MemoryModule suitable for unit and integration testing.
78 Uses in-memory backends with minimal side effects. Consolidation
79 scheduling is disabled by default to avoid background timer tasks
80 during tests.
82 Args:
83 config: Optional :class:`~lexigram.ai.memory.config.MemoryConfig`
84 override. Uses safe test defaults when ``None``.
86 Returns:
87 A :class:`~lexigram.di.module.DynamicModule` descriptor.
88 """
89 from lexigram.ai.memory.di.provider import MemoryProvider
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 )
104__all__ = ["MemoryModule"]