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
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 07:19 +0800
1"""lexigram-ai-session — stateful conversation session management.
3Provides tools for managing conversation history, branching,
4checkpointing, and multi-agent group sessions.
5"""
7from __future__ import annotations
9from importlib.metadata import PackageNotFoundError, version
10from typing import TYPE_CHECKING, Any
12try:
13 __version__ = version("lexigram-ai-session")
14except PackageNotFoundError:
15 __version__ = "0.0.0"
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
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}
165def __getattr__(name: str) -> Any:
166 """Lazy-load symbols on first access."""
167 if name in _LAZY_IMPORTS:
168 import importlib
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}")
178def __dir__() -> list[str]:
179 """Enumerate available attributes for IDE support."""
180 return sorted(set(__all__) | set(_LAZY_IMPORTS.keys()))
183__all__ = list(_LAZY_IMPORTS)