Spaces:
Sleeping
Sleeping
File size: 2,829 Bytes
0583f91 b9d5c80 0583f91 b9d5c80 0583f91 b9d5c80 0583f91 b9d5c80 0583f91 b9d5c80 0583f91 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
import json
import os
import uuid
from datetime import datetime
import logging
from hf_storage import HFStorageManager
logger = logging.getLogger(__name__)
class ChatManager:
def __init__(self, history_file='chat_history.json'):
self.history_file = history_file
self.storage = HFStorageManager()
def _load_history(self):
data = self.storage.load_file(self.history_file)
if data is None:
return {}
if isinstance(data, dict):
return data
return {}
def _save_history(self, history):
self.storage.save_file(self.history_file, history)
def get_student_history(self, enrollment_no):
history = self._load_history()
# Return list of sessions, sorted by timestamp (newest first)
sessions = history.get(str(enrollment_no), [])
sessions.sort(key=lambda x: x.get('timestamp', ''), reverse=True)
return sessions
def create_session(self, enrollment_no, first_message):
history = self._load_history()
enrollment_no = str(enrollment_no)
if enrollment_no not in history:
history[enrollment_no] = []
# Generate title from first few words of the message
title = ' '.join(first_message.split()[:5]) + '...'
if len(title) > 50:
title = title[:47] + '...'
session_id = str(uuid.uuid4())
timestamp = datetime.now().isoformat()
new_session = {
'id': session_id,
'title': title,
'timestamp': timestamp,
'messages': []
}
history[enrollment_no].append(new_session)
self._save_history(history)
return new_session
def add_message(self, enrollment_no, session_id, sender, text):
history = self._load_history()
enrollment_no = str(enrollment_no)
if enrollment_no not in history:
return None
for session in history[enrollment_no]:
if session['id'] == session_id:
message = {
'sender': sender,
'text': text,
'timestamp': datetime.now().isoformat()
}
session['messages'].append(message)
# Update session timestamp to bring it to top
session['timestamp'] = datetime.now().isoformat()
self._save_history(history)
return message
return None
def get_session(self, enrollment_no, session_id):
history = self._load_history()
enrollment_no = str(enrollment_no)
if enrollment_no in history:
for session in history[enrollment_no]:
if session['id'] == session_id:
return session
return None
|