File size: 3,956 Bytes
be0c7a2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c58df45
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# /modules/database/chat_mongo_db.py
from .mongo_db import insert_document, find_documents, get_collection
from datetime import datetime, timezone
import logging

logger = logging.getLogger(__name__)
COLLECTION_NAME = 'chat_history-v3'

def get_chat_history(username: str, analysis_type: str = 'sidebar', limit: int = None) -> list:
    """

    Recupera el historial del chat.

    

    Args:

        username: Nombre del usuario

        analysis_type: Tipo de an谩lisis ('sidebar' por defecto)

        limit: L铆mite de conversaciones a recuperar

        

    Returns:

        list: Lista de conversaciones con formato

    """
    try:
        query = {
            "username": username,
            "analysis_type": analysis_type
        }
        
        collection = get_collection(COLLECTION_NAME)
        if collection is None:
            logger.error("No se pudo obtener la colecci贸n de chat")
            return []
            
        # Obtener y formatear conversaciones
        cursor = collection.find(query).sort("timestamp", -1)
        if limit:
            cursor = cursor.limit(limit)
            
        conversations = []
        for chat in cursor:
            try:
                formatted_chat = {
                    'timestamp': chat['timestamp'],
                    'messages': [
                        {
                            'role': msg.get('role', 'unknown'),
                            'content': msg.get('content', '')
                        }
                        for msg in chat.get('messages', [])
                    ]
                }
                conversations.append(formatted_chat)
            except Exception as e:
                logger.error(f"Error formateando chat: {str(e)}")
                continue
                
        return conversations
        
    except Exception as e:
        logger.error(f"Error al recuperar historial de chat: {str(e)}")
        return []

def store_chat_history(username: str, messages: list, analysis_type: str = 'sidebar') -> bool:
    """

    Guarda el historial del chat.

    

    Args:

        username: Nombre del usuario

        messages: Lista de mensajes a guardar

        analysis_type: Tipo de an谩lisis

    

    Returns:

        bool: True si se guard贸 correctamente

    """
    try:
        collection = get_collection(COLLECTION_NAME)
        if collection is None:
            logger.error("No se pudo obtener la colecci贸n de chat")
            return False
            
        # Formatear mensajes antes de guardar
        formatted_messages = [
            {
                'role': msg.get('role', 'unknown'),
                'content': msg.get('content', ''),
                'timestamp': datetime.now(timezone.utc).isoformat()
            }
            for msg in messages
        ]
        
        chat_document = {
            'username': username,
            'timestamp': datetime.now(timezone.utc).isoformat(),
            'messages': formatted_messages,
            'analysis_type': analysis_type
        }
        
        result = collection.insert_one(chat_document)
        if result.inserted_id:
            logger.info(f"Historial de chat guardado con ID: {result.inserted_id} para el usuario: {username}")
            return True
            
        logger.error("No se pudo insertar el documento")
        return False
        
    except Exception as e:
        logger.error(f"Error al guardar historial de chat: {str(e)}")
        return False
        
        
        #def get_chat_history(username, analysis_type=None, limit=10):
#    query = {"username": username}
#    if analysis_type:
#        query["analysis_type"] = analysis_type

#    return find_documents(COLLECTION_NAME, query, sort=[("timestamp", -1)], limit=limit)

# Agregar funciones para actualizar y eliminar chat si es necesario