Alejo760's picture
Update app.py
31e4454 verified
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"
)