File size: 6,865 Bytes
52163c9
 
3b70165
8b38f52
52163c9
885db09
8ce1b9a
885db09
 
 
 
 
 
 
 
8ce1b9a
885db09
8ce1b9a
885db09
8ce1b9a
3b70165
8687490
3b70165
ff864f2
6bfe703
8e75705
f2cc93d
 
3b70165
8ce1b9a
7dfad7a
9028e7c
 
 
 
8b38f52
52163c9
8b38f52
749c2a2
 
8b38f52
ff864f2
52163c9
ff864f2
 
 
 
 
52163c9
ff864f2
a92e517
 
5163200
a92e517
 
 
 
 
 
 
 
 
b9d76a4
136e604
 
b9d76a4
136e604
 
a92e517
136e604
 
a92e517
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f090cd
8b38f52
813a290
7240873
8b993d6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7240873
61f3494
 
 
7240873
9173494
 
 
aa91d57
1e863b9
7240873
1e863b9
7240873
88aea46
a0fa3dd
7240873
a0fa3dd
1e863b9
7240873
 
 
a0fa3dd
c4c5749
a0fa3dd
7240873
1e863b9
 
a0fa3dd
8b38f52
ff864f2
9173494
ff864f2
7240873
 
ff864f2
8b38f52
7240873
8b38f52
7240873
8b38f52
7240873
8b38f52
7240873
f89a64b
7240873
f2cc93d
7240873
8b38f52
6f090cd
813a290
52163c9
813a290
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
160
161
162
163
164
print("Iniciando app.py")

# app.py
import streamlit as st
print("Importaciones completadas")

from modules.database.database import (
    initialize_database_connections, 
    initialize_cosmos_sql_connection, 
    initialize_mongodb_connection, 
    create_user, 
    create_admin_user, 
    create_student_user
)

from modules.auth.auth import authenticate_user, register_user

from modules.admin.admin_ui import admin_page

from modules.ui.ui import (
    login_register_page, 
    login_form,
    display_morphosyntax_analysis_interface, 
    display_semantic_analysis_interface,
    display_discourse_analysis_interface, 
    display_student_progress,
    display_chatbot_interface,
    display_feedback_form
)
from modules.utils.spacy_utils import load_spacy_models
import logging

# Configuración del logger
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

print("Configurando página")
st.set_page_config(page_title="AIdeaText", layout="wide", page_icon="random")
st.cache_data.clear()
st.cache_resource.clear()

# Cargar los modelos de spaCy una vez al inicio de la aplicación
print("Cargando modelos")
@st.cache_resource
def load_models():
    return load_spacy_models()

nlp_models = load_models()
print("Modelos cargados")

###################################################################################################################
def main():
    print("Entrando en main()")
    # Inicialización del estado de la sesión
    if 'initialized' not in st.session_state:
        st.session_state.clear()
        st.session_state.initialized = True
        st.session_state.logged_in = False
        st.session_state.page = 'login'
        st.session_state.username = None
        st.session_state.role = None

    # Inicialización de las conexiones a la base de datos
    if 'db_initialized' not in st.session_state:
        st.session_state.db_initialized = initialize_database_connections()

    # Mostrar advertencias si las conexiones fallaron
    if not st.session_state.db_initialized.get("mongodb", False):
        st.warning("La conexión a la base de datos MongoDB no está disponible. Algunas funciones pueden no estar operativas.")
    if not st.session_state.db_initialized.get("cosmos_sql", False):
        st.warning("La conexión a Cosmos DB SQL API no está disponible. Algunas funciones pueden no estar operativas.")

    print(f"Página actual: {st.session_state.page}")
    print(f"Rol del usuario: {st.session_state.role}")

    # Lógica de navegación
    if st.session_state.page == 'login':
        login_register_page()
    elif st.session_state.page == 'admin':
        print("Intentando mostrar página de admin")
        admin_page()
    elif st.session_state.page == 'user':
        logged_in_interface()
    else:
        print(f"Página no reconocida: {st.session_state.page}")

    print(f"Estado final de la sesión: {st.session_state}")

###################################################################################################################
def logged_in_interface():
    languages = {'Español': 'es', 'English': 'en', 'Français': 'fr'}
    
    translations = {
        'es': {
            'welcome': "Bienvenido",
            'select_language': "Selecciona el idioma del texto que analizarás",
            'logout': "Cerrar Sesión",
            'tabs': ["Análisis morfosintáctico", "Análisis semántico", "Análisis del discurso", "Chat con Llama2", "Mi Progreso", "Formulario de Retroalimentación"]
        },
        'en': {
            'welcome': "Welcome",
            'select_language': "Select the language of the text you will analyze",
            'logout': "Log Out",
            'tabs': ["Morphosyntactic Analysis", "Semantic Analysis", "Discourse Analysis", "Chat with Llama2", "My Progress", "Feedback Form"]
        },
        'fr': {
            'welcome': "Bienvenue",
            'select_language': "Sélectionnez la langue du texte que vous allez analyser",
            'logout': "Déconnexion",
            'tabs': ["Analyse morphosyntaxique", "Analyse sémantique", "Analyse du discours", "Chat avec Llama2", "Mon Progrès", "Formulaire de Rétroaction"]
        }
    }
    
    # Inicializar el idioma si no está establecido
    if 'current_lang' not in st.session_state:
        st.session_state.current_lang = 'es'  # Idioma por defecto

    # Crear un contenedor para la barra superior
    with st.container():
        # Usar más columnas para un mejor control del espacio
        col1, col2, col3, col4, col5 = st.columns([1, 1, 0.8, 1, 1])
        with col1:
            st.markdown(f"<h3 style='margin-bottom: 0;'>{translations[st.session_state.current_lang]['welcome']}, {st.session_state.username}</h3>", unsafe_allow_html=True)
        with col3:
            st.markdown(f"<p style='font-size: 1.2rem; margin-bottom: 0; padding-top: 15px;'>{translations[st.session_state.current_lang]['select_language']}</p>", unsafe_allow_html=True)
        with col4:
            st.markdown("<div style='padding-top: 15px;'>", unsafe_allow_html=True)
            selected_lang = st.selectbox("", list(languages.keys()), key="language_selector", label_visibility="collapsed", index=list(languages.values()).index(st.session_state.current_lang))
            st.markdown("</div>", unsafe_allow_html=True)
            lang_code = languages[selected_lang]
            if st.session_state.current_lang != lang_code:
                st.session_state.current_lang = lang_code
                st.experimental_rerun()
            
        with col5:
            st.markdown("<div style='padding-top: 15px;'>", unsafe_allow_html=True)
            if st.button(translations[st.session_state.current_lang]['logout'], key="logout_button"):
                st.session_state.logged_in = False
                st.experimental_rerun()
            st.markdown("</div>", unsafe_allow_html=True)

    # Añadir una línea divisoria
    st.markdown("---")

    # Usar los nombres de tabs traducidos
    tab1, tab2, tab3, tab4, tab5, tab6 = st.tabs(translations[st.session_state.current_lang]['tabs'])

    with tab1:
        display_morphosyntax_analysis_interface(nlp_models, st.session_state.current_lang)
    with tab2:
        display_semantic_analysis_interface(nlp_models, st.session_state.current_lang)
    with tab3:
        display_discourse_analysis_interface(nlp_models, st.session_state.current_lang)
    with tab4:
        display_chatbot_interface(st.session_state.current_lang)
    with tab5:
        display_student_progress(st.session_state.username, st.session_state.current_lang)
    with tab6:
        display_feedback_form(st.session_state.current_lang)

###################################################################################################################
if __name__ == "__main__":
    print("Llamando a main()")
    main()