Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -16,6 +16,8 @@ from docx import Document
|
|
| 16 |
from docx.shared import Inches, Pt, RGBColor
|
| 17 |
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
|
| 18 |
from io import BytesIO
|
|
|
|
|
|
|
| 19 |
|
| 20 |
# Verificar que la clave de API se ha cargado
|
| 21 |
api_key= os.environ.get("API_KEY")
|
|
@@ -27,6 +29,10 @@ vectordb_guia = Chroma(persist_directory="./vector_db_guia2", embedding_function
|
|
| 27 |
# Prepare the list of vector databases
|
| 28 |
vectordb_list = [vectordb_PEI, vectordb_guia]
|
| 29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
client = Groq(api_key=api_key)
|
| 31 |
|
| 32 |
# Inicializar el modelo de chat
|
|
@@ -46,6 +52,56 @@ st.sidebar.write("Equipo GIE Inclusión y Tecnología")
|
|
| 46 |
|
| 47 |
st.title("PROGRAMA OFICIAL DE CURSO")
|
| 48 |
st.write("Aplica para Pregrado y Posgrado")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
|
| 50 |
def mejorar_texto_con_IA(var_name, var_value, vectordb_list, nombre_curso):
|
| 51 |
context_docs = []
|
|
@@ -546,7 +602,6 @@ with st.expander("COMUNIDAD ACADÉMICA QUE PARTICIPÓ EN LA ELABORACIÓN DEL MIC
|
|
| 546 |
|
| 547 |
|
| 548 |
|
| 549 |
-
|
| 550 |
# Suponiendo que st.session_state ya contiene las variables necesarias
|
| 551 |
variables = st.session_state.to_dict()
|
| 552 |
variables['estrategias_didacticas'] = ', '.join(variables.get('estrategias_didacticas', []))
|
|
@@ -564,4 +619,3 @@ st.download_button(
|
|
| 564 |
mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
|
| 565 |
)
|
| 566 |
|
| 567 |
-
|
|
|
|
| 16 |
from docx.shared import Inches, Pt, RGBColor
|
| 17 |
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
|
| 18 |
from io import BytesIO
|
| 19 |
+
from PyPDF2 import PdfReader
|
| 20 |
+
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
| 21 |
|
| 22 |
# Verificar que la clave de API se ha cargado
|
| 23 |
api_key= os.environ.get("API_KEY")
|
|
|
|
| 29 |
# Prepare the list of vector databases
|
| 30 |
vectordb_list = [vectordb_PEI, vectordb_guia]
|
| 31 |
|
| 32 |
+
# Si el usuario ha subido documentos personalizados, incluir su base de datos vectorial
|
| 33 |
+
if 'vectordb_custom' in st.session_state:
|
| 34 |
+
vectordb_list.append(st.session_state['vectordb_custom'])
|
| 35 |
+
|
| 36 |
client = Groq(api_key=api_key)
|
| 37 |
|
| 38 |
# Inicializar el modelo de chat
|
|
|
|
| 52 |
|
| 53 |
st.title("PROGRAMA OFICIAL DE CURSO")
|
| 54 |
st.write("Aplica para Pregrado y Posgrado")
|
| 55 |
+
# Sección para subir documentos adicionales
|
| 56 |
+
st.write("### Añadir Documentos Adicionales")
|
| 57 |
+
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.")
|
| 58 |
+
|
| 59 |
+
uploaded_files = st.file_uploader(
|
| 60 |
+
"Subir documentos en formato PDF",
|
| 61 |
+
type="pdf",
|
| 62 |
+
accept_multiple_files=True,
|
| 63 |
+
key="uploaded_files",
|
| 64 |
+
help="Puedes subir múltiples archivos PDF."
|
| 65 |
+
)
|
| 66 |
+
|
| 67 |
+
if uploaded_files:
|
| 68 |
+
total_size = sum([file.size for file in uploaded_files])
|
| 69 |
+
if any(file.size > 50 * 1024 * 1024 for file in uploaded_files):
|
| 70 |
+
st.error("Uno o más archivos exceden el tamaño máximo de 50 MB. Por favor, sube archivos más pequeños.")
|
| 71 |
+
else:
|
| 72 |
+
if st.button("Añadir"):
|
| 73 |
+
with st.spinner("Procesando documentos..."):
|
| 74 |
+
# Crear una base de datos vectorial en memoria
|
| 75 |
+
vectordb_custom = Chroma(
|
| 76 |
+
embedding_function=embeddings,
|
| 77 |
+
in_memory=True
|
| 78 |
+
)
|
| 79 |
+
|
| 80 |
+
# Procesar cada archivo subido
|
| 81 |
+
for uploaded_file in uploaded_files:
|
| 82 |
+
# Leer el contenido del archivo PDF
|
| 83 |
+
pdf_reader = PdfReader(uploaded_file)
|
| 84 |
+
text = ""
|
| 85 |
+
for page in pdf_reader.pages:
|
| 86 |
+
text += page.extract_text()
|
| 87 |
+
|
| 88 |
+
# Dividir el texto en fragmentos
|
| 89 |
+
text_splitter = RecursiveCharacterTextSplitter(
|
| 90 |
+
chunk_size=1000,
|
| 91 |
+
chunk_overlap=200,
|
| 92 |
+
length_function=len
|
| 93 |
+
)
|
| 94 |
+
texts = text_splitter.split_text(text)
|
| 95 |
+
|
| 96 |
+
# Añadir los textos a la base de datos vectorial
|
| 97 |
+
vectordb_custom.add_texts(texts)
|
| 98 |
+
|
| 99 |
+
st.success("Documentos añadidos y procesados correctamente.")
|
| 100 |
+
|
| 101 |
+
# Guardar la base de datos vectorial en la sesión
|
| 102 |
+
st.session_state['vectordb_custom'] = vectordb_custom
|
| 103 |
+
|
| 104 |
+
|
| 105 |
|
| 106 |
def mejorar_texto_con_IA(var_name, var_value, vectordb_list, nombre_curso):
|
| 107 |
context_docs = []
|
|
|
|
| 602 |
|
| 603 |
|
| 604 |
|
|
|
|
| 605 |
# Suponiendo que st.session_state ya contiene las variables necesarias
|
| 606 |
variables = st.session_state.to_dict()
|
| 607 |
variables['estrategias_didacticas'] = ', '.join(variables.get('estrategias_didacticas', []))
|
|
|
|
| 619 |
mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
|
| 620 |
)
|
| 621 |
|
|
|