File size: 5,048 Bytes
be0c7a2 |
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 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# modules/database/claude_recommendations_mongo_db.py
from datetime import datetime, timezone, timedelta
import logging
from .mongo_db import get_collection
logger = logging.getLogger(__name__)
COLLECTION_NAME = 'student_claude_recommendations'
def store_claude_recommendation(username, text, metrics, text_type, recommendations):
"""
Guarda las recomendaciones generadas por Claude AI.
Args:
username: Nombre del usuario
text: Texto analizado
metrics: M茅tricas del an谩lisis
text_type: Tipo de texto (academic_article, university_work, general_communication)
recommendations: Recomendaciones generadas por Claude
Returns:
bool: True si se guard贸 correctamente, False en caso contrario
"""
try:
# Verificar par谩metros
if not all([username, text, recommendations]):
logger.error("Faltan par谩metros requeridos para guardar recomendaciones de Claude")
return False
collection = get_collection(COLLECTION_NAME)
if collection is None:
logger.error("No se pudo obtener la colecci贸n de recomendaciones de Claude")
return False
# Crear documento
document = {
'username': username,
'timestamp': datetime.now(timezone.utc).isoformat(),
'text': text,
'metrics': metrics or {},
'text_type': text_type,
'recommendations': recommendations,
'analysis_type': 'claude_recommendation'
}
# Insertar documento
result = collection.insert_one(document)
if result.inserted_id:
logger.info(f"""
Recomendaciones de Claude guardadas:
- Usuario: {username}
- ID: {result.inserted_id}
- Tipo de texto: {text_type}
- Longitud del texto: {len(text)}
""")
# Verificar almacenamiento
storage_verified = verify_recommendation_storage(username)
if not storage_verified:
logger.warning("Verificaci贸n de almacenamiento de recomendaciones fall贸")
return True
logger.error("No se pudo insertar el documento de recomendaciones")
return False
except Exception as e:
logger.error(f"Error guardando recomendaciones de Claude: {str(e)}")
return False
def verify_recommendation_storage(username):
"""
Verifica que las recomendaciones se est谩n guardando correctamente.
Args:
username: Nombre del usuario
Returns:
bool: True si la verificaci贸n es exitosa, False en caso contrario
"""
try:
collection = get_collection(COLLECTION_NAME)
if collection is None:
logger.error("No se pudo obtener la colecci贸n para verificaci贸n de recomendaciones")
return False
# Buscar documentos recientes del usuario
timestamp_threshold = (datetime.now(timezone.utc) - timedelta(minutes=5)).isoformat()
recent_docs = collection.find({
'username': username,
'timestamp': {'$gte': timestamp_threshold}
}).sort('timestamp', -1).limit(1)
docs = list(recent_docs)
if docs:
logger.info(f"""
脷ltimo documento de recomendaciones guardado:
- ID: {docs[0]['_id']}
- Timestamp: {docs[0]['timestamp']}
- Tipo de texto: {docs[0].get('text_type', 'N/A')}
""")
return True
logger.warning(f"No se encontraron documentos recientes de recomendaciones para {username}")
return False
except Exception as e:
logger.error(f"Error verificando almacenamiento de recomendaciones: {str(e)}")
return False
def get_claude_recommendations(username, limit=10):
"""
Obtiene las recomendaciones m谩s recientes de Claude para un usuario.
Args:
username: Nombre del usuario
limit: N煤mero m谩ximo de recomendaciones a recuperar
Returns:
list: Lista de recomendaciones
"""
try:
collection = get_collection(COLLECTION_NAME)
if collection is None:
logger.error("No se pudo obtener la colecci贸n de recomendaciones")
return []
results = collection.find(
{'username': username}
).sort('timestamp', -1).limit(limit)
recommendations = list(results)
logger.info(f"Recuperadas {len(recommendations)} recomendaciones de Claude para {username}")
return recommendations
except Exception as e:
logger.error(f"Error obteniendo recomendaciones de Claude: {str(e)}")
return [] |