|
|
| 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 []
|
|
|
|
|
| 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
|
|
|
|
|
| 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,
|
| 'metadata': metadata or {}
|
| }
|
|
|
| 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |