chuk-ai-session-manager 0.3__py3-none-any.whl → 0.4.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,15 @@
1
- # chuk_ai_session_manager/__init__.py
1
+ # src/chuk_ai_session_manager/__init__.py
2
2
  """
3
3
  CHUK AI Session Manager - Simple Developer API
4
4
 
5
+ A powerful session management system for AI applications that provides:
6
+ - Automatic conversation tracking
7
+ - Token usage monitoring
8
+ - Tool call logging
9
+ - Infinite context support with automatic summarization
10
+ - Hierarchical session relationships
11
+ - CHUK Sessions backend integration
12
+
5
13
  Quick Start:
6
14
  from chuk_ai_session_manager import track_conversation
7
15
 
@@ -13,59 +21,309 @@ Quick Start:
13
21
  sm = SessionManager()
14
22
  await sm.user_says("What's the weather?")
15
23
  await sm.ai_responds("It's sunny and 72°F", model="gpt-4")
16
- """
17
24
 
18
- # Simple API exports - the main things developers need
19
- from chuk_ai_session_manager.api.simple_api import (
20
- SessionManager,
21
- track_conversation,
22
- track_llm_call,
23
- quick_conversation,
24
- track_infinite_conversation
25
- )
26
-
27
- # Core models for advanced users
28
- from chuk_ai_session_manager.models.session import Session
29
- from chuk_ai_session_manager.models.session_event import SessionEvent
30
- from chuk_ai_session_manager.models.event_source import EventSource
31
- from chuk_ai_session_manager.models.event_type import EventType
32
-
33
- # Storage backend setup
34
- from chuk_ai_session_manager.session_storage import setup_chuk_sessions_storage
35
-
36
- __version__ = "0.1.0"
37
-
38
- # Main exports - keep it simple
39
- __all__ = [
40
- # Simple API - most developers start here
41
- "SessionManager",
42
- "track_conversation",
43
- "track_llm_call",
44
- "quick_conversation",
45
- "track_infinite_conversation",
25
+ Infinite Context Example:
26
+ # Automatically handles long conversations with summarization
27
+ sm = SessionManager(infinite_context=True, token_threshold=4000)
28
+ await sm.user_says("Tell me about machine learning")
29
+ await sm.ai_responds("Machine learning is...", model="gpt-4")
30
+ # Session will auto-segment when limits are reached
31
+
32
+ Advanced Usage:
33
+ # Access the full Session model for detailed control
34
+ from chuk_ai_session_manager import Session, SessionEvent
46
35
 
47
- # Core models for advanced usage
48
- "Session",
49
- "SessionEvent",
50
- "EventSource",
51
- "EventType",
36
+ session = await Session.create()
37
+ event = await SessionEvent.create_with_tokens(
38
+ message="Hello", prompt="Hello", model="gpt-4"
39
+ )
40
+ await session.add_event_and_save(event)
41
+ """
42
+
43
+ import logging
44
+ from typing import Optional
45
+
46
+ # Package version
47
+ __version__ = "0.4"
48
+
49
+ # Set up package-level logger
50
+ logger = logging.getLogger(__name__)
51
+
52
+ # Core enums and constants (no dependencies)
53
+ try:
54
+ from chuk_ai_session_manager.models.event_source import EventSource
55
+ from chuk_ai_session_manager.models.event_type import EventType
56
+ except ImportError as e:
57
+ logger.warning(f"Could not import core enums: {e}")
58
+ EventSource = None
59
+ EventType = None
60
+
61
+ # Storage setup function (no circular dependencies)
62
+ try:
63
+ from chuk_ai_session_manager.session_storage import setup_chuk_sessions_storage
64
+ except ImportError as e:
65
+ logger.warning(f"Could not import storage setup: {e}")
66
+ setup_chuk_sessions_storage = None
67
+
68
+ # Exception classes
69
+ try:
70
+ from chuk_ai_session_manager.exceptions import (
71
+ SessionManagerError,
72
+ SessionNotFound,
73
+ SessionAlreadyExists,
74
+ InvalidSessionOperation,
75
+ TokenLimitExceeded,
76
+ StorageError,
77
+ ToolProcessingError
78
+ )
79
+ except ImportError as e:
80
+ logger.warning(f"Could not import exceptions: {e}")
81
+ # Define minimal fallback exceptions
82
+ class SessionManagerError(Exception):
83
+ """Base exception for session manager errors."""
84
+ pass
52
85
 
53
- # Setup
54
- "setup_chuk_sessions_storage",
55
- ]
86
+ SessionNotFound = SessionManagerError
87
+ SessionAlreadyExists = SessionManagerError
88
+ InvalidSessionOperation = SessionManagerError
89
+ TokenLimitExceeded = SessionManagerError
90
+ StorageError = SessionManagerError
91
+ ToolProcessingError = SessionManagerError
92
+
93
+ # Core models (may have some dependencies)
94
+ Session = None
95
+ SessionEvent = None
96
+ SessionMetadata = None
97
+ SessionRun = None
98
+ RunStatus = None
99
+ TokenUsage = None
100
+
101
+ try:
102
+ from chuk_ai_session_manager.models.session_metadata import SessionMetadata
103
+ except ImportError as e:
104
+ logger.debug(f"Could not import SessionMetadata: {e}")
105
+
106
+ try:
107
+ from chuk_ai_session_manager.models.session_run import SessionRun, RunStatus
108
+ except ImportError as e:
109
+ logger.debug(f"Could not import SessionRun: {e}")
110
+
111
+ try:
112
+ from chuk_ai_session_manager.models.token_usage import TokenUsage, TokenSummary
113
+ except ImportError as e:
114
+ logger.debug(f"Could not import TokenUsage: {e}")
115
+ TokenSummary = None
116
+
117
+ try:
118
+ from chuk_ai_session_manager.models.session_event import SessionEvent
119
+ except ImportError as e:
120
+ logger.debug(f"Could not import SessionEvent: {e}")
121
+
122
+ try:
123
+ from chuk_ai_session_manager.models.session import Session
124
+ except ImportError as e:
125
+ logger.debug(f"Could not import Session: {e}")
126
+
127
+ # Simple API (highest level, most dependencies)
128
+ SessionManager = None
129
+ track_conversation = None
130
+ track_llm_call = None
131
+ quick_conversation = None
132
+ track_infinite_conversation = None
133
+
134
+ try:
135
+ from chuk_ai_session_manager.api.simple_api import (
136
+ SessionManager,
137
+ track_conversation,
138
+ track_llm_call,
139
+ quick_conversation,
140
+ track_infinite_conversation
141
+ )
142
+ except ImportError as e:
143
+ logger.warning(f"Could not import simple API: {e}")
144
+
145
+ # Advanced components (optional)
146
+ InfiniteConversationManager = None
147
+ SessionAwareToolProcessor = None
148
+ build_prompt_from_session = None
149
+ PromptStrategy = None
150
+
151
+ try:
152
+ from chuk_ai_session_manager.infinite_conversation import InfiniteConversationManager
153
+ except ImportError as e:
154
+ logger.debug(f"Could not import InfiniteConversationManager: {e}")
155
+
156
+ try:
157
+ from chuk_ai_session_manager.session_aware_tool_processor import SessionAwareToolProcessor
158
+ except ImportError as e:
159
+ logger.debug(f"Could not import SessionAwareToolProcessor: {e}")
160
+
161
+ try:
162
+ from chuk_ai_session_manager.session_prompt_builder import (
163
+ build_prompt_from_session,
164
+ PromptStrategy
165
+ )
166
+ except ImportError as e:
167
+ logger.debug(f"Could not import prompt builder: {e}")
56
168
 
57
- # Auto-setup with sensible defaults
58
- def _auto_setup():
59
- """Auto-setup with good defaults if not already configured."""
169
+
170
+ def _auto_setup_storage(sandbox_id: str = "chuk-ai-session-manager",
171
+ default_ttl_hours: int = 24) -> bool:
172
+ """
173
+ Auto-setup storage with sensible defaults if not already configured.
174
+
175
+ Args:
176
+ sandbox_id: CHUK Sessions sandbox ID to use
177
+ default_ttl_hours: Default TTL for sessions
178
+
179
+ Returns:
180
+ True if setup was successful, False otherwise
181
+ """
182
+ if setup_chuk_sessions_storage is None:
183
+ logger.warning("Storage setup not available - imports failed")
184
+ return False
185
+
60
186
  try:
187
+ # Try to get existing backend first
61
188
  from chuk_ai_session_manager.session_storage import get_backend
62
189
  get_backend() # This will trigger setup if needed
190
+ logger.debug("Storage backend already configured")
191
+ return True
63
192
  except Exception:
64
- # Silently setup with defaults
65
- setup_chuk_sessions_storage(
66
- sandbox_id="chuk-ai-session-manager",
67
- default_ttl_hours=24
68
- )
69
-
70
- # Run auto-setup on import
71
- _auto_setup()
193
+ # Setup with defaults if not configured
194
+ try:
195
+ setup_chuk_sessions_storage(
196
+ sandbox_id=sandbox_id,
197
+ default_ttl_hours=default_ttl_hours
198
+ )
199
+ logger.info(f"Auto-configured storage with sandbox_id='{sandbox_id}'")
200
+ return True
201
+ except Exception as e:
202
+ logger.error(f"Failed to auto-setup storage: {e}")
203
+ return False
204
+
205
+
206
+ def configure_storage(sandbox_id: str = "chuk-ai-session-manager",
207
+ default_ttl_hours: int = 24) -> bool:
208
+ """
209
+ Explicitly configure the storage backend.
210
+
211
+ Args:
212
+ sandbox_id: CHUK Sessions sandbox ID to use
213
+ default_ttl_hours: Default TTL for sessions
214
+
215
+ Returns:
216
+ True if configuration was successful, False otherwise
217
+ """
218
+ return _auto_setup_storage(sandbox_id, default_ttl_hours)
219
+
220
+
221
+ def get_version() -> str:
222
+ """Get the package version."""
223
+ return __version__
224
+
225
+
226
+ def is_available() -> dict:
227
+ """
228
+ Check which components are available.
229
+
230
+ Returns:
231
+ Dictionary showing availability of each component
232
+ """
233
+ return {
234
+ "core_enums": EventSource is not None and EventType is not None,
235
+ "core_models": Session is not None and SessionEvent is not None,
236
+ "simple_api": SessionManager is not None,
237
+ "storage": setup_chuk_sessions_storage is not None,
238
+ "infinite_context": InfiniteConversationManager is not None,
239
+ "tool_processor": SessionAwareToolProcessor is not None,
240
+ "prompt_builder": build_prompt_from_session is not None,
241
+ "token_tracking": TokenUsage is not None,
242
+ "exceptions": True, # Always available (fallbacks defined)
243
+ }
244
+
245
+
246
+ # Main exports - prioritize what works
247
+ __all__ = []
248
+
249
+ # Always available
250
+ __all__.extend([
251
+ "__version__",
252
+ "get_version",
253
+ "is_available",
254
+ "configure_storage",
255
+ ])
256
+
257
+ # Add exception classes (always available)
258
+ __all__.extend([
259
+ "SessionManagerError",
260
+ "SessionNotFound",
261
+ "SessionAlreadyExists",
262
+ "InvalidSessionOperation",
263
+ "TokenLimitExceeded",
264
+ "StorageError",
265
+ "ToolProcessingError",
266
+ ])
267
+
268
+ # Add available components conditionally
269
+ if EventSource is not None:
270
+ __all__.append("EventSource")
271
+ if EventType is not None:
272
+ __all__.append("EventType")
273
+
274
+ if setup_chuk_sessions_storage is not None:
275
+ __all__.append("setup_chuk_sessions_storage")
276
+
277
+ # Simple API (most important for users)
278
+ if SessionManager is not None:
279
+ __all__.extend([
280
+ "SessionManager",
281
+ "track_conversation",
282
+ "track_llm_call",
283
+ "quick_conversation",
284
+ "track_infinite_conversation",
285
+ ])
286
+
287
+ # Core models
288
+ if Session is not None:
289
+ __all__.append("Session")
290
+ if SessionEvent is not None:
291
+ __all__.append("SessionEvent")
292
+ if SessionMetadata is not None:
293
+ __all__.append("SessionMetadata")
294
+ if SessionRun is not None:
295
+ __all__.extend(["SessionRun", "RunStatus"])
296
+ if TokenUsage is not None:
297
+ __all__.append("TokenUsage")
298
+ if TokenSummary is not None:
299
+ __all__.append("TokenSummary")
300
+
301
+ # Advanced components
302
+ if InfiniteConversationManager is not None:
303
+ __all__.append("InfiniteConversationManager")
304
+ if SessionAwareToolProcessor is not None:
305
+ __all__.append("SessionAwareToolProcessor")
306
+ if build_prompt_from_session is not None:
307
+ __all__.extend(["build_prompt_from_session", "PromptStrategy"])
308
+
309
+ # Auto-setup on import (with error handling)
310
+ try:
311
+ _auto_setup_storage()
312
+ except Exception as e:
313
+ logger.debug(f"Auto-setup failed (this is normal on first import): {e}")
314
+
315
+ # Log successful import
316
+ available = is_available()
317
+ available_count = sum(available.values())
318
+ total_count = len(available)
319
+ logger.debug(f"CHUK AI Session Manager imported successfully "
320
+ f"({available_count}/{total_count} components available)")
321
+
322
+ # Show warning if core components are missing
323
+ if not available.get("simple_api", False):
324
+ logger.warning(
325
+ "Simple API not available - you may need to install missing dependencies. "
326
+ "Check the logs above for specific import errors."
327
+ )
328
+ elif available_count == total_count:
329
+ logger.debug("All components loaded successfully")