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

20 statements  

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

1"""lexigram-ai-session — stateful conversation session management. 

2 

3Provides tools for managing conversation history, branching, 

4checkpointing, and multi-agent group sessions. 

5""" 

6 

7from __future__ import annotations 

8 

9from importlib.metadata import PackageNotFoundError, version 

10from typing import TYPE_CHECKING, Any 

11 

12try: 

13 __version__ = version("lexigram-ai-session") 

14except PackageNotFoundError: 

15 __version__ = "0.0.0" 

16 

17if TYPE_CHECKING: 

18 from lexigram.ai.session.analytics.core import SessionAnalytics 

19 from lexigram.ai.session.branching.branch_manager import BranchManager 

20 from lexigram.ai.session.branching.merge import ( 

21 AppendMerge, 

22 MergeStrategy, 

23 SelectiveMerge, 

24 ) 

25 from lexigram.ai.session.checkpointing.checkpoint_manager import CheckpointManager 

26 from lexigram.ai.session.checkpointing.diff import StateDiff 

27 from lexigram.ai.session.config import SessionConfig 

28 from lexigram.ai.session.context import RelevanceContextPruner, SessionContext 

29 from lexigram.ai.session.di.provider import SessionProvider 

30 from lexigram.ai.session.exceptions import ( 

31 CheckpointNotFoundError, 

32 SessionCapacityError, 

33 SessionClosedError, 

34 SessionError, 

35 SessionExpiredError, 

36 SessionNotFoundError, 

37 SessionTransitionError, 

38 ) 

39 from lexigram.ai.session.hooks import ( 

40 SessionCheckpointCreatedHook, 

41 SessionClosedHook, 

42 SessionStartedHook, 

43 ) 

44 from lexigram.ai.session.manager import SessionManagerImpl 

45 from lexigram.ai.session.middleware.session_middleware import SessionMiddleware 

46 from lexigram.ai.session.module import SessionModule 

47 from lexigram.ai.session.multi_agent.group_session import GroupSession 

48 from lexigram.ai.session.multi_agent.role_isolation import RoleIsolation 

49 from lexigram.ai.session.multi_agent.turn_manager import ( 

50 PriorityTurnManager, 

51 RoundRobinTurnManager, 

52 TopicBasedTurnManager, 

53 TurnManager, 

54 ) 

55 from lexigram.ai.session.state import SessionStateMachine 

56 from lexigram.ai.session.stores.cache import CacheSessionStore 

57 from lexigram.ai.session.stores.database import DatabaseSessionStore 

58 from lexigram.ai.session.stores.in_memory import InMemorySessionStore 

59 from lexigram.ai.session.types import Metadata, SessionId, TurnId 

60 

61_LAZY_IMPORTS: dict[str, tuple[str, str]] = { 

62 # --- Branching --- 

63 "BranchManager": ("lexigram.ai.session.branching.branch_manager", "BranchManager"), 

64 "AppendMerge": ("lexigram.ai.session.branching.merge", "AppendMerge"), 

65 "MergeStrategy": ("lexigram.ai.session.branching.merge", "MergeStrategy"), 

66 "SelectiveMerge": ("lexigram.ai.session.branching.merge", "SelectiveMerge"), 

67 # --- Checkpointing --- 

68 "CheckpointManager": ( 

69 "lexigram.ai.session.checkpointing.checkpoint_manager", 

70 "CheckpointManager", 

71 ), 

72 "StateDiff": ("lexigram.ai.session.checkpointing.diff", "StateDiff"), 

73 # --- Config --- 

74 "SessionConfig": ("lexigram.ai.session.config", "SessionConfig"), 

75 # --- Context --- 

76 "SessionContext": ("lexigram.ai.session.context", "SessionContext"), 

77 "RelevanceContextPruner": ("lexigram.ai.session.context", "RelevanceContextPruner"), 

78 # --- DI --- 

79 "SessionProvider": ("lexigram.ai.session.di.provider", "SessionProvider"), 

80 # --- Analytics --- 

81 "SessionAnalytics": ("lexigram.ai.session.analytics.core", "SessionAnalytics"), 

82 # --- Exceptions --- 

83 "CheckpointNotFoundError": ( 

84 "lexigram.ai.session.exceptions", 

85 "CheckpointNotFoundError", 

86 ), 

87 "SessionCapacityError": ("lexigram.ai.session.exceptions", "SessionCapacityError"), 

88 "SessionClosedError": ("lexigram.ai.session.exceptions", "SessionClosedError"), 

89 "SessionError": ("lexigram.ai.session.exceptions", "SessionError"), 

90 "SessionExpiredError": ("lexigram.ai.session.exceptions", "SessionExpiredError"), 

91 "SessionNotFoundError": ("lexigram.ai.session.exceptions", "SessionNotFoundError"), 

92 "SessionTransitionError": ( 

93 "lexigram.ai.session.exceptions", 

94 "SessionTransitionError", 

95 ), 

96 # --- Hooks --- 

97 "SessionCheckpointCreatedHook": ( 

98 "lexigram.ai.session.hooks", 

99 "SessionCheckpointCreatedHook", 

100 ), 

101 "SessionClosedHook": ("lexigram.ai.session.hooks", "SessionClosedHook"), 

102 "SessionStartedHook": ("lexigram.ai.session.hooks", "SessionStartedHook"), 

103 # --- Manager --- 

104 "SessionManager": ("lexigram.ai.session.manager", "SessionManagerImpl"), 

105 "SessionManagerImpl": ("lexigram.ai.session.manager", "SessionManagerImpl"), 

106 # --- Middleware --- 

107 "SessionMiddleware": ( 

108 "lexigram.ai.session.middleware.session_middleware", 

109 "SessionMiddleware", 

110 ), 

111 # --- Module --- 

112 "SessionModule": ("lexigram.ai.session.module", "SessionModule"), 

113 # --- Multi-Agent --- 

114 "GroupSession": ("lexigram.ai.session.multi_agent.group_session", "GroupSession"), 

115 "RoleIsolation": ( 

116 "lexigram.ai.session.multi_agent.role_isolation", 

117 "RoleIsolation", 

118 ), 

119 "PriorityTurnManager": ( 

120 "lexigram.ai.session.multi_agent.turn_manager", 

121 "PriorityTurnManager", 

122 ), 

123 "RoundRobinTurnManager": ( 

124 "lexigram.ai.session.multi_agent.turn_manager", 

125 "RoundRobinTurnManager", 

126 ), 

127 "TopicBasedTurnManager": ( 

128 "lexigram.ai.session.multi_agent.turn_manager", 

129 "TopicBasedTurnManager", 

130 ), 

131 "TurnManager": ("lexigram.ai.session.multi_agent.turn_manager", "TurnManager"), 

132 # --- State --- 

133 "SessionStateMachine": ("lexigram.ai.session.state", "SessionStateMachine"), 

134 # --- Stores --- 

135 "CacheSessionStore": ("lexigram.ai.session.stores.cache", "CacheSessionStore"), 

136 "DatabaseSessionStore": ( 

137 "lexigram.ai.session.stores.database", 

138 "DatabaseSessionStore", 

139 ), 

140 "InMemorySessionStore": ( 

141 "lexigram.ai.session.stores.in_memory", 

142 "InMemorySessionStore", 

143 ), 

144 # --- Types --- 

145 "Metadata": ("lexigram.ai.session.types", "Metadata"), 

146 "SessionId": ("lexigram.ai.session.types", "SessionId"), 

147 "TurnId": ("lexigram.ai.session.types", "TurnId"), 

148 # --- Events --- 

149 "SessionCreatedEvent": ("lexigram.ai.session.events", "SessionCreatedEvent"), 

150 "SessionClosedEvent": ("lexigram.ai.session.events", "SessionClosedEvent"), 

151 # --- Protocols --- 

152 "ContextPrunerProtocol": ("lexigram.ai.session.protocols", "ContextPrunerProtocol"), 

153 "SessionContextProtocol": ( 

154 "lexigram.ai.session.protocols", 

155 "SessionContextProtocol", 

156 ), 

157 "SessionManagerProtocol": ( 

158 "lexigram.ai.session.protocols", 

159 "SessionManagerProtocol", 

160 ), 

161 "SessionStoreProtocol": ("lexigram.ai.session.protocols", "SessionStoreProtocol"), 

162} 

163 

164 

165def __getattr__(name: str) -> Any: 

166 """Lazy-load symbols on first access.""" 

167 if name in _LAZY_IMPORTS: 

168 import importlib 

169 

170 module_path, attr_name = _LAZY_IMPORTS[name] 

171 module = importlib.import_module(module_path) 

172 value = getattr(module, attr_name) 

173 globals()[name] = value 

174 return value 

175 raise AttributeError(f"module {__name__!r} has no attribute {name!r}") 

176 

177 

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

179 """Enumerate available attributes for IDE support.""" 

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

181 

182 

183__all__ = list(_LAZY_IMPORTS)