lozanopastor commited on
Commit
9200dad
·
verified ·
1 Parent(s): 0325bd5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -33
app.py CHANGED
@@ -43,8 +43,9 @@ css_style = """
43
  """
44
 
45
  def eliminar_proceso_pensamiento(texto):
46
- """Elimina todo contenido entre incluyendo las etiquetas"""
47
- return re.sub(r'', '', texto, flags=re.DOTALL).strip()
 
48
 
49
  def get_pdf_text(pdf_docs):
50
  text = ""
@@ -86,9 +87,9 @@ def get_conversational_chain():
86
 
87
  def extract_metadata(vector_store):
88
  metadata_questions = {
89
- "title": "¿Cuál es el título principal del documento?",
90
  "entity": "¿A qué entidad u organización pertenece este documento?",
91
- "date": "¿Qué fecha de implantación se menciona en el documento?"
92
  }
93
 
94
  metadata = {}
@@ -106,7 +107,6 @@ def extract_metadata(vector_store):
106
  return metadata
107
 
108
  def mostrar_respuesta(texto):
109
- """Muestra la respuesta formateada en un contenedor especial"""
110
  with st.container():
111
  st.markdown(f'<div class="response-box">{texto}</div>', unsafe_allow_html=True)
112
 
@@ -125,13 +125,34 @@ def procesar_consulta(user_question):
125
  )
126
 
127
  respuesta_final = eliminar_proceso_pensamiento(response['output_text'])
128
- mostrar_respuesta(respuesta_final)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
 
130
  def main():
131
  st.set_page_config(page_title="PDF Consultor 🔍", page_icon="🔍", layout="wide")
132
  st.title("PDF Consultor 🔍")
133
  st.markdown(css_style, unsafe_allow_html=True)
134
 
 
 
 
 
135
  # Sidebar - Carga de documentos
136
  with st.sidebar:
137
  st.markdown('<p class="step-number">1 Subir archivos</p>', unsafe_allow_html=True)
@@ -143,7 +164,7 @@ def main():
143
  )
144
 
145
  # Procesamiento automático al cargar documentos
146
- if pdf_docs and not st.session_state.get('processed'):
147
  with st.spinner("Analizando documento..."):
148
  try:
149
  raw_text = get_pdf_text(pdf_docs)
@@ -152,7 +173,7 @@ def main():
152
 
153
  st.session_state.metadata = extract_metadata(vector_store)
154
  st.session_state.vector_store = vector_store
155
- st.session_state.processed = True
156
 
157
  st.rerun()
158
 
@@ -180,31 +201,23 @@ def main():
180
  st.markdown("---")
181
 
182
  # Interfaz de consultas
183
- with st.form("consulta_form"):
184
- col1, col2 = st.columns([5, 1])
185
- with col1:
186
- user_question = st.text_input(
187
- "Escribe tu pregunta:",
188
- placeholder="Ej: ¿Qué normativa regula este proceso?",
189
- label_visibility="collapsed"
190
- )
191
- with col2:
192
- st.markdown("<br>", unsafe_allow_html=True)
193
- enviar = st.form_submit_button("Enviar ▶")
194
-
195
- botones_rapidos = st.columns(3)
196
- with botones_rapidos[0]:
197
- if st.form_submit_button("📝 Resumen ejecutivo"):
198
- user_question = "Genera un resumen ejecutivo de máximo 3 párrafos"
199
- with botones_rapidos[1]:
200
- if st.form_submit_button("🏛️ Entidad relacionada"):
201
- user_question = "¿A qué organización o entidad pertenece este documento?"
202
- with botones_rapidos[2]:
203
- if st.form_submit_button("📅 Fechas clave"):
204
- user_question = "Lista las fechas importantes mencionadas en orden cronológico"
205
-
206
- if user_question and enviar:
207
- procesar_consulta(user_question)
208
 
209
  if __name__ == "__main__":
210
  main()
 
43
  """
44
 
45
  def eliminar_proceso_pensamiento(texto):
46
+ texto_limpio = re.sub(r'', '', texto, flags=re.DOTALL)
47
+ lineas = [line.strip() for line in texto_limpio.split('\n') if line.strip()]
48
+ return lineas[-1] if lineas else "Respuesta no disponible"
49
 
50
  def get_pdf_text(pdf_docs):
51
  text = ""
 
87
 
88
  def extract_metadata(vector_store):
89
  metadata_questions = {
90
+ "title": "¿Cual es o podría ser el título del documento? Redacta una sola frase",
91
  "entity": "¿A qué entidad u organización pertenece este documento?",
92
+ "date": "¿En qué fecha se implantará el contenido? Si no se detalla responde \"No se especifica\""
93
  }
94
 
95
  metadata = {}
 
107
  return metadata
108
 
109
  def mostrar_respuesta(texto):
 
110
  with st.container():
111
  st.markdown(f'<div class="response-box">{texto}</div>', unsafe_allow_html=True)
112
 
 
125
  )
126
 
127
  respuesta_final = eliminar_proceso_pensamiento(response['output_text'])
128
+
129
+ # Almacenar la pregunta y respuesta en la historia de la conversación
130
+ if 'conversacion' not in st.session_state:
131
+ st.session_state.conversacion = []
132
+
133
+ st.session_state.conversacion.append({
134
+ "pregunta": user_question,
135
+ "respuesta": respuesta_final
136
+ })
137
+
138
+ # Mostrar toda la conversación
139
+ mostrar_conversacion()
140
+
141
+ def mostrar_conversacion():
142
+ if 'conversacion' in st.session_state:
143
+ for pregunta, respuesta in st.session_state.conversacion:
144
+ st.write(f"**Pregunta:** {pregunta}")
145
+ mostrar_respuesta(respuesta)
146
 
147
  def main():
148
  st.set_page_config(page_title="PDF Consultor 🔍", page_icon="🔍", layout="wide")
149
  st.title("PDF Consultor 🔍")
150
  st.markdown(css_style, unsafe_allow_html=True)
151
 
152
+ # Inicializa estado de sesión
153
+ if 'documento_cargado' not in st.session_state:
154
+ st.session_state.documento_cargado = False
155
+
156
  # Sidebar - Carga de documentos
157
  with st.sidebar:
158
  st.markdown('<p class="step-number">1 Subir archivos</p>', unsafe_allow_html=True)
 
164
  )
165
 
166
  # Procesamiento automático al cargar documentos
167
+ if pdf_docs and not st.session_state.documento_cargado:
168
  with st.spinner("Analizando documento..."):
169
  try:
170
  raw_text = get_pdf_text(pdf_docs)
 
173
 
174
  st.session_state.metadata = extract_metadata(vector_store)
175
  st.session_state.vector_store = vector_store
176
+ st.session_state.documento_cargado = True
177
 
178
  st.rerun()
179
 
 
201
  st.markdown("---")
202
 
203
  # Interfaz de consultas
204
+ if st.session_state.documento_cargado:
205
+ with st.form("consulta_form"):
206
+ col1, col2 = st.columns([5, 1])
207
+ with col1:
208
+ user_question = st.text_input(
209
+ "Escribe tu pregunta:",
210
+ placeholder="Ej: ¿Qué normativa regula este proceso?",
211
+ label_visibility="collapsed"
212
+ )
213
+ with col2:
214
+ st.markdown("<br>", unsafe_allow_html=True)
215
+ enviar = st.form_submit_button("Enviar ▶")
216
+
217
+ if user_question and enviar:
218
+ procesar_consulta(user_question)
219
+ else:
220
+ st.write("Por favor, sube un documento para continuar.")
 
 
 
 
 
 
 
 
221
 
222
  if __name__ == "__main__":
223
  main()