Spaces:
Sleeping
Sleeping
File size: 2,388 Bytes
5c8e40d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
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()
|