Alejo760 commited on
Commit
bb919d6
·
verified ·
1 Parent(s): 10ff525

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +633 -0
app.py ADDED
@@ -0,0 +1,633 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from groq import Groq
2
+ from langchain_groq import ChatGroq
3
+ import streamlit as st
4
+ from docx import Document
5
+ from docx.shared import Pt
6
+ from docx.shared import Inches
7
+ from io import BytesIO
8
+ from langchain_huggingface.embeddings import HuggingFaceEmbeddings
9
+ from langchain.vectorstores import Chroma
10
+
11
+ # Updated initialization with model_name
12
+ embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
13
+
14
+ # Verificar que la clave de API se ha cargado
15
+ api_key= st.secrets.API_KEY
16
+ # Inicializar el cliente de Groq
17
+ client = Groq(api_key=api_key)
18
+
19
+ # Inicializar el modelo de chat
20
+ chat_groq = ChatGroq(model="llama-3.1-70b-versatile",api_key=api_key)
21
+ # Configurar la página
22
+ st.set_page_config(
23
+ page_title="Microcurriculum UdeA con IA",
24
+ page_icon="🩺",
25
+ layout="centered",
26
+ initial_sidebar_state="auto",
27
+ )
28
+
29
+ st.sidebar.image("UdeA+simplificado-01.png", width=200)
30
+ st.sidebar.title("Microcurriculum con IA")
31
+ st.sidebar.write("Entrega Diplomado Pedagogía UdeA 2024-2")
32
+ st.sidebar.write("Alejandro Hernández-Arango, MD, MSc")
33
+
34
+ st.title("PROGRAMA OFICIAL DE CURSO")
35
+ st.write("Aplica para Pregrado y Posgrado")
36
+
37
+ def mejorar_texto_con_IA(var_name, var_value, vectordb_list, nombre_curso):
38
+ context_docs = []
39
+ search=var_name+"\n"+var_value
40
+ for vectordb in vectordb_list:
41
+ docs = vectordb.similarity_search(search, k=3)
42
+ context_docs.extend([doc.page_content for doc in docs])
43
+ context = "\n".join(context_docs)
44
+ prompt = f"""Tu eres una inteligencia artificial experta en pedagogia. Tu tarea es mejorar el siguiente microcurriculum del curso {nombre_curso} texto en la sección {var_name} teniendo en cuenta el contexto proporcionado. Solo dame el texto mejorado
45
+
46
+ Contexto:
47
+ {context}
48
+
49
+ Texto:
50
+ {var_value}
51
+
52
+ Texto mejorado:"""
53
+ improved_text = chat_groq.invoke(prompt)
54
+ improved_text = improved_text.content
55
+ return improved_text, context
56
+
57
+
58
+ # Función para generar el documento
59
+ # Modifica la función 'crear_documento' para aceptar 'variables' como parámetro:
60
+ def crear_documento(nombre_curso, variables):
61
+ doc = Document()
62
+
63
+ # Insertar la imagen
64
+ doc.add_picture("UdeA+simplificado-01.png", width=Inches(2))
65
+
66
+ # Formato de Títulos
67
+ title_format = doc.add_paragraph().add_run("PROGRAMA OFICIAL DE CURSO\n(Pregrado y Posgrado)\nUNIVERSIDAD DE ANTIOQUIA")
68
+ title_format.bold = True
69
+ title_format.font.size = Pt(14)
70
+
71
+ # Información General
72
+ doc.add_paragraph("\nINFORMACIÓN GENERAL")
73
+ doc.add_paragraph(f"Nombre del curso: {nombre_curso}")
74
+ doc.add_paragraph(f"Programa académico al que pertenece: {variables.get('programa_academico', '')}")
75
+ doc.add_paragraph(f"Unidad académica: {variables.get('unidad_academica', '')}")
76
+ doc.add_paragraph(f"Programa(s) en los cuales se ofrece el curso: {variables.get('programas_ofrece', '')}")
77
+ doc.add_paragraph(f"Vigencia: {variables.get('vigencia', '')}")
78
+ doc.add_paragraph(f"Código curso: {variables.get('codigo_curso', '')}")
79
+ tipo_curso = variables.get('tipo_curso', '')
80
+ tipo_curso_otro = variables.get('tipo_curso_otro', '')
81
+ doc.add_paragraph(f"Tipo de curso: {tipo_curso if tipo_curso != 'Otro' else tipo_curso_otro}")
82
+ caracteristicas_curso = variables.get('caracteristicas_curso', [])
83
+ doc.add_paragraph(f"Características del curso: {', '.join(caracteristicas_curso)}")
84
+ modalidad = variables.get('modalidad', '')
85
+ modalidad_otra = variables.get('modalidad_otra', '')
86
+ doc.add_paragraph(f"Modalidad educativa del curso: {modalidad if modalidad != 'Otra' else modalidad_otra}")
87
+ doc.add_paragraph(f"Nombre del área, núcleo o componente: {variables.get('nombre_area', '')}")
88
+ doc.add_paragraph(f"Prerrequisitos: {variables.get('prerrequisitos', '')}")
89
+ doc.add_paragraph(f"Correquisitos: {variables.get('correquisitos', '')}")
90
+ doc.add_paragraph(f"Número de créditos académicos: {variables.get('num_creditos', '')}")
91
+ doc.add_paragraph(f"Horas totales de interacción estudiante-profesor: {variables.get('horas_interaccion', '')}")
92
+ doc.add_paragraph(f"Horas totales de trabajo independiente: {variables.get('horas_independiente', '')}")
93
+ doc.add_paragraph(f"Horas totales del curso: {variables.get('horas_totales', '')}")
94
+ doc.add_paragraph(f"Horas totales de actividades académicas teóricas: {variables.get('horas_teoricas', '')}")
95
+ doc.add_paragraph(f"Horas totales de actividades académicas prácticas: {variables.get('horas_practicas', '')}")
96
+ doc.add_paragraph(f"Horas totales de actividades académicas teórico-prácticas: {variables.get('horas_teorico_practicas', '')}")
97
+
98
+ # Relaciones con el perfil
99
+ doc.add_paragraph("\nRELACIONES CON EL PERFIL")
100
+ doc.add_paragraph(variables.get('relaciones_perfil', ''))
101
+
102
+ # Intencionalidades formativas
103
+ doc.add_paragraph("\nINTENCIONALIDADES FORMATIVAS")
104
+ doc.add_paragraph(variables.get('intencionalidades', ''))
105
+
106
+ # Aportes del curso
107
+ doc.add_paragraph("\nAPORTES DEL CURSO A LA FORMACIÓN INTEGRAL Y A LA FORMACIÓN EN INVESTIGACIÓN")
108
+ doc.add_paragraph(variables.get('aportes_formacion', ''))
109
+
110
+ # Líneas de sentido y derrotero de preguntas
111
+ doc.add_paragraph("\nLÍNEAS DE SENTIDO Y DERROTERO DE PREGUNTAS")
112
+ doc.add_paragraph(f"Líneas de sentido: {variables.get('lineas_sentido', '')}")
113
+ doc.add_paragraph(f"Derrotero de preguntas: {variables.get('derrotero_preguntas', '')}")
114
+
115
+ # Descripción de conocimientos
116
+ doc.add_paragraph("\nDESCRIPCIÓN DE LOS CONOCIMIENTOS Y/O SABERES")
117
+ doc.add_paragraph(variables.get('descripcion_conocimientos', ''))
118
+
119
+ # Metodología
120
+ doc.add_paragraph("\nMETODOLOGÍA")
121
+ doc.add_paragraph(f"Estrategias didácticas: {variables.get('estrategias_didacticas', '')}")
122
+ doc.add_paragraph(f"Metodología: {variables.get('metodologia', '')}")
123
+ doc.add_paragraph(f"Medios y recursos didácticos: {variables.get('medios_recursos', '')}")
124
+ doc.add_paragraph(f"Formas de interacción: {variables.get('formas_interaccion', '')}")
125
+ doc.add_paragraph(f"Estrategias de internacionalización: {variables.get('estrategias_internacionalizacion', '')}")
126
+ doc.add_paragraph(f"Estrategias de diversidad: {variables.get('estrategias_diversidad', '')}")
127
+
128
+ # Evaluación
129
+ doc.add_paragraph("\nEVALUACIÓN")
130
+ doc.add_paragraph(f"Concepción de evaluación y modalidades: {variables.get('concepcion_evaluacion', '')}")
131
+ doc.add_paragraph(f"Procesos de aprendizaje abordados: {variables.get('procesos_aprendizaje', '')}")
132
+ doc.add_paragraph("Momentos de evaluación y porcentajes:")
133
+ doc.add_paragraph(variables.get('momentos_evaluacion', ''))
134
+
135
+ # Bibliografía
136
+ doc.add_paragraph("\nBIBLIOGRAFÍA Y OTRAS FUENTES")
137
+ doc.add_paragraph(variables.get('bibliografia', ''))
138
+
139
+ # Comunidad académica
140
+ doc.add_paragraph("\nCOMUNIDAD ACADÉMICA QUE PARTICIPÓ EN LA ELABORACIÓN DEL MICROCURRÍCULO")
141
+ doc.add_paragraph(f"Nombres y apellidos: {variables.get('nombres_apellidos', '')}")
142
+ doc.add_paragraph(f"Unidad académica: {variables.get('unidad_academica_participantes', '')}")
143
+ doc.add_paragraph(f"Formación académica: {variables.get('formacion_academica', '')}")
144
+
145
+ # Sección de aprobación del Consejo de Unidad Académica
146
+ doc.add_paragraph("\nAPROBACIÓN DEL CONSEJO DE UNIDAD ACADÉMICA").bold = True
147
+
148
+ aprobacion_parrafo = doc.add_paragraph()
149
+ aprobacion_parrafo.add_run("Aprobado en Acta número ").bold = False
150
+ aprobacion_parrafo.add_run("_______________").underline = True
151
+ aprobacion_parrafo.add_run(" del ").bold = False
152
+ aprobacion_parrafo.add_run("_______________").underline = True
153
+
154
+ # Información del Secretario
155
+ doc.add_paragraph("\nNombre completo del Secretario del Consejo de la Unidad Académica:")
156
+ doc.add_paragraph("_________________________").underline = True # Línea para nombre del Secretario
157
+
158
+ doc.add_paragraph("Firma:")
159
+ doc.add_paragraph("_________________________").underline = True # Línea para la firma
160
+
161
+ doc.add_paragraph("Cargo:")
162
+ doc.add_paragraph("_________________________").underline = True # Línea para el cargo
163
+
164
+ # Guardar el documento en un objeto de bytes
165
+ doc_buffer = BytesIO()
166
+ doc.save(doc_buffer)
167
+ doc_buffer.seek(0)
168
+
169
+ return doc_buffer
170
+
171
+
172
+
173
+
174
+ with st.expander("INFORMACIÓN GENERAL"):
175
+ nombre_curso = st.text_input("Nombre del curso:", value=st.session_state.get('nombre_curso', ''), key='nombre_curso')
176
+ programa_academico = st.text_input("Programa académico al que pertenece:", value=st.session_state.get('programa_academico', ''), key='programa_academico')
177
+ unidad_academica = st.text_input("Unidad académica:", value=st.session_state.get('unidad_academica', ''), key='unidad_academica')
178
+ programas_ofrece = st.text_input("Programa(s) académico(s) en los cuales se ofrece el curso:", value=st.session_state.get('programas_ofrece', ''), key='programas_ofrece')
179
+ vigencia = st.text_input("Vigencia (Periodo académico o Cohorte):", value=st.session_state.get('vigencia', ''), key='vigencia')
180
+ codigo_curso = st.text_input("Código curso (en MARES):", value=st.session_state.get('codigo_curso', ''), key='codigo_curso')
181
+
182
+
183
+ tipo_curso_options = ["Obligatorio", "Electivo", "Otro"]
184
+ tipo_curso_index = tipo_curso_options.index(st.session_state.get('tipo_curso', 'Obligatorio'))
185
+ tipo_curso = st.selectbox("Tipo de curso:", tipo_curso_options, index=tipo_curso_index, key='tipo_curso')
186
+ if tipo_curso == "Otro":
187
+ tipo_curso_otro = st.text_input("En caso de elegir 'Otro', indique cuál:", value=st.session_state.get('tipo_curso_otro', ''), key='tipo_curso_otro')
188
+ else:
189
+ tipo_curso_otro = ''
190
+
191
+ caracteristicas_curso = st.multiselect(
192
+ "Características del curso:",
193
+ ["Validable", "Habilitable", "Clasificable", "Evaluación de suficiencia (posgrado)"],
194
+ default=st.session_state.get('caracteristicas_curso', []),
195
+ key='caracteristicas_curso'
196
+ )
197
+
198
+ modalidad_options = ["Presencial", "Virtual", "Mixta", "Otra"]
199
+ modalidad_index = modalidad_options.index(st.session_state.get('modalidad', 'Presencial'))
200
+ modalidad = st.selectbox("Modalidad educativa del curso:", modalidad_options, index=modalidad_index, key='modalidad')
201
+ if modalidad == "Otra":
202
+ modalidad_otra = st.text_input("En caso de elegir 'Otra', indique cuál:", value=st.session_state.get('modalidad_otra', ''), key='modalidad_otra')
203
+ else:
204
+ modalidad_otra = ''
205
+
206
+ nombre_area = st.text_input("Nombre del área, núcleo o componente de la organización curricular a la que pertenece el curso:", value=st.session_state.get('nombre_area', ''), key='nombre_area')
207
+
208
+ prerrequisitos = st.text_area("Prerrequisitos (con nombre y código en MARES):", value=st.session_state.get('prerrequisitos', ''), key='prerrequisitos')
209
+ correquisitos = st.text_area("Correquisitos (con nombre y código en MARES):", value=st.session_state.get('correquisitos', ''), key='correquisitos')
210
+
211
+ num_creditos = st.number_input("Número de créditos académicos (Acuerdo Académico 576 de marzo de 2021):", min_value=0, step=1, value=st.session_state.get('num_creditos', 0), key='num_creditos')
212
+ horas_interaccion = st.number_input("Horas totales de interacción estudiante-profesor:", min_value=0, step=1, value=st.session_state.get('horas_interaccion', 0), key='horas_interaccion')
213
+ horas_independiente = st.number_input("Horas totales de trabajo independiente:", min_value=0, step=1, value=st.session_state.get('horas_independiente', 0), key='horas_independiente')
214
+ horas_totales = st.number_input("Horas totales del curso (suma de las horas anteriores):", min_value=0, step=1, value=st.session_state.get('horas_totales', 0), key='horas_totales')
215
+ horas_teoricas = st.number_input("Horas totales de actividades académicas teóricas:", min_value=0, step=1, value=st.session_state.get('horas_teoricas', 0), key='horas_teoricas')
216
+ horas_practicas = st.number_input("Horas totales de actividades académicas prácticas:", min_value=0, step=1, value=st.session_state.get('horas_practicas', 0), key='horas_practicas')
217
+ horas_teorico_practicas = st.number_input("Horas totales de actividades académicas teórico-prácticas:", min_value=0, step=1, value=st.session_state.get('horas_teorico_practicas', 0), key='horas_teorico_practicas')
218
+
219
+ # For 'relaciones_perfil'
220
+ with st.expander("RELACIONES CON EL PERFIL"):
221
+ var_name = 'relaciones_perfil'
222
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
223
+ relaciones_perfil = st.text_area(
224
+ "Describir el propósito del curso en relación con los perfiles del programa académico.",
225
+ value=var_value,
226
+ key=var_name
227
+ )
228
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
229
+ with st.spinner(f'Mejorando {var_name} con IA...'):
230
+ try:
231
+ embeddings = HuggingFaceEmbeddings()
232
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
233
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
234
+ vectordb_list = [vectordb_PEI, vectordb_guia]
235
+ improved_text, context = mejorar_texto_con_IA(var_name, relaciones_perfil, vectordb_list, nombre_curso)
236
+ st.session_state['improved_' + var_name] = improved_text
237
+ st.session_state['context_' + var_name] = context
238
+ st.rerun()
239
+ except Exception as e:
240
+ st.warning(e)
241
+ pass
242
+ if 'context_' + var_name in st.session_state:
243
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
244
+ st.info(st.session_state['context_' + var_name])
245
+
246
+ # For 'intencionalidades'
247
+ with st.expander("INTENCIONALIDADES FORMATIVAS"):
248
+ var_name = 'intencionalidades'
249
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
250
+ intencionalidades = st.text_area(
251
+ "Explicitar los elementos orientadores del curso de acuerdo con el diseño curricular del programa académico.",
252
+ value=var_value,
253
+ key=var_name
254
+ )
255
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
256
+ with st.spinner(f'Mejorando {var_name} con IA...'):
257
+ try:
258
+ embeddings = HuggingFaceEmbeddings()
259
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
260
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
261
+ vectordb_list = [vectordb_PEI, vectordb_guia]
262
+ improved_text, context = mejorar_texto_con_IA(var_name, intencionalidades, vectordb_list, nombre_curso)
263
+ st.session_state['improved_' + var_name] = improved_text
264
+ st.session_state['context_' + var_name] = context
265
+ st.rerun()
266
+ except Exception as e:
267
+ st.warning(e)
268
+ pass
269
+ if 'context_' + var_name in st.session_state:
270
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
271
+ st.info(st.session_state['context_' + var_name])
272
+
273
+ # For 'aportes_formacion', 'lineas_sentido', 'derrotero_preguntas'
274
+ with st.expander("APORTES DEL CURSO A LA FORMACIÓN INTEGRAL Y A LA FORMACIÓN EN INVESTIGACIÓN"):
275
+ # 'aportes_formacion'
276
+ var_name = 'aportes_formacion'
277
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
278
+ aportes_formacion = st.text_area(
279
+ "Describir cómo el curso hace aportes a la formación integral y a la formación en investigación.",
280
+ value=var_value,
281
+ key=var_name
282
+ )
283
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
284
+ with st.spinner(f"Mejorando {var_name} con IA..."):
285
+ try:
286
+ embeddings = HuggingFaceEmbeddings()
287
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
288
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
289
+ vectordb_list = [vectordb_PEI, vectordb_guia]
290
+ improved_text, context = mejorar_texto_con_IA(var_name, aportes_formacion, vectordb_list, nombre_curso)
291
+ st.session_state['improved_' + var_name] = improved_text
292
+ st.session_state['context_' + var_name] = context
293
+ st.rerun()
294
+ except Exception as e:
295
+ st.warning(e)
296
+ pass
297
+ if 'context_' + var_name in st.session_state:
298
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
299
+ st.info(st.session_state['context_' + var_name])
300
+
301
+ # 'lineas_sentido'
302
+ var_name = 'lineas_sentido'
303
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
304
+ lineas_sentido = st.text_area(
305
+ "Líneas de sentido",
306
+ value=var_value,
307
+ key=var_name
308
+ )
309
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
310
+ with st.spinner(f"Mejorando {var_name} con IA..."):
311
+ try:
312
+ embeddings = HuggingFaceEmbeddings()
313
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
314
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
315
+ vectordb_list = [vectordb_PEI, vectordb_guia]
316
+ improved_text, context = mejorar_texto_con_IA(var_name, lineas_sentido, vectordb_list, nombre_curso)
317
+ st.session_state['improved_' + var_name] = improved_text
318
+ st.session_state['context_' + var_name] = context
319
+ st.rerun()
320
+ except Exception as e:
321
+ st.warning(e)
322
+ pass
323
+ if 'context_' + var_name in st.session_state:
324
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
325
+ st.info(st.session_state['context_' + var_name])
326
+
327
+ # 'derrotero_preguntas'
328
+ var_name = 'derrotero_preguntas'
329
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
330
+ derrotero_preguntas = st.text_area(
331
+ "Derrotero de preguntas",
332
+ value=var_value,
333
+ key=var_name
334
+ )
335
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
336
+ with st.spinner(f"Mejorando {var_name} con IA..."):
337
+ try:
338
+ embeddings = HuggingFaceEmbeddings()
339
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
340
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
341
+ vectordb_list = [vectordb_PEI, vectordb_guia]
342
+ improved_text, context = mejorar_texto_con_IA(var_name, derrotero_preguntas, vectordb_list, nombre_curso)
343
+ st.session_state['improved_' + var_name] = improved_text
344
+ st.session_state['context_' + var_name] = context
345
+ st.rerun()
346
+ except Exception as e:
347
+ st.warning(e)
348
+ pass
349
+ if 'context_' + var_name in st.session_state:
350
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
351
+ st.info(st.session_state['context_' + var_name])
352
+
353
+ # For 'descripcion_conocimientos'
354
+ with st.expander("DESCRIPCIÓN DE LOS CONOCIMIENTOS Y/O SABERES"):
355
+ var_name = 'descripcion_conocimientos'
356
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
357
+ descripcion_conocimientos = st.text_area(
358
+ "Explicitar los ejes problémicos, saberes, proyectos, contenidos o temas que se abordan en el desarrollo del curso.",
359
+ value=var_value,
360
+ key=var_name
361
+ )
362
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
363
+ with st.spinner(f"Mejorando {var_name} con IA..."):
364
+ try:
365
+ embeddings = HuggingFaceEmbeddings()
366
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
367
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
368
+ vectordb_list = [vectordb_PEI, vectordb_guia]
369
+ improved_text, context = mejorar_texto_con_IA(var_name, descripcion_conocimientos, vectordb_list, nombre_curso)
370
+ st.session_state['improved_' + var_name] = improved_text
371
+ st.session_state['context_' + var_name] = context
372
+ st.rerun()
373
+ except Exception as e:
374
+ st.warning(e)
375
+ pass
376
+ if 'context_' + var_name in st.session_state:
377
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
378
+ st.info(st.session_state['context_' + var_name])
379
+
380
+ # For 'metodologia' and others in "METODOLOGÍA"
381
+ with st.expander("METODOLOGÍA"):
382
+ # Existing code for 'estrategias_didacticas' and others...
383
+ estrategias_didacticas_options = [
384
+ "Aprendizaje Basado en Problemas (ABP)",
385
+ "Aprendizaje Basado en Proyectos (ABP)",
386
+ "Aprendizaje invertido",
387
+ "Aprendizaje Basado en Retos (ABR)",
388
+ "Estudio de caso",
389
+ "Aprendizaje entre pares",
390
+ "Clase magistral",
391
+ "Salida de campo",
392
+ "Taller",
393
+ "Otra(s)"
394
+ ]
395
+ estrategias_didacticas = st.multiselect("Estrategias didácticas:", estrategias_didacticas_options, default=st.session_state.get('estrategias_didacticas', []), key='estrategias_didacticas')
396
+ if "Otra(s)" in estrategias_didacticas:
397
+ estrategias_otras = st.text_input("Escriba el nombre de la estrategia.", value=st.session_state.get('estrategias_otras', ''), key='estrategias_otras')
398
+ else:
399
+ estrategias_otras = ''
400
+
401
+ # 'metodologia'
402
+ var_name = 'metodologia'
403
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
404
+ metodologia = st.text_area(
405
+ "Describa brevemente la metodología(s) utilizada(s).",
406
+ value=var_value,
407
+ key=var_name
408
+ )
409
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
410
+ with st.spinner(f"Mejorando {var_name} con IA..."):
411
+ try:
412
+ embeddings = HuggingFaceEmbeddings()
413
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
414
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
415
+ vectordb_list = [vectordb_PEI, vectordb_guia]
416
+ improved_text, context = mejorar_texto_con_IA(var_name, metodologia, vectordb_list, nombre_curso)
417
+ st.session_state['improved_' + var_name] = improved_text
418
+ st.session_state['context_' + var_name] = context
419
+ st.rerun()
420
+ except Exception as e:
421
+ st.warning(e)
422
+ pass
423
+ if 'context_' + var_name in st.session_state:
424
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
425
+ st.info(st.session_state['context_' + var_name])
426
+
427
+ # 'medios_recursos'
428
+ var_name = 'medios_recursos'
429
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
430
+ medios_recursos = st.text_area(
431
+ "Medios y recursos didácticos:",
432
+ value=var_value,
433
+ key=var_name
434
+ )
435
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
436
+ with st.spinner(f"Mejorando {var_name} con IA..."):
437
+ try:
438
+ embeddings = HuggingFaceEmbeddings()
439
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
440
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
441
+ vectordb_list = [vectordb_PEI, vectordb_guia]
442
+ improved_text, context = mejorar_texto_con_IA(var_name, medios_recursos, vectordb_list, nombre_curso)
443
+ st.session_state['improved_' + var_name] = improved_text
444
+ st.session_state['context_' + var_name] = context
445
+ st.rerun()
446
+ except Exception as e:
447
+ st.warning(e)
448
+ pass
449
+ if 'context_' + var_name in st.session_state:
450
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
451
+ st.info(st.session_state['context_' + var_name])
452
+
453
+ # 'formas_interaccion'
454
+ var_name = 'formas_interaccion'
455
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
456
+ formas_interaccion = st.text_area(
457
+ "Formas de interacción en los ambientes de aprendizaje y de acompañamiento del trabajo independiente del estudiante:",
458
+ value=var_value,
459
+ key=var_name
460
+ )
461
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
462
+ with st.spinner(f"Mejorando {var_name} con IA..."):
463
+ try:
464
+ embeddings = HuggingFaceEmbeddings()
465
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
466
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
467
+ vectordb_list = [vectordb_PEI, vectordb_guia]
468
+ improved_text, context = mejorar_texto_con_IA(var_name, formas_interaccion, vectordb_list, nombre_curso)
469
+ st.session_state['improved_' + var_name] = improved_text
470
+ st.session_state['context_' + var_name] = context
471
+ st.rerun()
472
+ except Exception as e:
473
+ st.warning(e)
474
+ pass
475
+ if 'context_' + var_name in st.session_state:
476
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
477
+ st.info(st.session_state['context_' + var_name])
478
+
479
+ # 'estrategias_internacionalizacion'
480
+ var_name = 'estrategias_internacionalizacion'
481
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
482
+ estrategias_internacionalizacion = st.text_area(
483
+ "Estrategias de internacionalización del currículo que se desarrollan para cumplir con las intencionalidades formativas del microcurrículo:",
484
+ value=var_value,
485
+ key=var_name
486
+ )
487
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
488
+ with st.spinner(f"Mejorando {var_name} con IA..."):
489
+ try:
490
+ embeddings = HuggingFaceEmbeddings()
491
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
492
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
493
+ vectordb_list = [vectordb_PEI, vectordb_guia]
494
+ improved_text, context = mejorar_texto_con_IA(var_name, estrategias_internacionalizacion, vectordb_list, nombre_curso)
495
+ st.session_state['improved_' + var_name] = improved_text
496
+ st.session_state['context_' + var_name] = context
497
+ st.rerun()
498
+ except Exception as e:
499
+ st.warning(e)
500
+ pass
501
+ if 'context_' + var_name in st.session_state:
502
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
503
+ st.info(st.session_state['context_' + var_name])
504
+
505
+ # 'estrategias_diversidad'
506
+ var_name = 'estrategias_diversidad'
507
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
508
+ estrategias_diversidad = st.text_area(
509
+ "Estrategias para abordar o visibilizar la diversidad desde la perspectiva de género, el enfoque diferencial o el enfoque intercultural:",
510
+ value=var_value,
511
+ key=var_name
512
+ )
513
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
514
+ with st.spinner(f"Mejorando {var_name} con IA..."):
515
+ try:
516
+ embeddings = HuggingFaceEmbeddings()
517
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
518
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
519
+ vectordb_list = [vectordb_PEI, vectordb_guia]
520
+ improved_text, context = mejorar_texto_con_IA(var_name, estrategias_diversidad, vectordb_list, nombre_curso)
521
+ st.session_state['improved_' + var_name] = improved_text
522
+ st.session_state['context_' + var_name] = context
523
+ st.rerun()
524
+ except Exception as e:
525
+ st.warning(e)
526
+ pass
527
+ if 'context_' + var_name in st.session_state:
528
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
529
+ st.info(st.session_state['context_' + var_name])
530
+
531
+ # For 'concepcion_evaluacion'
532
+ with st.expander("EVALUACIÓN"):
533
+ # Variable 'concepcion_evaluacion'
534
+ var_name = 'concepcion_evaluacion'
535
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
536
+ concepcion_evaluacion = st.text_area(
537
+ "Concepción de evaluación, modalidades y estrategias a través de las cuales se va a orientar.",
538
+ value=var_value,
539
+ key=var_name
540
+ )
541
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
542
+ with st.spinner(f'Mejorando {var_name} con IA...'):
543
+ try:
544
+ embeddings = HuggingFaceEmbeddings()
545
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
546
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
547
+ vectordb_list = [vectordb_PEI, vectordb_guia]
548
+ improved_text, context = mejorar_texto_con_IA(var_name, concepcion_evaluacion, vectordb_list, nombre_curso)
549
+ st.session_state['improved_' + var_name] = improved_text
550
+ st.session_state['context_' + var_name] = context
551
+ st.rerun()
552
+ except Exception as e:
553
+ st.warning(e)
554
+ pass
555
+ if 'context_' + var_name in st.session_state:
556
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
557
+ st.info(st.session_state['context_' + var_name])
558
+
559
+ # Variable 'procesos_aprendizaje'
560
+ var_name = 'procesos_aprendizaje'
561
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
562
+ procesos_aprendizaje = st.text_area(
563
+ "Procesos y resultados de aprendizaje del Programa Académico que se abordan en el curso.",
564
+ value=var_value,
565
+ key=var_name
566
+ )
567
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
568
+ with st.spinner(f'Mejorando {var_name} con IA...'):
569
+ try:
570
+ embeddings = HuggingFaceEmbeddings()
571
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
572
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
573
+ vectordb_list = [vectordb_PEI, vectordb_guia]
574
+ improved_text, context = mejorar_texto_con_IA(var_name, procesos_aprendizaje, vectordb_list, nombre_curso)
575
+ st.session_state['improved_' + var_name] = improved_text
576
+ st.session_state['context_' + var_name] = context
577
+ st.rerun()
578
+ except Exception as e:
579
+ st.warning(e)
580
+ pass
581
+ if 'context_' + var_name in st.session_state:
582
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
583
+ st.info(st.session_state['context_' + var_name])
584
+
585
+ # Variable 'momentos_evaluacion'
586
+ var_name = 'momentos_evaluacion'
587
+ var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, ''))
588
+ momentos_evaluacion = st.text_area(
589
+ "Momentos y/o productos de la evaluación del curso y sus respectivos porcentajes.",
590
+ value=var_value,
591
+ key=var_name
592
+ )
593
+ if st.button("Mejorar con IA✨", key='btn_' + var_name):
594
+ with st.spinner(f'Mejorando {var_name} con IA...'):
595
+ try:
596
+ embeddings = HuggingFaceEmbeddings()
597
+ vectordb_PEI = Chroma(persist_directory="./vector_db_PEI", embedding_function=embeddings)
598
+ vectordb_guia = Chroma(persist_directory="./vector_db_guia", embedding_function=embeddings)
599
+ vectordb_list = [vectordb_PEI, vectordb_guia]
600
+ improved_text, context = mejorar_texto_con_IA(var_name, momentos_evaluacion, vectordb_list, nombre_curso)
601
+ st.session_state['improved_' + var_name] = improved_text
602
+ st.session_state['context_' + var_name] = context
603
+ st.rerun()
604
+ except Exception as e:
605
+ st.warning(e)
606
+ pass
607
+ if 'context_' + var_name in st.session_state:
608
+ st.warning("Fragmentos del PEI-UdeA usados por la IA")
609
+ st.info(st.session_state['context_' + var_name])
610
+
611
+
612
+ with st.expander("BIBLIOGRAFÍA Y OTRAS FUENTES"):
613
+ bibliografia = st.text_area("Incluir solo la bibliografía que se requiere para el desarrollo del curso.", value=st.session_state.get('bibliografia', ''), key='bibliografia')
614
+ with st.expander("COMUNIDAD ACADÉMICA QUE PARTICIPÓ EN LA ELABORACIÓN DEL MICROCURRÍCULO"):
615
+ nombres_apellidos = st.text_area("Nombres y apellidos:", value=st.session_state.get('nombres_apellidos', ''), key='nombres_apellidos')
616
+ unidad_academica_participantes = st.text_area("Unidad académica:", value=st.session_state.get('unidad_academica_participantes', ''), key='unidad_academica_participantes')
617
+ formacion_academica = st.text_area("Formación académica:", value=st.session_state.get('formacion_academica', ''), key='formacion_academica')
618
+
619
+
620
+
621
+ if st.button("Descargar Microcurriculum"):
622
+ variables = st.session_state.to_dict()
623
+ variables['estrategias_didacticas'] = ', '.join(variables.get('estrategias_didacticas', []))
624
+ if "Otra(s)" in variables.get('estrategias_didacticas', '') and variables.get('estrategias_otras', ''):
625
+ variables['estrategias_didacticas'] += f", {variables['estrategias_otras']}"
626
+ doc_buffer = crear_documento(variables['nombre_curso'], variables)
627
+ st.download_button(
628
+ label="Descargar Microcurriculum",
629
+ data=doc_buffer,
630
+ file_name=f"Microcurriculum_{variables['nombre_curso']}.docx",
631
+ mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
632
+ )
633
+