v3 / app.py
AIdeaText's picture
Update app.py
84bb5c9 verified
raw
history blame
6.03 kB
# AIdeaText v3
# app.py
import logging
import streamlit as st
import sys
import os
from dotenv import load_dotenv
from datetime import datetime
from PIL import Image
# Configuración básica
load_dotenv()
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Definir rutas de archivos de imagen
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
ASSETS_DIR = os.path.join(ROOT_DIR, 'assets', 'img')
LOGO_PATH = os.path.join(ASSETS_DIR, 'aideaText_logo.png')
ICON_PATH = os.path.join(ASSETS_DIR, 'aideaText.ico')
def load_assets():
"""
Carga los archivos de imágenes necesarios
"""
try:
# Cargar ícono
if os.path.exists(ICON_PATH):
icon = Image.open(ICON_PATH)
else:
icon = "🧠" # Emoji por defecto
logger.warning("Archivo de ícono no encontrado")
return icon
except Exception as e:
logger.error(f"Error cargando assets: {str(e)}")
return "🧠"
# Cargar ícono antes de la configuración de la página
page_icon = load_assets()
# Configuración de la página
st.set_page_config(
page_title="AIdeaText",
layout="wide",
page_icon=page_icon,
initial_sidebar_state="expanded"
)
# Configurar el logo
def setup_logo():
"""
Configura el logo en la interfaz
"""
try:
if os.path.exists(LOGO_PATH):
st.logo(
image=LOGO_PATH,
icon_image=LOGO_PATH,
size="medium",
link="https://aideatext.ai"
)
return True
else:
logger.warning("Archivo de logo no encontrado")
return False
except Exception as e:
logger.error(f"Error configurando 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__)
@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
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()