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
« 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.
3Provides working, episodic, and semantic memory tiers with pluggable
4backends, consolidation scheduling, and multi-source retrieval.
5"""
7from __future__ import annotations
9import importlib.metadata
10from typing import TYPE_CHECKING
12__path__ = __import__("pkgutil").extend_path(__path__, __name__)
14from lexigram.ai.memory.constants import __version__ as __version__
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
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}
104def __getattr__(name: str) -> object:
105 if name in _LAZY_IMPORTS:
106 import importlib
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)
116def __dir__() -> list[str]:
117 return sorted(set(__all__) | set(_LAZY_IMPORTS.keys()))
120__all__ = list(_LAZY_IMPORTS.keys())