Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -43,8 +43,9 @@ css_style = """
|
|
43 |
"""
|
44 |
|
45 |
def eliminar_proceso_pensamiento(texto):
|
46 |
-
|
47 |
-
|
|
|
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": "¿
|
90 |
"entity": "¿A qué entidad u organización pertenece este documento?",
|
91 |
-
"date": "¿
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
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.
|
156 |
|
157 |
st.rerun()
|
158 |
|
@@ -180,31 +201,23 @@ def main():
|
|
180 |
st.markdown("---")
|
181 |
|
182 |
# Interfaz de consultas
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
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()
|