Spaces:
Runtime error
Runtime error
File size: 5,579 Bytes
9246929 8b8a5a5 6f40e23 752eafd 716f72e 8b8a5a5 a61bbd6 8b8a5a5 |
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 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
import json
from datetime import datetime, timedelta
from typing import Dict, List, Optional
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class StudyMaterialGenerator:
def __init__(self, db_connection):
self.db_connection = db_connection
def generate_daily_questions(self, user_id: str, num_questions: int = 10) -> List[Dict]:
"""Gera questões diárias baseadas no perfil do usuário"""
try:
conn = self.db.get_connection()
cursor = conn.cursor()
# Busca áreas fracas do usuário
user_profile = self.db.get_user_profile(user_id)
weak_areas = user_profile.get('weak_areas', []) if user_profile else []
# Prioriza questões das áreas fracas
query = '''
SELECT * FROM previous_questions
WHERE area IN (?)
ORDER BY RANDOM()
LIMIT ?
'''
cursor.execute(query, (','.join(weak_areas), num_questions))
questions = cursor.fetchall()
return [dict(q) for q in questions]
except Exception as e:
logger.error(f"Erro ao gerar questões: {e}")
return []
def generate_materials(self, user_id, topic, hours) -> Dict:
"""Gera material de estudo para um tópico específico"""
try:
conn = self.db.get_connection()
cursor = conn.cursor()
# Busca casos clínicos relacionados
cursor.execute('''
SELECT * FROM clinical_cases
WHERE area = ?
ORDER BY RANDOM()
LIMIT 3
''', (topic,))
cases = cursor.fetchall()
return {
'topic': topic,
'clinical_cases': [dict(case) for case in cases],
'key_points': self._generate_key_points(topic),
'references': self._get_references(topic)
}
except Exception as e:
logger.error(f"Erro ao gerar material: {e}")
return {}
def _generate_key_points(self, topic: str) -> List[str]:
"""Gera pontos-chave para um tópico"""
# Implementar lógica para extrair pontos-chave
return []
def _get_references(self, topic: str) -> List[str]:
"""Busca referências para um tópico"""
# Implementar lógica para buscar referências
return []
class StudyPlanGenerator:
def __init__(self, db):
self.db = db
def generate_plan(self, user_id: str, duration_days: int = 30) -> Dict:
"""Gera um plano de estudos personalizado"""
try:
# Busca perfil do usuário
user_profile = self.db.get_user_profile(user_id)
if not user_profile:
return {}
# Calcula distribuição de tempo
weak_areas = user_profile.get('weak_areas', [])
study_hours = user_profile.get('study_hours', 4)
plan = {
'user_id': user_id,
'duration_days': duration_days,
'daily_schedule': self._create_daily_schedule(study_hours, weak_areas),
'weekly_goals': self._create_weekly_goals(weak_areas),
'start_date': datetime.now().date(),
'end_date': (datetime.now() + timedelta(days=duration_days)).date()
}
# Salva o plano no banco
self._save_plan(user_id, plan)
return plan
except Exception as e:
logger.error(f"Erro ao gerar plano: {e}")
return {}
def _create_daily_schedule(self, hours: int, areas: List[str]) -> Dict:
"""Cria cronograma diário"""
schedule = {}
hours_per_area = hours / len(areas) if areas else hours
for area in areas:
schedule[area] = {
'hours': hours_per_area,
'questions_goal': int(hours_per_area * 10), # 10 questões por hora
'review_time': hours_per_area * 0.2 # 20% do tempo para revisão
}
return schedule
def _create_weekly_goals(self, areas: List[str]) -> List[Dict]:
"""Cria metas semanais"""
goals = []
for area in areas:
goals.append({
'area': area,
'questions_target': 70, # 10 questões por dia
'mock_exam_target': 1, # 1 simulado por semana
'review_sessions': 2 # 2 sessões de revisão
})
return goals
def _save_plan(self, user_id: str, plan: Dict) -> None:
"""Salva o plano no banco de dados"""
try:
conn = self.db.get_connection()
cursor = conn.cursor()
cursor.execute('''
INSERT INTO study_sessions
(user_id, start_time, end_time, topic, activity_type, notes)
VALUES (?, ?, ?, ?, ?, ?)
''', (
user_id,
datetime.now(),
datetime.now() + timedelta(days=plan['duration_days']),
'multiple',
'study_plan',
json.dumps(plan)
))
conn.commit()
except Exception as e:
logger.error(f"Erro ao salvar plano: {e}") |