File size: 2,085 Bytes
883d885
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from datetime import datetime
from bson.objectid import ObjectId

def load_user_sessions(username, sessions_collection, last_session_id=None):
    """
    Load sessions for a user. Restore last active session if possible.
    Returns: (sessions_list, current_session_or_None, messages_list)
    """
    if sessions_collection is None:
        return [], None, []

    sessions = list(sessions_collection.find({"username": username}).sort("timestamp", -1))
    current_session = None
    messages = []

    if sessions:
        if last_session_id:
            try:
                last = sessions_collection.find_one({"_id": ObjectId(last_session_id)})
            except Exception:
                last = None
            if last:
                current_session = last
                # messages will be loaded by caller or by calling load_chat_history
        if not current_session:
            current_session = sessions[0]

    # Note: do NOT load messages here unless you also have messages_collection.
    # Return sessions and current_session; caller can call load_chat_history with messages_collection.
    return sessions, current_session, messages


def load_chat_history(session_id, messages_collection):
    """
    Loads messages for a given chat session from messages_collection.
    """
    if messages_collection is None:
        return []
    try:
        msgs = list(messages_collection.find({"session_id": session_id}).sort("timestamp", 1))
        return [{"role": m.get("role", "assistant"), "content": m.get("content", "")} for m in msgs]
    except Exception:
        return []


def save_message(session_id, role, content, messages_collection):
    """
    Save a message to the chat history in messages_collection.
    """
    if messages_collection is None:
        return None
    try:
        doc = {
            "session_id": session_id,
            "role": role,
            "content": content,
            "timestamp": datetime.utcnow(),
        }
        return messages_collection.insert_one(doc).inserted_id
    except Exception:
        return None