| |
|
| | 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
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| | |