FelipeMena commited on
Commit
5c8e40d
·
verified ·
1 Parent(s): 48ee36b

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -0
app.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from transformers import pipeline
3
+ from sentence_transformers import SentenceTransformer
4
+ import faiss
5
+ import numpy as np
6
+
7
+ # --- Base documental: información sobre la biblioteca ---
8
+ documentos = [
9
+ "La biblioteca abre de lunes a viernes de 8:00 a.m. a 6:00 p.m.",
10
+ "Los estudiantes pueden prestar hasta 3 libros por 15 días.",
11
+ "Puedes buscar libros en el catálogo en línea accediendo desde la página web institucional.",
12
+ "No se permite comer ni beber dentro de la biblioteca.",
13
+ "Hay salas de estudio grupal disponibles con reserva previa.",
14
+ "La biblioteca cuenta con acceso a bases de datos académicas para estudiantes.",
15
+ "Para renovar un libro, debes ingresar al sistema antes de la fecha de vencimiento.",
16
+ "Se realizan talleres de lectura y escritura todos los miércoles a las 3 p.m.",
17
+ "Los libros extraviados deben ser reportados inmediatamente al personal de la biblioteca.",
18
+ "Los usuarios deben mantener el silencio dentro de las instalaciones."
19
+ ]
20
+
21
+ # --- Cargar modelo de embeddings y crear índice FAISS ---
22
+ modelo_emb = SentenceTransformer('sentence-transformers/bert-base-nli-mean-tokens')
23
+ embeddings_docs = modelo_emb.encode(documentos, convert_to_numpy=True)
24
+
25
+ dim = embeddings_docs.shape[1]
26
+ index = faiss.IndexFlatL2(dim)
27
+ index.add(embeddings_docs)
28
+
29
+ # --- Pipeline de pregunta-respuesta ---
30
+ qa_pipeline = pipeline("question-answering", model="PlanTL-GOB-ES/roberta-base-bne-sqac")
31
+
32
+ # --- Función de chatbot ---
33
+ def chat_biblioteca(pregunta):
34
+ embedding = modelo_emb.encode([pregunta], convert_to_numpy=True)
35
+ D, I = index.search(embedding, k=2)
36
+ contexto = " ".join([documentos[i] for i in I[0]])
37
+
38
+ try:
39
+ resultado = qa_pipeline(question=pregunta, context=contexto)
40
+ respuesta = resultado["answer"]
41
+ return respuesta
42
+ except:
43
+ return "Lo siento, no pude procesar tu pregunta. ¿Puedes intentar reformularla?"
44
+
45
+ # --- Interfaz Gradio ---
46
+ iface = gr.Interface(
47
+ fn=chat_biblioteca,
48
+ inputs=gr.Textbox(label="Haz tu pregunta", placeholder="¿Cuál es el horario de la biblioteca?"),
49
+ outputs=gr.Textbox(label="Respuesta del BiblioBot"),
50
+ title="📚 BiblioBot - Asistente Virtual de Biblioteca",
51
+ description="Pregúntame sobre horarios, servicios, préstamos, normas o actividades de la biblioteca universitaria. Estoy aquí para ayudarte."
52
+ )
53
+
54
+ iface.launch()