Spaces:
Running
Running
# AIdeaText v3 | |
# app.py | |
import logging | |
import streamlit as st | |
import sys | |
import os | |
from dotenv import load_dotenv | |
from datetime import datetime | |
load_dotenv() | |
# Configuraci贸n de la p谩gina con el logo | |
st.set_page_config( | |
page_title="AIdeaText", | |
layout="wide", | |
page_icon="./assets/img/aideaText.ico" # Opcional: un emoji mientras se carga el logo | |
) | |
# Definir rutas de los archivos | |
ASSETS_DIR = os.path.join(os.path.dirname(__file__), 'assets', 'img') | |
LOGO_PATH = os.path.join(ASSETS_DIR, 'aideaText_logo.png') | |
# Funci贸n para verificar y cargar el logo | |
def setup_logo(): | |
try: | |
if os.path.exists(LOGO_PATH): | |
# Para un logo cuadrado, usamos la misma imagen para ambos par谩metros | |
st.logo( | |
image=LOGO_PATH, | |
icon_image=LOGO_PATH, # Mismo archivo para ambos usos | |
size="medium", # "small", "medium", o "large" | |
link="https://aideatext.ai" # Opcional: URL al hacer clic | |
) | |
return True | |
else: | |
logger.warning("Logo file not found") | |
return False | |
except Exception as e: | |
logger.error(f"Error setting up logo: {str(e)}") | |
return False | |
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.utils.widget_utils import generate_unique_key | |
# Importaciones de interfaces | |
from modules.morphosyntax.morphosyntax_interface import ( | |
display_morphosyntax_interface, | |
display_morphosyntax_results | |
) | |
from modules.semantic.semantic_interface import ( | |
display_semantic_interface, | |
display_semantic_results | |
) | |
from modules.discourse.discourse_interface import ( | |
display_discourse_interface, | |
display_discourse_results | |
) | |
# Importaciones de 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.semantic_mongo_db import ( | |
store_student_semantic_result, | |
get_student_semantic_analysis | |
) | |
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 | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
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 | |
if 'initialized' not in st.session_state: | |
initialize_session_state() | |
st.session_state.initialized = True | |
# 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 estados de an谩lisis si no existen | |
if 'morphosyntax_state' not in st.session_state: | |
st.session_state.morphosyntax_state = { | |
'last_analysis': None, | |
'analysis_count': 0 | |
} | |
if 'semantic_state' not in st.session_state: | |
st.session_state.semantic_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' | |
# Prevenir reinicios innecesarios preservando el estado | |
if 'selected_tab' not in st.session_state: | |
st.session_state.selected_tab = 0 | |
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", | |
key=generate_unique_key("app", "reset_button")): | |
st.session_state.clear() | |
st.rerun() | |
if __name__ == "__main__": | |
app_main() |