chuk-ai-session-manager 0.2.1__py3-none-any.whl → 0.3__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.
- chuk_ai_session_manager/__init__.py +56 -344
- chuk_ai_session_manager/api/simple_api.py +329 -198
- chuk_ai_session_manager-0.3.dist-info/METADATA +391 -0
- {chuk_ai_session_manager-0.2.1.dist-info → chuk_ai_session_manager-0.3.dist-info}/RECORD +6 -6
- chuk_ai_session_manager-0.2.1.dist-info/METADATA +0 -501
- {chuk_ai_session_manager-0.2.1.dist-info → chuk_ai_session_manager-0.3.dist-info}/WHEEL +0 -0
- {chuk_ai_session_manager-0.2.1.dist-info → chuk_ai_session_manager-0.3.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: chuk-ai-session-manager
|
|
3
|
+
Version: 0.3
|
|
4
|
+
Summary: Session manager for AI applications
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: chuk-sessions>=0.3
|
|
8
|
+
Requires-Dist: chuk-tool-processor>=0.4.1
|
|
9
|
+
Requires-Dist: pydantic>=2.11.3
|
|
10
|
+
Provides-Extra: tiktoken
|
|
11
|
+
Requires-Dist: tiktoken>=0.9.0; extra == "tiktoken"
|
|
12
|
+
Provides-Extra: redis
|
|
13
|
+
Requires-Dist: redis>=4.0.0; extra == "redis"
|
|
14
|
+
Provides-Extra: dev
|
|
15
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
16
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
17
|
+
Requires-Dist: redis>=4.0.0; extra == "dev"
|
|
18
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
19
|
+
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
20
|
+
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
21
|
+
Provides-Extra: full
|
|
22
|
+
|
|
23
|
+
# chuk-ai-session-manager
|
|
24
|
+
|
|
25
|
+
[](https://www.python.org/downloads/)
|
|
26
|
+
[](https://opensource.org/licenses/MIT)
|
|
27
|
+
|
|
28
|
+
**The easiest way to add conversation tracking to any AI application.**
|
|
29
|
+
|
|
30
|
+
Track conversations, monitor costs, and manage infinite context with just 3 lines of code. Built for production, designed for simplicity.
|
|
31
|
+
|
|
32
|
+
## 🚀 30-Second Start
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
uv add chuk-ai-session-manager
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from chuk_ai_session_manager import track_conversation
|
|
40
|
+
|
|
41
|
+
# Track any AI conversation in one line
|
|
42
|
+
await track_conversation("Hello!", "Hi there! How can I help?")
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
That's it! 🎉 Your conversation is now tracked with full observability.
|
|
46
|
+
|
|
47
|
+
## ✨ Why Choose CHUK?
|
|
48
|
+
|
|
49
|
+
- **🔥 Stupidly Simple**: 3 lines to track any conversation
|
|
50
|
+
- **💰 Cost Smart**: Automatic token counting and cost tracking
|
|
51
|
+
- **♾️ Infinite Context**: No more "conversation too long" errors
|
|
52
|
+
- **🔧 Any LLM**: Works with OpenAI, Anthropic, local models, anything
|
|
53
|
+
- **📊 Full Observability**: See exactly what's happening in your AI app
|
|
54
|
+
- **🚀 Production Ready**: Used in real applications, not just demos
|
|
55
|
+
|
|
56
|
+
## 🎯 Perfect For
|
|
57
|
+
|
|
58
|
+
- **Building chatbots** that remember conversations
|
|
59
|
+
- **Tracking LLM costs** across your entire application
|
|
60
|
+
- **Managing long conversations** without hitting token limits
|
|
61
|
+
- **Debugging AI applications** with complete audit trails
|
|
62
|
+
- **Production AI systems** that need reliable session management
|
|
63
|
+
|
|
64
|
+
## 📱 Quick Examples
|
|
65
|
+
|
|
66
|
+
### Track Any Conversation
|
|
67
|
+
```python
|
|
68
|
+
from chuk_ai_session_manager import track_conversation
|
|
69
|
+
|
|
70
|
+
# Works with any LLM response
|
|
71
|
+
session_id = await track_conversation(
|
|
72
|
+
user_message="What's the weather like?",
|
|
73
|
+
ai_response="It's sunny and 75°F in your area.",
|
|
74
|
+
model="gpt-4",
|
|
75
|
+
provider="openai"
|
|
76
|
+
)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Persistent Conversations
|
|
80
|
+
```python
|
|
81
|
+
from chuk_ai_session_manager import SessionManager
|
|
82
|
+
|
|
83
|
+
# Create a conversation that remembers context
|
|
84
|
+
sm = SessionManager()
|
|
85
|
+
|
|
86
|
+
await sm.user_says("My name is Alice")
|
|
87
|
+
await sm.ai_responds("Nice to meet you, Alice!")
|
|
88
|
+
|
|
89
|
+
await sm.user_says("What's my name?")
|
|
90
|
+
await sm.ai_responds("Your name is Alice!")
|
|
91
|
+
|
|
92
|
+
# Get conversation stats
|
|
93
|
+
stats = await sm.get_stats()
|
|
94
|
+
print(f"Cost: ${stats['estimated_cost']:.6f}")
|
|
95
|
+
print(f"Tokens: {stats['total_tokens']}")
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Infinite Context (Never Run Out of Space)
|
|
99
|
+
```python
|
|
100
|
+
# Automatically handles conversations of any length
|
|
101
|
+
sm = SessionManager(
|
|
102
|
+
infinite_context=True, # 🔥 Magic happens here
|
|
103
|
+
token_threshold=4000 # When to create new segment
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# Keep chatting forever - context is preserved automatically
|
|
107
|
+
for i in range(100): # This would normally hit token limits
|
|
108
|
+
await sm.user_says(f"Question {i}: Tell me about AI")
|
|
109
|
+
await sm.ai_responds("AI is fascinating...")
|
|
110
|
+
|
|
111
|
+
# Still works! Automatic summarization keeps context alive
|
|
112
|
+
conversation = await sm.get_conversation()
|
|
113
|
+
print(f"Full conversation: {len(conversation)} exchanges")
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Cost Tracking (Know What You're Spending)
|
|
117
|
+
```python
|
|
118
|
+
# Automatic cost monitoring across all interactions
|
|
119
|
+
sm = SessionManager()
|
|
120
|
+
|
|
121
|
+
await sm.user_says("Write a long story about dragons")
|
|
122
|
+
await sm.ai_responds("Once upon a time..." * 500) # Long response
|
|
123
|
+
|
|
124
|
+
stats = await sm.get_stats()
|
|
125
|
+
print(f"💰 That story cost: ${stats['estimated_cost']:.6f}")
|
|
126
|
+
print(f"📊 Used {stats['total_tokens']} tokens")
|
|
127
|
+
print(f"📈 {stats['user_messages']} user messages, {stats['ai_messages']} AI responses")
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Multi-Provider Support
|
|
131
|
+
```python
|
|
132
|
+
# Works with any LLM provider
|
|
133
|
+
import openai
|
|
134
|
+
import anthropic
|
|
135
|
+
|
|
136
|
+
sm = SessionManager()
|
|
137
|
+
|
|
138
|
+
# OpenAI
|
|
139
|
+
await sm.user_says("Hello!")
|
|
140
|
+
openai_response = await openai.chat.completions.create(...)
|
|
141
|
+
await sm.ai_responds(openai_response.choices[0].message.content, model="gpt-4", provider="openai")
|
|
142
|
+
|
|
143
|
+
# Anthropic
|
|
144
|
+
await sm.user_says("How are you?")
|
|
145
|
+
anthropic_response = await anthropic.messages.create(...)
|
|
146
|
+
await sm.ai_responds(anthropic_response.content[0].text, model="claude-3", provider="anthropic")
|
|
147
|
+
|
|
148
|
+
# See costs across all providers
|
|
149
|
+
stats = await sm.get_stats()
|
|
150
|
+
print(f"Total cost across all providers: ${stats['estimated_cost']:.6f}")
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 🛠️ Advanced Features
|
|
154
|
+
|
|
155
|
+
### Conversation Analytics
|
|
156
|
+
```python
|
|
157
|
+
# Get detailed insights into your conversations
|
|
158
|
+
conversation = await sm.get_conversation()
|
|
159
|
+
stats = await sm.get_stats()
|
|
160
|
+
|
|
161
|
+
print(f"📊 Conversation Analytics:")
|
|
162
|
+
print(f" Messages: {stats['user_messages']} user, {stats['ai_messages']} AI")
|
|
163
|
+
print(f" Average response length: {stats['avg_response_length']}")
|
|
164
|
+
print(f" Most expensive response: ${stats['max_response_cost']:.6f}")
|
|
165
|
+
print(f" Session duration: {stats['duration_minutes']:.1f} minutes")
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Tool Integration
|
|
169
|
+
```python
|
|
170
|
+
# Track tool usage alongside conversations
|
|
171
|
+
await sm.tool_used(
|
|
172
|
+
tool_name="web_search",
|
|
173
|
+
arguments={"query": "latest AI news"},
|
|
174
|
+
result={"articles": ["AI breakthrough...", "New model released..."]},
|
|
175
|
+
cost=0.001
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
stats = await sm.get_stats()
|
|
179
|
+
print(f"Tool calls: {stats['tool_calls']}")
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Session Export/Import
|
|
183
|
+
```python
|
|
184
|
+
# Export conversations for analysis
|
|
185
|
+
conversation_data = await sm.export_conversation()
|
|
186
|
+
with open('conversation.json', 'w') as f:
|
|
187
|
+
json.dump(conversation_data, f)
|
|
188
|
+
|
|
189
|
+
# Import previous conversations
|
|
190
|
+
sm = SessionManager()
|
|
191
|
+
await sm.import_conversation('conversation.json')
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## 🎨 Real-World Examples
|
|
195
|
+
|
|
196
|
+
### Customer Support Bot
|
|
197
|
+
```python
|
|
198
|
+
async def handle_support_ticket(user_message: str, ticket_id: str):
|
|
199
|
+
# Each ticket gets its own session
|
|
200
|
+
sm = SessionManager(session_id=ticket_id)
|
|
201
|
+
|
|
202
|
+
await sm.user_says(user_message)
|
|
203
|
+
|
|
204
|
+
# Your AI logic here
|
|
205
|
+
ai_response = await your_ai_model(user_message)
|
|
206
|
+
await sm.ai_responds(ai_response, model="gpt-4", provider="openai")
|
|
207
|
+
|
|
208
|
+
# Automatic cost tracking per ticket
|
|
209
|
+
stats = await sm.get_stats()
|
|
210
|
+
print(f"Ticket {ticket_id} cost: ${stats['estimated_cost']:.6f}")
|
|
211
|
+
|
|
212
|
+
return ai_response
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### AI Assistant with Memory
|
|
216
|
+
```python
|
|
217
|
+
async def ai_assistant():
|
|
218
|
+
sm = SessionManager(infinite_context=True)
|
|
219
|
+
|
|
220
|
+
while True:
|
|
221
|
+
user_input = input("You: ")
|
|
222
|
+
if user_input.lower() == 'quit':
|
|
223
|
+
break
|
|
224
|
+
|
|
225
|
+
await sm.user_says(user_input)
|
|
226
|
+
|
|
227
|
+
# Get conversation context for AI
|
|
228
|
+
conversation = await sm.get_conversation()
|
|
229
|
+
context = "\n".join([f"{turn['role']}: {turn['content']}" for turn in conversation[-5:]])
|
|
230
|
+
|
|
231
|
+
# Your AI call with context
|
|
232
|
+
ai_response = await your_ai_model(f"Context:\n{context}\n\nUser: {user_input}")
|
|
233
|
+
await sm.ai_responds(ai_response)
|
|
234
|
+
|
|
235
|
+
print(f"AI: {ai_response}")
|
|
236
|
+
|
|
237
|
+
# Show final stats
|
|
238
|
+
stats = await sm.get_stats()
|
|
239
|
+
print(f"\n💰 Total conversation cost: ${stats['estimated_cost']:.6f}")
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Multi-User Chat Application
|
|
243
|
+
```python
|
|
244
|
+
class ChatApplication:
|
|
245
|
+
def __init__(self):
|
|
246
|
+
self.user_sessions = {}
|
|
247
|
+
|
|
248
|
+
async def handle_message(self, user_id: str, message: str):
|
|
249
|
+
# Each user gets their own session
|
|
250
|
+
if user_id not in self.user_sessions:
|
|
251
|
+
self.user_sessions[user_id] = SessionManager(infinite_context=True)
|
|
252
|
+
|
|
253
|
+
sm = self.user_sessions[user_id]
|
|
254
|
+
await sm.user_says(message)
|
|
255
|
+
|
|
256
|
+
# AI processes with user's personal context
|
|
257
|
+
ai_response = await self.generate_response(sm, message)
|
|
258
|
+
await sm.ai_responds(ai_response)
|
|
259
|
+
|
|
260
|
+
return ai_response
|
|
261
|
+
|
|
262
|
+
async def get_user_stats(self, user_id: str):
|
|
263
|
+
if user_id in self.user_sessions:
|
|
264
|
+
return await self.user_sessions[user_id].get_stats()
|
|
265
|
+
return None
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## 📊 Monitoring Dashboard
|
|
269
|
+
|
|
270
|
+
```python
|
|
271
|
+
# Get comprehensive analytics across all sessions
|
|
272
|
+
from chuk_ai_session_manager import get_global_stats
|
|
273
|
+
|
|
274
|
+
stats = await get_global_stats()
|
|
275
|
+
print(f"""
|
|
276
|
+
🚀 AI Application Dashboard
|
|
277
|
+
==========================
|
|
278
|
+
Total Sessions: {stats['total_sessions']}
|
|
279
|
+
Total Messages: {stats['total_messages']}
|
|
280
|
+
Total Cost: ${stats['total_cost']:.2f}
|
|
281
|
+
Average Session Length: {stats['avg_session_length']:.1f} messages
|
|
282
|
+
Most Active Hour: {stats['peak_hour']}
|
|
283
|
+
Top Models Used: {', '.join(stats['top_models'])}
|
|
284
|
+
""")
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## 🔧 Installation Options
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
# Basic installation
|
|
291
|
+
uv add chuk-ai-session-manager
|
|
292
|
+
|
|
293
|
+
# With Redis support (for production)
|
|
294
|
+
uv add chuk-ai-session-manager[redis]
|
|
295
|
+
|
|
296
|
+
# Full installation (all features)
|
|
297
|
+
uv add chuk-ai-session-manager[full]
|
|
298
|
+
|
|
299
|
+
# Or with pip
|
|
300
|
+
pip install chuk-ai-session-manager
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## 🌟 What Makes CHUK Special?
|
|
304
|
+
|
|
305
|
+
| Feature | Other Libraries | CHUK AI Session Manager |
|
|
306
|
+
|---------|----------------|------------------------|
|
|
307
|
+
| **Setup Complexity** | Complex configuration | 3 lines of code |
|
|
308
|
+
| **Cost Tracking** | Manual calculation | Automatic across all providers |
|
|
309
|
+
| **Long Conversations** | Token limit errors | Infinite context with auto-segmentation |
|
|
310
|
+
| **Multi-Provider** | Provider-specific code | Works with any LLM |
|
|
311
|
+
| **Production Ready** | Requires additional work | Built for production |
|
|
312
|
+
| **Learning Curve** | Steep | 5 minutes to productivity |
|
|
313
|
+
|
|
314
|
+
## 🚀 Migration Guides
|
|
315
|
+
|
|
316
|
+
### From LangChain Memory
|
|
317
|
+
```python
|
|
318
|
+
# Old LangChain way
|
|
319
|
+
from langchain.memory import ConversationBufferMemory
|
|
320
|
+
memory = ConversationBufferMemory()
|
|
321
|
+
memory.save_context({"input": "Hi"}, {"output": "Hello"})
|
|
322
|
+
|
|
323
|
+
# New CHUK way (much simpler!)
|
|
324
|
+
from chuk_ai_session_manager import track_conversation
|
|
325
|
+
await track_conversation("Hi", "Hello")
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### From Manual Session Management
|
|
329
|
+
```python
|
|
330
|
+
# Old manual way
|
|
331
|
+
conversations = {}
|
|
332
|
+
def save_conversation(user_id, message, response):
|
|
333
|
+
if user_id not in conversations:
|
|
334
|
+
conversations[user_id] = []
|
|
335
|
+
conversations[user_id].append({"user": message, "ai": response})
|
|
336
|
+
|
|
337
|
+
# New CHUK way
|
|
338
|
+
from chuk_ai_session_manager import SessionManager
|
|
339
|
+
sm = SessionManager(session_id=user_id)
|
|
340
|
+
await sm.user_says(message)
|
|
341
|
+
await sm.ai_responds(response)
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
## 📖 More Examples
|
|
345
|
+
|
|
346
|
+
Check out the `/examples` directory for complete working examples:
|
|
347
|
+
|
|
348
|
+
- `simple_tracking.py` - Basic conversation tracking
|
|
349
|
+
- `openai_integration.py` - OpenAI API integration
|
|
350
|
+
- `infinite_context.py` - Handling long conversations
|
|
351
|
+
- `cost_monitoring.py` - Cost tracking and analytics
|
|
352
|
+
- `multi_provider.py` - Using multiple LLM providers
|
|
353
|
+
- `production_app.py` - Production-ready application
|
|
354
|
+
|
|
355
|
+
## 🎯 Quick Decision Guide
|
|
356
|
+
|
|
357
|
+
**Choose CHUK AI Session Manager if you want:**
|
|
358
|
+
- ✅ Simple conversation tracking with zero configuration
|
|
359
|
+
- ✅ Automatic cost monitoring across all LLM providers
|
|
360
|
+
- ✅ Infinite conversation length without token limit errors
|
|
361
|
+
- ✅ Production-ready session management out of the box
|
|
362
|
+
- ✅ Complete conversation analytics and observability
|
|
363
|
+
- ✅ Framework-agnostic solution that works with any LLM library
|
|
364
|
+
|
|
365
|
+
**Consider alternatives if you:**
|
|
366
|
+
- ❌ Only need basic in-memory conversation history
|
|
367
|
+
- ❌ Are locked into a specific framework (LangChain, etc.)
|
|
368
|
+
- ❌ Don't need cost tracking or analytics
|
|
369
|
+
- ❌ Are building simple, stateless AI applications
|
|
370
|
+
|
|
371
|
+
## 🤝 Community & Support
|
|
372
|
+
|
|
373
|
+
- 📖 **Documentation**: [Full docs with tutorials](link-to-docs)
|
|
374
|
+
- 💬 **Discord**: Join our community for help and discussions
|
|
375
|
+
- 🐛 **Issues**: Report bugs on GitHub
|
|
376
|
+
- 💡 **Feature Requests**: Suggest new features
|
|
377
|
+
- 📧 **Support**: enterprise@chuk.dev for production support
|
|
378
|
+
|
|
379
|
+
## 📝 License
|
|
380
|
+
|
|
381
|
+
MIT License - build amazing AI applications with confidence!
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
**🎉 Ready to build better AI applications?**
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
uv add chuk-ai-session-manager
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
**Get started in 30 seconds with one line of code!**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
chuk_ai_session_manager/__init__.py,sha256=
|
|
1
|
+
chuk_ai_session_manager/__init__.py,sha256=h98D5FhFE-WhkWwwRMcF5AXqThxi_SGoYImZtqDniZ0,2038
|
|
2
2
|
chuk_ai_session_manager/exceptions.py,sha256=WqrrUZuOAiUmz7tKnSnk0y222U_nV9a8LyaXLayn2fg,4420
|
|
3
3
|
chuk_ai_session_manager/infinite_conversation.py,sha256=7j3caMnsX27M5rjj4oOkqiy_2AfcupWwsAWRflnKiSo,12092
|
|
4
4
|
chuk_ai_session_manager/sample_tools.py,sha256=yZDM-ast5lv0YVHcd3GTxBMcJd7zuNkUhZPVIb06G0c,8155
|
|
@@ -6,7 +6,7 @@ chuk_ai_session_manager/session_aware_tool_processor.py,sha256=iVe3d-qfp5QGkdNrg
|
|
|
6
6
|
chuk_ai_session_manager/session_prompt_builder.py,sha256=-ZTUczYh5emToInp4TRCj9FvF4CECyn45YHYKoWzmxE,17328
|
|
7
7
|
chuk_ai_session_manager/session_storage.py,sha256=HqzYDtwx4zN5an1zJmSZc56BpyD3KjT3IWonIpmnVXQ,5790
|
|
8
8
|
chuk_ai_session_manager/api/__init__.py,sha256=Lo_BoDW2rSn0Zw-CbjahOxc6ykjjTpucxHZo5FA2Gnc,41
|
|
9
|
-
chuk_ai_session_manager/api/simple_api.py,sha256=
|
|
9
|
+
chuk_ai_session_manager/api/simple_api.py,sha256=RbHA2IAPUzIFZFvT6KpbgouAuonF-Q6GopKOeKej0rk,17795
|
|
10
10
|
chuk_ai_session_manager/models/__init__.py,sha256=H1rRuDQDRf821JPUWUn5Zgwvc5BAqcEGekkHEmX-IgE,1167
|
|
11
11
|
chuk_ai_session_manager/models/event_source.py,sha256=mn_D16sXMa6nAX-5BzssygJPz6VF24GRe-3IaH7bTnI,196
|
|
12
12
|
chuk_ai_session_manager/models/event_type.py,sha256=TPPvAz-PlXVtrwXDNVFVnhdt1yEfgDGmKDGt8ArYcTk,275
|
|
@@ -17,7 +17,7 @@ chuk_ai_session_manager/models/session_run.py,sha256=uhMM4-WSrqOUsiWQPnyakInd-fo
|
|
|
17
17
|
chuk_ai_session_manager/models/token_usage.py,sha256=pnsNDMew9ToUqkRCIz1TADnHC5aKnautdLD4trCA6Zg,11121
|
|
18
18
|
chuk_ai_session_manager/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
19
|
chuk_ai_session_manager/utils/status_display_utils.py,sha256=id4TIE0VSq3thvDd4wKIyk3kBr_bUMqrtXmOI9CD8r8,19231
|
|
20
|
-
chuk_ai_session_manager-0.
|
|
21
|
-
chuk_ai_session_manager-0.
|
|
22
|
-
chuk_ai_session_manager-0.
|
|
23
|
-
chuk_ai_session_manager-0.
|
|
20
|
+
chuk_ai_session_manager-0.3.dist-info/METADATA,sha256=1uqP6Syo-Su4OZW97WeiQnxdOmRRgKwaUekwEpacfXg,12197
|
|
21
|
+
chuk_ai_session_manager-0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
22
|
+
chuk_ai_session_manager-0.3.dist-info/top_level.txt,sha256=5RinqD0v-niHuLYePUREX4gEWTlrpgtUg0RfexVRBMk,24
|
|
23
|
+
chuk_ai_session_manager-0.3.dist-info/RECORD,,
|