#app.py de v3 #app.py import logging import streamlit as st import sys import os from dotenv import load_dotenv from datetime import datetime #def setup_logging(): # log_dir = 'logs' # if not os.path.exists(log_dir): # os.makedirs(log_dir) # current_time = datetime.now().strftime("%Y%m%d_%H%M%S") # log_filename = f'{log_dir}/app_log_{current_time}.txt' # logging.basicConfig( # level=logging.DEBUG, # format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # filename=log_filename, # filemode='w' # ) # console = logging.StreamHandler() # console.setLevel(logging.INFO) # formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') # console.setFormatter(formatter) # logging.getLogger('').addHandler(console) # logging.info(f"Logging iniciado. Archivo de log: {log_filename}") #setup_logging() load_dotenv() st.set_page_config(page_title="AIdeaText", layout="wide", page_icon="random") sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) #########IMPORTACIONES LOCALES####################################### from translations import get_translations from session_state import initialize_session_state from modules.ui.ui import main as ui_main from modules.utils.spacy_utils import load_spacy_models from modules.morphosyntax.morphosyntax_interface import ( display_morphosyntax_interface, display_morphosyntax_results ) from modules.semantic.semantic_interface import ( display_semantic_interface, display_semantic_results ) ###Importaciones de la base de datos### from modules.database.database_init import ( initialize_database_connections ) from modules.database.sql_db import ( create_student_user, get_student_user, update_student_user, delete_student_user, store_application_request, store_student_feedback ) from modules.database.mongo_db import ( get_collection, insert_document, find_documents, update_document, delete_document ) from modules.database.morphosintax_mongo_db import ( store_student_morphosyntax_result, get_student_morphosyntax_analysis ) from modules.database.chat_db import ( store_chat_history, get_chat_history ) from modules.studentact.student_activities_v2 import ( display_student_progress ) from modules.auth.auth import ( authenticate_student, register_student, update_student_info, delete_student ) from modules.admin.admin_ui import admin_page from modules.chatbot.chatbot import ( initialize_chatbot, process_chat_input ) print("Configurando página") # st.cache_data.clear() # st.cache_resource.clear() logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) @st.cache_resource(show_spinner=False) def initialize_nlp_models(): logger.info("Cargando modelos de spaCy") models = load_spacy_models() logger.info("Modelos de spaCy cargados exitosamente") return models def app_main(): try: logger.info("Entrando en app_main()") # Inicializar el estado de la sesión initialize_session_state() # Inicializar conexiones a bases de datos si no se ha hecho if 'db_initialized' not in st.session_state: st.session_state.db_initialized = initialize_database_connections() # Cargar modelos NLP si no se ha hecho if 'nlp_models' not in st.session_state: logger.info("Inicializando modelos NLP en la sesión") st.session_state.nlp_models = initialize_nlp_models() logger.info("Modelos NLP inicializados y almacenados en la sesión") # Inicializar el estado del análisis morfosintáctico si no existe if 'morphosyntax_state' not in st.session_state: st.session_state.morphosyntax_state = { 'last_analysis': None, 'analysis_count': 0 } # Configurar la página inicial si no está configurada if 'page' not in st.session_state: st.session_state.page = 'login' logger.info(f"Página actual: {st.session_state.page}") logger.info(f"Rol del usuario: {st.session_state.role}") # Dirigir el flujo a la interfaz de usuario principal logger.info(f"Llamando a ui_main() desde app_main()") ui_main() except Exception as e: logger.error(f"Error en app_main: {str(e)}", exc_info=True) st.error("Se ha producido un error en la aplicación. Por favor, inténtelo de nuevo más tarde.") if st.button("Reiniciar aplicación"): st.session_state.clear() # Limpiar el estado antes de reiniciar st.rerun() if __name__ == "__main__": print("Llamando a app_main()") app_main()