Spaces:
Sleeping
Sleeping
| from groq import Groq | |
| from langchain_groq import ChatGroq | |
| import streamlit as st | |
| from docx import Document | |
| from io import BytesIO | |
| from langchain_huggingface.embeddings import HuggingFaceEmbeddings | |
| from langchain.vectorstores import Chroma | |
| import os | |
| from docx.shared import Inches, Pt, RGBColor | |
| from docx.oxml import OxmlElement | |
| from docx.oxml.ns import qn | |
| from docx.oxml import parse_xml | |
| from docx.oxml.ns import nsdecls | |
| from docx.enum.text import WD_PARAGRAPH_ALIGNMENT | |
| from PyPDF2 import PdfReader | |
| from langchain.text_splitter import RecursiveCharacterTextSplitter | |
| from chromadb.config import Settings | |
| # Verificar que la clave de API se ha cargado | |
| api_key= os.environ.get("API_KEY") | |
| # Updated initialization with model_name | |
| embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") | |
| # Load the vector databases | |
| vectordb_PEI = Chroma(persist_directory="./vector_db_PEI2", embedding_function=embeddings) | |
| vectordb_guia = Chroma(persist_directory="./vector_db_guia2", embedding_function=embeddings) | |
| # Prepare the list of vector databases | |
| vectordb_list = [vectordb_PEI, vectordb_guia] | |
| client = Groq(api_key=api_key) | |
| # Inicializar el modelo de chat | |
| chat_groq = ChatGroq(model="llama-3.1-70b-versatile",api_key=api_key) | |
| # Configurar la página | |
| st.set_page_config( | |
| page_title="Microcurriculum UdeA con IA", | |
| page_icon="🩺", | |
| layout="centered", | |
| initial_sidebar_state="auto", | |
| ) | |
| st.sidebar.image("UdeA+simplificado-01.png", width=200) | |
| st.sidebar.title("Microcurriculum con IA") | |
| st.sidebar.write("Entrega Diplomado Pedagogía UdeA 2024-2") | |
| st.sidebar.write("Equipo GIE Inclusión y Tecnología") | |
| st.title("PROGRAMA OFICIAL DE CURSO") | |
| st.write("Aplica para Pregrado y Posgrado") | |
| # Sección para subir documentos adicionales | |
| st.write("### Añadir Documentos Adicionales") | |
| st.write("Ya están incluidos el PEI y el manual para la creación de microcurrículo. Puedes añadir documentos específicos del programa. Tamaño máximo por archivo: 50 MB.") | |
| uploaded_files = st.file_uploader( | |
| "Subir documentos en formato PDF", | |
| type="pdf", | |
| accept_multiple_files=True, | |
| key="uploaded_files", | |
| help="Puedes subir múltiples archivos PDF." | |
| ) | |
| if uploaded_files: | |
| total_size = sum([file.size for file in uploaded_files]) | |
| if any(file.size > 50 * 1024 * 1024 for file in uploaded_files): | |
| st.error("Uno o más archivos exceden el tamaño máximo de 50 MB. Por favor, sube archivos más pequeños.") | |
| else: | |
| if st.button("Añadir"): | |
| with st.spinner("Procesando documentos..."): | |
| # Crear una base de datos vectorial en memoria | |
| vectordb_custom = Chroma( | |
| embedding_function=embeddings, | |
| ) | |
| # Procesar cada archivo subido | |
| for uploaded_file in uploaded_files: | |
| # Leer el contenido del archivo PDF | |
| pdf_reader = PdfReader(uploaded_file) | |
| text = "" | |
| for page in pdf_reader.pages: | |
| text += page.extract_text() | |
| # Dividir el texto en fragmentos | |
| text_splitter = RecursiveCharacterTextSplitter( | |
| chunk_size=1000, | |
| chunk_overlap=200, | |
| length_function=len | |
| ) | |
| texts = text_splitter.split_text(text) | |
| # Añadir los textos a la base de datos vectorial | |
| vectordb_custom.add_texts(texts) | |
| st.success("Documentos añadidos y procesados correctamente.") | |
| # Guardar la base de datos vectorial en la sesión | |
| st.session_state['vectordb_custom'] = vectordb_custom | |
| # Si el usuario ha subido documentos personalizados, incluir su base de datos vectorial | |
| if 'vectordb_custom' in st.session_state: | |
| vectordb_list.append(st.session_state['vectordb_custom']) | |
| def mejorar_texto_con_IA(var_name, var_value, vectordb_list, nombre_curso): | |
| context_docs = [] | |
| search=var_name+"\n"+var_value | |
| for vectordb in vectordb_list: | |
| docs = vectordb.similarity_search(search, k=3) | |
| context_docs.extend([doc.page_content for doc in docs]) | |
| context = "\n".join(context_docs) | |
| 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 | |
| Contexto: | |
| {context} | |
| Texto: | |
| {var_value} | |
| Texto mejorado:""" | |
| improved_text = chat_groq.invoke(prompt) | |
| improved_text = improved_text.content | |
| return improved_text, context | |
| def crear_documento(nombre_curso, variables): | |
| doc = Document('plantilla_micro.docx') | |
| # Insertar la imagen con estilo centrado | |
| imagen = doc.add_paragraph() | |
| imagen.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER | |
| run_imagen = imagen.add_run() | |
| run_imagen.add_picture("UdeA+simplificado-01.png", width=Inches(1.5)) | |
| # Título Principal | |
| titulo = doc.add_paragraph() | |
| titulo_run = titulo.add_run("PROGRAMA OFICIAL DE CURSO\n(Pregrado y Posgrado)\nUNIVERSIDAD DE ANTIOQUIA") | |
| titulo_run.bold = True | |
| titulo_run.font.size = Pt(16) | |
| titulo_run.font.color.rgb = RGBColor(34, 85, 85) # Color verde azulado | |
| # Información General - Tabla | |
| doc.add_paragraph("\nINFORMACIÓN GENERAL", style='Heading 1') | |
| info_table = doc.add_table(rows=0, cols=2) | |
| info_general = [ | |
| ("Nombre del curso", nombre_curso), | |
| ("Programa académico", variables.get('programa_academico', '')), | |
| ("Unidad académica", variables.get('unidad_academica', '')), | |
| ("Programas que ofrecen el curso", variables.get('programas_ofrece', '')), | |
| ("Vigencia", variables.get('vigencia', '')), | |
| ("Código del curso", variables.get('codigo_curso', '')), | |
| ("Tipo de curso", variables.get('tipo_curso', '') if variables.get('tipo_curso', '') != 'Otro' else variables.get('tipo_curso_otro', '')), | |
| ("Características del curso", ', '.join(variables.get('caracteristicas_curso', []))), | |
| ("Modalidad educativa", variables.get('modalidad', '') if variables.get('modalidad', '') != 'Otra' else variables.get('modalidad_otra', '')), | |
| ("Área, núcleo o componente", variables.get('nombre_area', '')), | |
| ("Prerrequisitos", variables.get('prerrequisitos', '')), | |
| ("Correquisitos", variables.get('correquisitos', '')), | |
| ("Créditos académicos", variables.get('num_creditos', '')), | |
| ("Horas de interacción", variables.get('horas_interaccion', '')), | |
| ("Horas de trabajo independiente", variables.get('horas_independiente', '')), | |
| ("Horas totales del curso", variables.get('horas_totales', '')) | |
| ] | |
| for key, value in info_general: | |
| row = info_table.add_row().cells | |
| row[0].text = key | |
| row[0].paragraphs[0].runs[0].font.bold = True | |
| row[1].text = str(value) | |
| # Secciones con Títulos | |
| # Secciones con Títulos | |
| secciones = [ | |
| ("RELACIONES CON EL PERFIL", variables.get('relaciones_perfil', '')), | |
| ("INTENCIONALIDADES FORMATIVAS", variables.get('intencionalidades', '')), | |
| ("APORTES DEL CURSO A LA FORMACIÓN INTEGRAL Y A LA FORMACIÓN EN INVESTIGACIÓN", variables.get('aportes_formacion', '')), | |
| ("LÍNEAS DE SENTIDO Y DERROTERO DE PREGUNTAS", f"Líneas de sentido: {variables.get('lineas_sentido', '')}\nDerrotero de preguntas: {variables.get('derrotero_preguntas', '')}"), | |
| ("DESCRIPCIÓN DE LOS CONOCIMIENTOS Y/O SABERES", variables.get('descripcion_conocimientos', '')), | |
| ("METODOLOGÍA", f"Estrategias didácticas: {variables.get('estrategias_didacticas', '')}\nMetodología: {variables.get('metodologia', '')}\nMedios y recursos didácticos: {variables.get('medios_recursos', '')}\nFormas de interacción: {variables.get('formas_interaccion', '')}\nEstrategias de internacionalización: {variables.get('estrategias_internacionalizacion', '')}\nEstrategias de diversidad: {variables.get('estrategias_diversidad', '')}"), | |
| ("EVALUACIÓN", f"Concepción de evaluación: {variables.get('concepcion_evaluacion', '')}\nProcesos de aprendizaje: {variables.get('procesos_aprendizaje', '')}\nMomentos de evaluación y porcentajes: {variables.get('momentos_evaluacion', '')}"), | |
| ("BIBLIOGRAFÍA Y OTRAS FUENTES", variables.get('bibliografia', '')), | |
| ("COMUNIDAD ACADÉMICA QUE PARTICIPÓ EN LA ELABORACIÓN DEL MICROCURRÍCULO", f"Nombres: {variables.get('nombres_apellidos', '')}\nUnidad académica: {variables.get('unidad_academica_participantes', '')}\nFormación académica: {variables.get('formacion_academica', '')}") | |
| ] | |
| for titulo, contenido in secciones: | |
| # Añadir título de sección con color personalizado | |
| parrafo_titulo = doc.add_paragraph(f"\n{titulo}") | |
| run_titulo = parrafo_titulo.runs[0] | |
| run_titulo.font.size = Pt(14) | |
| run_titulo.bold = True | |
| run_titulo.font.color.rgb = RGBColor(34, 85, 85) # Color verde azulado | |
| # Añadir contenido con viñetas si es necesario | |
| if '\n' in contenido: | |
| for linea in contenido.split('\n'): | |
| parrafo = doc.add_paragraph(linea) | |
| parrafo.paragraph_format.left_indent = Inches(0.5) | |
| else: | |
| doc.add_paragraph(contenido) | |
| # Aprobación del Consejo de Unidad Académica | |
| aprobacion_titulo = doc.add_paragraph("\nAPROBACIÓN DEL CONSEJO DE UNIDAD ACADÉMICA") | |
| aprobacion_titulo_run = aprobacion_titulo.runs[0] | |
| aprobacion_titulo_run.bold = True | |
| aprobacion_titulo_run.font.size = Pt(14) | |
| aprobacion_titulo_run.font.color.rgb = RGBColor(34, 85, 85) # Color verde azulado | |
| aprobacion_parrafo = doc.add_paragraph() | |
| aprobacion_parrafo.add_run("Aprobado en Acta número ").bold = False | |
| aprobacion_parrafo.add_run("_______________").underline = True | |
| # Información del secretario (puedes ajustar según tus necesidades) | |
| secretario_info = [ | |
| ("Secretario Académico", "________________________"), | |
| ("Decano", "________________________"), | |
| ] | |
| for label, line in secretario_info: | |
| parrafo_label = doc.add_paragraph(label) | |
| parrafo_label.runs[0].font.bold = True | |
| parrafo_label.runs[0].font.color.rgb = RGBColor(34, 85, 85) # Color verde azulado | |
| parrafo_linea = doc.add_paragraph(line) | |
| parrafo_linea.runs[0].underline = True | |
| # Guardar el documento en un objeto de bytes | |
| doc_buffer = BytesIO() | |
| doc.save(doc_buffer) | |
| doc_buffer.seek(0) | |
| return doc_buffer | |
| with st.expander("INFORMACIÓN GENERAL"): | |
| nombre_curso = st.text_input("Nombre del curso:", value=st.session_state.get('nombre_curso', ''), key='nombre_curso') | |
| programa_academico = st.text_input("Programa académico al que pertenece:", value=st.session_state.get('programa_academico', ''), key='programa_academico') | |
| unidad_academica = st.text_input("Unidad académica:", value=st.session_state.get('unidad_academica', ''), key='unidad_academica') | |
| 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') | |
| vigencia = st.text_input("Vigencia (Periodo académico o Cohorte):", value=st.session_state.get('vigencia', ''), key='vigencia') | |
| codigo_curso = st.text_input("Código curso (en MARES):", value=st.session_state.get('codigo_curso', ''), key='codigo_curso') | |
| tipo_curso_options = ["Obligatorio", "Electivo", "Otro"] | |
| tipo_curso_index = tipo_curso_options.index(st.session_state.get('tipo_curso', 'Obligatorio')) | |
| tipo_curso = st.selectbox("Tipo de curso:", tipo_curso_options, index=tipo_curso_index, key='tipo_curso') | |
| if tipo_curso == "Otro": | |
| 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') | |
| else: | |
| tipo_curso_otro = '' | |
| caracteristicas_curso = st.multiselect( | |
| "Características del curso:", | |
| ["Validable", "Habilitable", "Clasificable", "Evaluación de suficiencia (posgrado)"], | |
| default=st.session_state.get('caracteristicas_curso', []), | |
| key='caracteristicas_curso' | |
| ) | |
| modalidad_options = ["Presencial", "Virtual", "Mixta", "Otra"] | |
| modalidad_index = modalidad_options.index(st.session_state.get('modalidad', 'Presencial')) | |
| modalidad = st.selectbox("Modalidad educativa del curso:", modalidad_options, index=modalidad_index, key='modalidad') | |
| if modalidad == "Otra": | |
| modalidad_otra = st.text_input("En caso de elegir 'Otra', indique cuál:", value=st.session_state.get('modalidad_otra', ''), key='modalidad_otra') | |
| else: | |
| modalidad_otra = '' | |
| 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') | |
| prerrequisitos = st.text_area("Prerrequisitos (con nombre y código en MARES):", value=st.session_state.get('prerrequisitos', ''), key='prerrequisitos') | |
| correquisitos = st.text_area("Correquisitos (con nombre y código en MARES):", value=st.session_state.get('correquisitos', ''), key='correquisitos') | |
| 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') | |
| 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') | |
| 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') | |
| 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') | |
| 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') | |
| 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') | |
| 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') | |
| # For 'relaciones_perfil' | |
| with st.expander("RELACIONES CON EL PERFIL"): | |
| var_name = 'relaciones_perfil' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| relaciones_perfil = st.text_area( | |
| "Describir el propósito del curso en relación con los perfiles del programa académico.", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f'Mejorando {var_name} con IA...'): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, relaciones_perfil, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # For 'intencionalidades' | |
| with st.expander("INTENCIONALIDADES FORMATIVAS"): | |
| var_name = 'intencionalidades' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| intencionalidades = st.text_area( | |
| "Explicitar los elementos orientadores del curso de acuerdo con el diseño curricular del programa académico.", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f'Mejorando {var_name} con IA...'): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, intencionalidades, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # For 'aportes_formacion', 'lineas_sentido', 'derrotero_preguntas' | |
| with st.expander("APORTES DEL CURSO A LA FORMACIÓN INTEGRAL Y A LA FORMACIÓN EN INVESTIGACIÓN"): | |
| # 'aportes_formacion' | |
| var_name = 'aportes_formacion' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| aportes_formacion = st.text_area( | |
| "Describir cómo el curso hace aportes a la formación integral y a la formación en investigación.", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f"Mejorando {var_name} con IA..."): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, aportes_formacion, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # 'lineas_sentido' | |
| var_name = 'lineas_sentido' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| lineas_sentido = st.text_area( | |
| "Líneas de sentido", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f"Mejorando {var_name} con IA..."): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, lineas_sentido, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # 'derrotero_preguntas' | |
| var_name = 'derrotero_preguntas' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| derrotero_preguntas = st.text_area( | |
| "Derrotero de preguntas", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f"Mejorando {var_name} con IA..."): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, derrotero_preguntas, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # For 'descripcion_conocimientos' | |
| with st.expander("DESCRIPCIÓN DE LOS CONOCIMIENTOS Y/O SABERES"): | |
| var_name = 'descripcion_conocimientos' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| descripcion_conocimientos = st.text_area( | |
| "Explicitar los ejes problémicos, saberes, proyectos, contenidos o temas que se abordan en el desarrollo del curso.", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f"Mejorando {var_name} con IA..."): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, descripcion_conocimientos, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # For 'metodologia' and others in "METODOLOGÍA" | |
| with st.expander("METODOLOGÍA"): | |
| # Existing code for 'estrategias_didacticas' and others... | |
| estrategias_didacticas_options = [ | |
| "Aprendizaje Basado en Problemas (ABP)", | |
| "Aprendizaje Basado en Proyectos (ABP)", | |
| "Aprendizaje invertido", | |
| "Aprendizaje Basado en Retos (ABR)", | |
| "Estudio de caso", | |
| "Aprendizaje entre pares", | |
| "Clase magistral", | |
| "Salida de campo", | |
| "Taller", | |
| "Otra(s)" | |
| ] | |
| estrategias_didacticas = st.multiselect("Estrategias didácticas:", estrategias_didacticas_options, default=st.session_state.get('estrategias_didacticas', []), key='estrategias_didacticas') | |
| if "Otra(s)" in estrategias_didacticas: | |
| estrategias_otras = st.text_input("Escriba el nombre de la estrategia.", value=st.session_state.get('estrategias_otras', ''), key='estrategias_otras') | |
| else: | |
| estrategias_otras = '' | |
| # 'metodologia' | |
| var_name = 'metodologia' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| metodologia = st.text_area( | |
| "Describa brevemente la metodología(s) utilizada(s).", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f"Mejorando {var_name} con IA..."): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, metodologia, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # 'medios_recursos' | |
| var_name = 'medios_recursos' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| medios_recursos = st.text_area( | |
| "Medios y recursos didácticos:", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f"Mejorando {var_name} con IA..."): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, medios_recursos, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # 'formas_interaccion' | |
| var_name = 'formas_interaccion' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| formas_interaccion = st.text_area( | |
| "Formas de interacción en los ambientes de aprendizaje y de acompañamiento del trabajo independiente del estudiante:", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f"Mejorando {var_name} con IA..."): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, formas_interaccion, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # 'estrategias_internacionalizacion' | |
| var_name = 'estrategias_internacionalizacion' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| estrategias_internacionalizacion = st.text_area( | |
| "Estrategias de internacionalización del currículo que se desarrollan para cumplir con las intencionalidades formativas del microcurrículo:", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f"Mejorando {var_name} con IA..."): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, estrategias_internacionalizacion, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # 'estrategias_diversidad' | |
| var_name = 'estrategias_diversidad' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| estrategias_diversidad = st.text_area( | |
| "Estrategias para abordar o visibilizar la diversidad desde la perspectiva de género, el enfoque diferencial o el enfoque intercultural:", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f"Mejorando {var_name} con IA..."): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, estrategias_diversidad, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # For 'concepcion_evaluacion' | |
| with st.expander("EVALUACIÓN"): | |
| # Variable 'concepcion_evaluacion' | |
| var_name = 'concepcion_evaluacion' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| concepcion_evaluacion = st.text_area( | |
| "Concepción de evaluación, modalidades y estrategias a través de las cuales se va a orientar.", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f'Mejorando {var_name} con IA...'): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, concepcion_evaluacion, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # Variable 'procesos_aprendizaje' | |
| var_name = 'procesos_aprendizaje' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| procesos_aprendizaje = st.text_area( | |
| "Procesos y resultados de aprendizaje del Programa Académico que se abordan en el curso.", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f'Mejorando {var_name} con IA...'): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, procesos_aprendizaje, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| # Variable 'momentos_evaluacion' | |
| var_name = 'momentos_evaluacion' | |
| var_value = st.session_state.get('improved_' + var_name, st.session_state.get(var_name, '')) | |
| momentos_evaluacion = st.text_area( | |
| "Momentos y/o productos de la evaluación del curso y sus respectivos porcentajes.", | |
| value=var_value, | |
| key=var_name | |
| ) | |
| if st.button("Mejorar con IA✨", key='btn_' + var_name): | |
| with st.spinner(f'Mejorando {var_name} con IA...'): | |
| try: | |
| improved_text, context = mejorar_texto_con_IA(var_name, momentos_evaluacion, vectordb_list, nombre_curso) | |
| st.session_state['improved_' + var_name] = improved_text | |
| st.session_state['context_' + var_name] = context | |
| st.rerun() | |
| except Exception as e: | |
| st.warning(e) | |
| pass | |
| if 'context_' + var_name in st.session_state: | |
| st.warning("Fragmentos del PEI-UdeA usados por la IA") | |
| st.info(st.session_state['context_' + var_name]) | |
| with st.expander("BIBLIOGRAFÍA Y OTRAS FUENTES"): | |
| 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') | |
| with st.expander("COMUNIDAD ACADÉMICA QUE PARTICIPÓ EN LA ELABORACIÓN DEL MICROCURRÍCULO"): | |
| nombres_apellidos = st.text_area("Nombres y apellidos:", value=st.session_state.get('nombres_apellidos', ''), key='nombres_apellidos') | |
| unidad_academica_participantes = st.text_area("Unidad académica:", value=st.session_state.get('unidad_academica_participantes', ''), key='unidad_academica_participantes') | |
| formacion_academica = st.text_area("Formación académica:", value=st.session_state.get('formacion_academica', ''), key='formacion_academica') | |
| # Suponiendo que st.session_state ya contiene las variables necesarias | |
| variables = st.session_state.to_dict() | |
| variables['estrategias_didacticas'] = ', '.join(variables.get('estrategias_didacticas', [])) | |
| if "Otra(s)" in variables.get('estrategias_didacticas', '') and variables.get('estrategias_otras', ''): | |
| variables['estrategias_didacticas'] += f", {variables['estrategias_otras']}" | |
| def generar_documento(): | |
| doc_buffer = crear_documento(variables['nombre_curso'], variables) | |
| return doc_buffer.getvalue() | |
| st.download_button( | |
| label="Descargar Microcurriculum", | |
| data=generar_documento(), | |
| file_name=f"Microcurriculum_{variables['nombre_curso']}.docx", | |
| mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document" | |
| ) | |