chuk-ai-session-manager 0.4.1__py3-none-any.whl → 0.5__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.
@@ -28,20 +28,9 @@ Infinite Context Example:
28
28
  await sm.user_says("Tell me about machine learning")
29
29
  await sm.ai_responds("Machine learning is...", model="gpt-4")
30
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
35
-
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
31
  """
42
32
 
43
33
  import logging
44
- from typing import Optional
45
34
 
46
35
  # Package version
47
36
  __version__ = "0.4"
@@ -49,164 +38,64 @@ __version__ = "0.4"
49
38
  # Set up package-level logger
50
39
  logger = logging.getLogger(__name__)
51
40
 
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
41
+ # Core enums and constants
42
+ from chuk_ai_session_manager.models.event_source import EventSource
43
+ from chuk_ai_session_manager.models.event_type import EventType
67
44
 
68
45
  # 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
85
-
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}")
46
+ from chuk_ai_session_manager.exceptions import (
47
+ SessionManagerError,
48
+ SessionNotFound,
49
+ SessionAlreadyExists,
50
+ InvalidSessionOperation,
51
+ TokenLimitExceeded,
52
+ StorageError,
53
+ ToolProcessingError
54
+ )
121
55
 
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}")
56
+ # Core models
57
+ from chuk_ai_session_manager.models.session_metadata import SessionMetadata
58
+ from chuk_ai_session_manager.models.session_run import SessionRun, RunStatus
59
+ from chuk_ai_session_manager.models.token_usage import TokenUsage, TokenSummary
60
+ from chuk_ai_session_manager.models.session_event import SessionEvent
61
+ from chuk_ai_session_manager.models.session import Session
62
+
63
+ # Storage backend
64
+ from chuk_ai_session_manager.session_storage import setup_chuk_sessions_storage
65
+
66
+ # High-level session manager
67
+ from chuk_ai_session_manager.session_manager import SessionManager
68
+
69
+ # Simple API - The main interface most users will use
70
+ from chuk_ai_session_manager.api.simple_api import (
71
+ track_conversation,
72
+ track_llm_call,
73
+ quick_conversation,
74
+ track_infinite_conversation,
75
+ track_tool_use,
76
+ get_session_stats,
77
+ get_conversation_history
78
+ )
155
79
 
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}")
80
+ # Advanced components
81
+ from chuk_ai_session_manager.infinite_conversation import (
82
+ InfiniteConversationManager,
83
+ SummarizationStrategy
84
+ )
160
85
 
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}")
168
-
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
-
186
- try:
187
- # Try to get existing backend first
188
- from chuk_ai_session_manager.session_storage import get_backend
189
- get_backend() # This will trigger setup if needed
190
- logger.debug("Storage backend already configured")
191
- return True
192
- except Exception:
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
86
+ from chuk_ai_session_manager.session_aware_tool_processor import SessionAwareToolProcessor
204
87
 
88
+ from chuk_ai_session_manager.session_prompt_builder import (
89
+ build_prompt_from_session,
90
+ PromptStrategy,
91
+ truncate_prompt_to_token_limit
92
+ )
205
93
 
94
+ # Configuration functions
206
95
  def configure_storage(sandbox_id: str = "chuk-ai-session-manager",
207
96
  default_ttl_hours: int = 24) -> bool:
208
97
  """
209
- Explicitly configure the storage backend.
98
+ Configure the storage backend.
210
99
 
211
100
  Args:
212
101
  sandbox_id: CHUK Sessions sandbox ID to use
@@ -215,7 +104,16 @@ def configure_storage(sandbox_id: str = "chuk-ai-session-manager",
215
104
  Returns:
216
105
  True if configuration was successful, False otherwise
217
106
  """
218
- return _auto_setup_storage(sandbox_id, default_ttl_hours)
107
+ try:
108
+ setup_chuk_sessions_storage(
109
+ sandbox_id=sandbox_id,
110
+ default_ttl_hours=default_ttl_hours
111
+ )
112
+ logger.info(f"Storage configured with sandbox_id='{sandbox_id}'")
113
+ return True
114
+ except Exception as e:
115
+ logger.error(f"Failed to configure storage: {e}")
116
+ return False
219
117
 
220
118
 
221
119
  def get_version() -> str:
@@ -231,31 +129,32 @@ def is_available() -> dict:
231
129
  Dictionary showing availability of each component
232
130
  """
233
131
  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)
132
+ "core_enums": True,
133
+ "core_models": True,
134
+ "simple_api": True,
135
+ "storage": True,
136
+ "infinite_context": True,
137
+ "tool_processor": True,
138
+ "prompt_builder": True,
139
+ "token_tracking": True,
140
+ "exceptions": True,
141
+ "session_manager": True,
243
142
  }
244
143
 
245
144
 
246
- # Main exports - prioritize what works
247
- __all__ = []
248
-
249
- # Always available
250
- __all__.extend([
145
+ # Main exports - everything should be available
146
+ __all__ = [
147
+ # Version and utilities
251
148
  "__version__",
252
149
  "get_version",
253
150
  "is_available",
254
151
  "configure_storage",
255
- ])
256
-
257
- # Add exception classes (always available)
258
- __all__.extend([
152
+
153
+ # Core enums
154
+ "EventSource",
155
+ "EventType",
156
+
157
+ # Exception classes
259
158
  "SessionManagerError",
260
159
  "SessionNotFound",
261
160
  "SessionAlreadyExists",
@@ -263,67 +162,44 @@ __all__.extend([
263
162
  "TokenLimitExceeded",
264
163
  "StorageError",
265
164
  "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)
165
+
166
+ # Core models
167
+ "Session",
168
+ "SessionEvent",
169
+ "SessionMetadata",
170
+ "SessionRun",
171
+ "RunStatus",
172
+ "TokenUsage",
173
+ "TokenSummary",
174
+
175
+ # Storage
176
+ "setup_chuk_sessions_storage",
177
+
178
+ # Primary interfaces - what most users will use
179
+ "SessionManager",
180
+ "track_conversation",
181
+ "track_llm_call",
182
+ "quick_conversation",
183
+ "track_infinite_conversation",
184
+ "track_tool_use",
185
+ "get_session_stats",
186
+ "get_conversation_history",
187
+
188
+ # Advanced components
189
+ "InfiniteConversationManager",
190
+ "SummarizationStrategy",
191
+ "SessionAwareToolProcessor",
192
+ "build_prompt_from_session",
193
+ "PromptStrategy",
194
+ "truncate_prompt_to_token_limit",
195
+ ]
196
+
197
+ # Auto-setup storage on import
310
198
  try:
311
- _auto_setup_storage()
199
+ configure_storage()
200
+ logger.debug("Auto-configured storage backend")
312
201
  except Exception as e:
313
- logger.debug(f"Auto-setup failed (this is normal on first import): {e}")
202
+ logger.debug(f"Auto-setup skipped: {e}")
314
203
 
315
204
  # 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")
205
+ logger.debug(f"CHUK AI Session Manager v{__version__} imported successfully")