Spaces:
Sleeping
Sleeping
import gradio as gr | |
from transformers import pipeline | |
from sentence_transformers import SentenceTransformer | |
import faiss | |
import numpy as np | |
# --- Base documental: información sobre la biblioteca --- | |
documentos = [ | |
"La biblioteca abre de lunes a viernes de 8:00 a.m. a 6:00 p.m.", | |
"Los estudiantes pueden prestar hasta 3 libros por 15 días.", | |
"Puedes buscar libros en el catálogo en línea accediendo desde la página web institucional.", | |
"No se permite comer ni beber dentro de la biblioteca.", | |
"Hay salas de estudio grupal disponibles con reserva previa.", | |
"La biblioteca cuenta con acceso a bases de datos académicas para estudiantes.", | |
"Para renovar un libro, debes ingresar al sistema antes de la fecha de vencimiento.", | |
"Se realizan talleres de lectura y escritura todos los miércoles a las 3 p.m.", | |
"Los libros extraviados deben ser reportados inmediatamente al personal de la biblioteca.", | |
"Los usuarios deben mantener el silencio dentro de las instalaciones." | |
] | |
# --- Cargar modelo de embeddings y crear índice FAISS --- | |
modelo_emb = SentenceTransformer('sentence-transformers/bert-base-nli-mean-tokens') | |
embeddings_docs = modelo_emb.encode(documentos, convert_to_numpy=True) | |
dim = embeddings_docs.shape[1] | |
index = faiss.IndexFlatL2(dim) | |
index.add(embeddings_docs) | |
# --- Pipeline de pregunta-respuesta --- | |
qa_pipeline = pipeline("question-answering", model="PlanTL-GOB-ES/roberta-base-bne-sqac") | |
# --- Función de chatbot --- | |
def chat_biblioteca(pregunta): | |
embedding = modelo_emb.encode([pregunta], convert_to_numpy=True) | |
D, I = index.search(embedding, k=2) | |
contexto = " ".join([documentos[i] for i in I[0]]) | |
try: | |
resultado = qa_pipeline(question=pregunta, context=contexto) | |
respuesta = resultado["answer"] | |
return respuesta | |
except: | |
return "Lo siento, no pude procesar tu pregunta. ¿Puedes intentar reformularla?" | |
# --- Interfaz Gradio --- | |
iface = gr.Interface( | |
fn=chat_biblioteca, | |
inputs=gr.Textbox(label="Haz tu pregunta", placeholder="¿Cuál es el horario de la biblioteca?"), | |
outputs=gr.Textbox(label="Respuesta del BiblioBot"), | |
title="📚 BiblioBot - Asistente Virtual de Biblioteca", | |
description="Pregúntame sobre horarios, servicios, préstamos, normas o actividades de la biblioteca universitaria. Estoy aquí para ayudarte." | |
) | |
iface.launch() | |