Spaces:
Sleeping
Sleeping
File size: 16,497 Bytes
749e037 82aca74 6fe8a28 f17b6f4 82aca74 036602c 82aca74 4fc7b11 69e805e 4fc7b11 da8582e 5553158 d70de9a 5553158 82aca74 ff80541 8cc129e a8b8434 fba07ce 8cc129e 0daf41c 8cc129e f73fc64 50ac2cc bfc7ec6 d70de9a ad4baa1 14091c4 ad4baa1 14091c4 ad4baa1 677c0ff 50ac2cc 64a573c 82aca74 0898631 82aca74 ba00e53 0898631 82aca74 9a3679b abae930 82aca74 0898631 abae930 0898631 abae930 0898631 82aca74 0898631 82aca74 0898631 82aca74 0898631 1bf5e43 0898631 51d4c19 2d82370 1bf5e43 ff80541 590db40 ff80541 d70de9a ff80541 590db40 ad4baa1 590db40 ad4baa1 ff80541 590db40 d70de9a 590db40 ff80541 590db40 1bf5e43 590db40 ff80541 0daf41c db7a2d8 590db40 ff80541 590db40 d70de9a 590db40 214b208 450fac3 639b473 590db40 450fac3 b4aaf5d 67fefc1 068e395 67fefc1 649f25f 068e395 7356799 582aba4 7356799 36b7b60 b4aaf5d 590db40 c9386eb 590db40 49a9b20 590db40 51d4c19 7684a9f 51d4c19 7684a9f eff4f20 43d17a2 776300e 590db40 da8582e 7684a9f eff4f20 43d17a2 590db40 7684a9f 590db40 6fe8a28 590db40 db7a2d8 590db40 6b5adc5 db7a2d8 590db40 450fac3 6b5adc5 450fac3 6b5adc5 64a573c 6b5adc5 450fac3 6b5adc5 64a573c 24f107e 6b5adc5 450fac3 ff80541 6b5adc5 590db40 6b5adc5 ff80541 590db40 6b5adc5 590db40 26b642b 590db40 93b8f4d 590db40 93b8f4d 10b3886 ff80541 10b3886 17192b1 27b2788 17192b1 10b3886 82aca74 749e037 c9f90e4 | 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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 | import gradio as gr
import random
import urllib.parse
# 📚 Base de conocimiento
base_conocimiento = [
{
"claves": ["servicio", "hacen", "ofrecen","servicios"],
"respuesta": """Nuestros servicios:\n
• Inducción.
• HiperOPAC.
• Prétamo y uso interno.
• Asesorías personalizadas.
• Renovación de material telefónica y presencial.
• Agendamiento en línea de capacitación.
• Cambio de datos del domicilio.
• Envío de alertas y sugerencias.
• Extracto de cuenta.
• Asistente de investigación (IA).
• Bx de comendación.
• Elaboración de bibliografías.
• Conmutación bibliográfica.
• Préstamo interbibliotecario.
• Programa ABC (Bibliografía para cursos).
• Servicios de alertas y novedades bibliográficas.
• Talleres de desarrollo de habilidades informativas.
• Bufé literario.
• Club de amigos.
• Literatura para oír.
• Proyección de películas.
• Tertulias literarias."""
},
{
"claves": ["norma", "regla", "prohibido", "comer"],
"respuesta": "Debes mantener el silencio, no consumir alimentos, no fumar, levantar las sillas al moverlas, cuidar la tapicería y superficies, cuidar los materiales y acatar las sugerencias de los funcionarios."
},
{
"claves": ["contacto", "numero", "llamar","telefono","teléfono","teléfonos"],
"respuesta": "Realiza tu llamada a los siguiente números...\n Contacto: 6056931919 Ext 2806 - 4115"
},
{
"claves": ["préstamos interbibliotecario", "préstamo interbibliotecario", "prestamos interbibliotecario","prestamo interbibliotecario"],
"respuesta": "Puedes solicitar préstamos de recursos de información pertenecientes a las Instituciones con las cuales tenemos convenios, a través del correo electrónico infobiblioteca@utb.edu.co."
},
{
"claves": ["devolver", "devolución", "devolucion","devoluciones"],
"respuesta": "Puedes realizar las devoluciones en cualquier sede.\nLos libros se solicitan y devuelven en los puntos de Circulación y Préstamo: Primer piso en la Biblioteca Ternera y cuarto piso (Sala 403, Edificio MB) en Manga ."
},
{
"claves": ["primo", "catalogo", "catálogo"],
"respuesta": "PRIMO es el catálogo en línea donde puedes buscar, reservar y renovar libros...\n👉 [Ir al catálogo](https://primo.utb.edu.co/discovery/search?vid=57UTB_INST:57UTB_INST)"
},
{
"claves": ["fototeca", "fotos", "archivo fotografico","archivo fotográfico","fotografía","fotografia","foto"],
"respuesta": "🖼️ La fototeca de la UTB conserva material fotográfico institucional e histórico. Puedes consultarla para fines académicos o de investigación a través de la biblioteca...\n👉 [Visitar la fototeca](https://www.utb.edu.co/biblioteca/fototeca-historica-cartagena-de-indias/)\nPara material de la Fototeca, debes enviar una solicitud detallando lo relacionado con el material al correo electrónico fototeca@utb.edu.co"
},
{
"claves": ["biblioteca utb", "pagina de la biblioteca","página de la biblioteca", "informacion de biblioteca", "web biblioteca","información de biblioteca"],
"respuesta": "🌐 En la página oficial...\n👉 [Visitar biblioteca UTB](https://www.utb.edu.co/biblioteca-utb/)"
},
{
"claves": ["prestamo", "préstamo","préstamos","prestamos", "prestar", "libros prestar", "cuantos libros", "cuantos dias", "tiempo prestamo","prestan","prestado"],
"respuesta": """Inicia sesión en el buscador Primo y ve a la sección 'Mi Cuenta' / 'Mis Préstamos'.\nLos libros se solicitan en circulación y préstamo (primer piso de la biblioteca) y cuarto piso (Sala 403, Edificio MB) en Manga de manera presencial y con su carnet estudiantil.\n📚 Reglamento de préstamo:
👩🎓 Estudiantes:
• General: 3 libros por 7 días
• Literatura/Arte/Geografía e historia: 2 libros por 15 días
• Trabajo de grado/Monografías/Tesis: 2 libros por 5 días
• Reserva: 2 libros Hasta el siguiente día hábil
• Audiovisual: 2 libros por 5 días
• Hemeroteca: 1 libro por 2 días
• Referencia/Referencia continúa/Prensa: Solo consulta en sala
👩🎓 Estudiantes de maestría y doctorado:
• General: 10 libros por 7 días
• Literatura/Arte/Geografía e historia: 2 libros por 15 días
• Trabajo de grado/Monografías/Tesis: 2 libros por 5 días
• Reserva: 2 libros Hasta el siguiente día hábil
• Audiovisual: 2 libros por 5 días
• Hemeroteca: 1 libro por 2 días
• Referencia/Referencia continúa/Prensa: Solo consulta en sala
👨🏫 Profesores:
• General: 3 libros por 7 días
• Literatura/Arte/Geografía e historia: 2 libros por 15 días
• Trabajo de grado/Monografías/Tesis: 2 libros por 5 días
• Reserva: 2 libros Hasta el siguiente día hábil
• Audiovisual: 2 libros por 5 días
• Hemeroteca: 1 libro por 2 días
• Referencia/Referencia continúa/Prensa: Solo consulta en sala
👩🏻💻 Empleados:
• General: 2 libros por 7 días
• Literatura/Arte/Geografía e historia: 2 libros por 15 días
• Trabajo de grado/Monografías/Tesis: 2 libros por 5 días
• Reserva: 2 libros Hasta el siguiente día hábil
• Audiovisual: 2 libros por 5 días
• Hemeroteca: 1 libro por 2 días
• Referencia/Referencia continúa/Prensa: Solo consulta en sala
👩🎓 Egresado:
• General: 2 libros por 7 días
• Literatura/Arte/Geografía e historia: 2 libros por 7 días
🙎🏻♀️Club de amigos:
• Literatura/Arte/Geografía e historia: 2 libros
🏫 Instituciones con convenio de préstamo interbibliotecario:
• General: 10 libros
💸 Multas:
• $1.000 por día (general)
• $2.000 por día (material especial)"""
}
]
# 👋 Saludos
saludos = ["hola", "buenas", "buenos días", "buenas tardes", "buenas noches"]
# 🧠 Memoria simple
historial_global = []
# 🧹 Limpiar texto
def limpiar_consulta(texto):
palabras_basura = [
"el", "la", "los", "las","necesito", "quiero", "buscar", "buscando", "busca", "busco", "buscame",
"estoy", "como", "solicito","un", "una", "libro", "de", "por", "favor",
"me", "puedes", "ayudar", "con", "tambien", "ademas", "otro"
]
palabras = texto.lower().split()
palabras_limpias = [p for p in palabras if p not in palabras_basura]
return " ".join(palabras_limpias)
# 🔀 Separar múltiples libros
def separar_consultas(texto):
separadores = [" y ", ",", " e "]
for sep in separadores:
if sep in texto:
return [t.strip() for t in texto.split(sep)]
return [texto]
# 🔗 Generar link PRIMO
def generar_link_primo(consulta):
base_url = "https://primo.utb.edu.co/discovery/search"
params = {
"vid": "57UTB_INST:57UTB_INST",
"query": f"any,contains,{consulta}"
}
return f"{base_url}?{urllib.parse.urlencode(params)}"
# 🤖 Función principal
def dividir_intenciones(texto):
separadores = [" y ", ",", " tambien ", " también "]
for sep in separadores:
if sep in texto:
return [t.strip() for t in texto.split(sep)]
return [texto]
def responder(mensaje, historial):
mensaje = mensaje.lower().strip()
partes = dividir_intenciones(mensaje) #
saludo = ""
respuesta = ""
if any(s in mensaje for s in ["hola", "buenas", "buenos días", "buenas tardes","buenas noches"]):
saludo = "¡Hola! 😊\n\n"
# 👋 SOLO SALUDO
if any(s in mensaje for s in saludos) and len(mensaje.strip()) < 10:
return random.choice([
"¡Hola! 😊 Soy tu asistente de la biblioteca UTB 📚\n\n¿En qué puedo ayudarte?",
"¡Hola! 👋 Estoy aquí para ayudarte con la biblioteca 📚",
"¡Hola! 😄 Puedes preguntarme sobre libros, horarios, servicios y más"
])
# 🎓 CAPACITACIONES
if "capacit" in mensaje or "asesor" in mensaje:
respuesta += """🎓 Puedes agendar tu capacitación aquí, ingresando con tus credenciales institucionales:
👉 [Agendar capacitación](https://outlook.office365.com/book/ServiciosBibliotecarios@utb.edu.co/?ismsaljsauthenabled=true)
"""
# 📚 HORARIO
if any(p in mensaje for p in ["horario", "hora", "abren", "cierran", "trabajan"]):
respuesta += """📚 Nuestro horario es:
Campus Tecnológico: Lunes a viernes: 7am - 7pm / Sábados: 8am - 12m
Casa Lemaitre: Lunes a jueves: 7am - 5pm / Viernes: 7am - 6pm / Sábado: 8am - 2pm
"""
# 📊 BASES DE DATOS
if "bases de datos" in mensaje or "biblioteca digital" in mensaje:
respuesta += """📊 Entra al portal de la Biblioteca, sección 'Bases de Datos'. Ingresa con tu usuario y contraseña institucional para consultar recursos especializados.
👉 [Biblioteca digital](https://www.utb.edu.co/biblioteca-utb/biblioteca-digital/)
"""
# 🏛️ REPOSITORIO
if "repositorio" in mensaje or "tesis" in mensaje:
respuesta += """🏛️Encuentra artículos de investigación, libros, revistas, fotos y demás recursos de tu interés, producidos por la Universidad Tecnológica de Bolívar.:
👉 [Repositorio UTB](https://repositorio.utb.edu.co/home)
"""
# 🔎 BÚSQUEDA DE UN LIBRO
if any(p in mensaje for p in ["como buscar", "cómo buscar", "búsqueda de un libro", "como hago una busqueda"]):
respuesta += """🔎 Para buscar un libro en la biblioteca:
1. Ingresa al catálogo PRIMO
2. Escribe el título, autor o tema
3. Usa los filtros para refinar resultados
👉 [Ir a PRIMO](https://primo.utb.edu.co/discovery/search?vid=57UTB_INST:57UTB_INST)
"""
# 💻 SOLICITUD DE DOCUMENTO DIGITAL
if any(p in mensaje for p in ["artículo", "articulo", "capítulo","capitulo","capitulo de libro","caítulo de libro"]):
respuesta += """💻 Usa el buscador Primo, identificarse con sus credenciales (correo y contraseña institucional) realizar la búsqueda y seleccionar el documento haciendo la respectiva solicitud a la biblioteca.\nSi el artículo/capítulo de libro no se encuentra en el catálogo puedes solicitarlo por nuestro formulario en blanco.
🎥 Video:
👉 [Solicitud de documento digital](https://www.youtube.com/watch?v=CbTWl0Htq7w)
📄 Formulario:
👉 [Formulario en blanco](https://primo.utb.edu.co/discovery/blankIll?vid=57UTB_INST:57UTB_INST)
"""
# 📚 UBICAR LIBRO EN ESTANTERÍA (HYPEROPAC)
if any(p in mensaje for p in ["ubicar", "ubico", "estantería","estanteria"]):
respuesta += """📚 Busca el libro en Primo filtrando por la disponibilidad en la Biblioteca Luis Enrique Borja Baron el cual te dará acceso al HiperOpac. Si necesitas ayuda, el personal de sala te guiará.
👉 [Descargar presentación](https://huggingface.co/spaces/Mapu25/chatbot-biblioteca/resolve/main/HiperOPAC.pptx)
"""
# 📖 ASISTENTE IA
if any(p in mensaje for p in ["asistente de investigación", "asistente de investigacion", "inteligencia artificial"]):
respuesta += """📖 Asistente de investigación:
👉 [Ir al asistente](https://primo.utb.edu.co/discovery/researchAssistant?vid=57UTB_INST:57UTB_INST)
🎥 Video:
👉 [Ver video](https://www.youtube.com/watch?v=aMJm7gFbCJw&t=1s)
"""
#PROGRAMA ABC
if any(p in mensaje for p in ["programa ABC", "programa abc", "bibliografía para cursos","bibliografia para cursos"]):
respuesta += """📖 Programa ABC:
🎥 Video Cite it del programa ABC:
👉 [Ver video](https://www.youtube.com/watch?v=w8XN3VgD68k)
"""
mensaje = mensaje.lower().replace(",", " ").strip()
partes = dividir_intenciones(mensaje)
# 🔁 PROCESAR CADA PARTE
for parte in partes:
parte = parte.strip()
# 🚫 IGNORAR BASURA
if not parte or len(parte) < 3:
continue
# 📖 RENOVACIÓN
if any(p in parte for p in ["renov", "renuevo", "renovar", "renovación", "renovacion"]):
respuesta += """📖 Renovación de libros: Podrás extender los períodos de préstamos una vez dentro de la fecha establecida de devolución, de forma presencial, telefónica o virtual desde el catálogo del Sistema de Bibliotecas, ingresando con tu usuario y contraseña.
👉 [Renovar en PRIMO](https://primo.utb.edu.co/discovery/account?vid=57UTB_INST:57UTB_INST§ion=loans&lang=es)
"""
# 📚 RESERVA
if any(p in parte for p in ["reserv", "reservo", "reservar", "reserva"]):
respuesta += """📚 Reserva de libros: Puedes reservar libros físicos directamente desde el buscador Primo iniciando sesión con tu cuenta y contraseña.
👉 [Ir al catálogo](https://primo.utb.edu.co/discovery/search?vid=57UTB_INST:57UTB_INST)
🎥 Video guía:
👉 [Ver video](https://www.youtube.com/watch?v=ahmo6iLG2Es&t=141s)
"""
# 📄 PAZ Y SALVO
if "paz y salvo" in mensaje:
respuesta += """📄 Solicita tu paz y salvo en el siguiente link. Además de realizar la solicitud por el formulario debe tener en cuenta que no puede tener multa bibliográfica, y que de acuerdo con la opción de grado cargar el soporte en la solicitud realizada.
👉 [Formulario](https://forms.office.com/pages/responsepage.aspx?id=UJ5k6tInGEOcuS_P_hb9QfLUIQI8HudFvLRcZQ9xPDZUOFhFMUkzNlNOWFJXSDNSNTIwSTdRNlc5WC4u&route=shorturl)
"""
# ✍🏻 TRABAJOS DE GRADO
if any(p in mensaje for p in ["subir", "enviar", "cargar", "depositar", "subo", "subir tesis", "entregar tesis", "trabajo de grado","autoarchivo"]):
respuesta += """✍🏻 Solamente es responsabilidad del docente cargar el trabajo de grado al autoarchivo. Debes seguir la guía de auto-archivo disponible en la sección de Trabajos de Grado de la web. Asegúrate de tener el formato de autorización firmado y el archivo en PDF.
👉 [Depósitos](https://primo.utb.edu.co/deposit/57UTB_INST&auth=SAML)
"""
# 🔎 BÚSQUEDA DE LIBROS (SOLO SI ES BÚSQUEDA REAL)
palabras_busqueda = [
"buscar", "busco", "buscame",
"quiero leer", "necesito el libro", "estoy buscando"
]
if (
any(p in mensaje for p in palabras_busqueda)
and not any(p in mensaje for p in [
"como", "cómo", # 🔥 CLAVE: bloquea preguntas explicativas
"renov", "prest", "reserv", "ubicar", "estanter"
])
):
consulta = limpiar_consulta(mensaje).strip()
if consulta:
consultas = separar_consultas(consulta)
texto = "🔎 Encontré esto:\n\n"
for c in consultas:
link = generar_link_primo(c)
texto += f"📚 **{c.capitalize()}**\n👉 [Ver en PRIMO]({link})\n\n"
respuesta += texto
# 📚 BASE DE CONOCIMIENTO (CLAVE)
for item in base_conocimiento:
if any(p in mensaje for p in item["claves"]):
respuesta += item["respuesta"] + "\n\n"
break
# ❌ SI NO HAY RESPUESTA
if not respuesta:
return random.choice([
"No tengo esa información 😅",
"Puedes preguntarme sobre libros, horarios, servicios y más 📚"
])
# ✅ RESPUESTA FINAL
return saludo + respuesta
chat = gr.ChatInterface(
responder,
title="📚 Biblioteca UTB",
description="Asistente virtual de la biblioteca",
chatbot=gr.Chatbot(
value=[
{
"role": "assistant",
"content": "👋 ¡Hola! Soy tu asistente de la biblioteca UTB 📚\n\nPuedo ayudarte con:\n📊Bases de datos\n🔎Búsqueda de libros\n🎓Capacitaciones\n📷Fototeca\n📅Horarios\n🧾Paz y salvo\n📗Préstamos y renovación\n📄Reglamento\n👩🏻💻Repositorio\n💻Servicios\n✍🏻Trabajos de grado\n\n¿En qué te ayudo?"
}
]
)
)
chat.launch(ssr_mode=False) |