Alejo760 commited on
Commit
2648dd0
·
verified ·
1 Parent(s): 0ad5dcb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -2
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