import gradio as gr import os import requests # Token seguro desde variable de entorno API_TOKEN = os.getenv("HF_API_TOKEN") MODEL = "tiiuae/falcon-7b-instruct" HEADERS = {"Authorization": f"Bearer {API_TOKEN}"} # Respuestas fijas para preguntas importantes RESPUESTAS_FIJAS = { "hola": "¡Hola! 😊 Bienvenido a la biblioteca PUCEI. ¿En qué puedo ayudarte?", "saludos": "¡Saludos! Espero que tengas un buen día. ¿En qué puedo ayudarte?", "horario": "Nuestro horario es de lunes a viernes de 08:00 a 20:00, y sábados de 08:00 a 13:00.", "requerimiento": "Por favor, indica el tipo de requerimiento que deseas realizar.", "libros": "Puedes consultar los libros disponibles en nuestra biblioteca desde el catálogo en línea.", "ubicación": "La biblioteca PUCEI se encuentra en la sede principal, edificio central.", "contacto": "Puedes contactarnos al correo biblioteca@pucei.edu.ec o al teléfono (06) XXX-XXXX.", } # Detecta intención de la pregunta def detectar_intencion(texto): texto = texto.lower() for key, respuesta in RESPUESTAS_FIJAS.items(): if key in texto: return respuesta return None # Llamada a la API de Hugging Face def obtener_respuesta_api(texto): url = f"https://api-inference.huggingface.co/models/{MODEL}" data = {"inputs": texto} try: response = requests.post(url, headers=HEADERS, json=data) return response.json()[0]["generated_text"] except: return "Lo siento, no pude procesar tu mensaje en este momento." # Función principal del chatbot híbrido def chatbot_hibrido(message, history): respuesta_fija = detectar_intencion(message) if respuesta_fija: history.append((message, respuesta_fija)) return "", history respuesta_api = obtener_respuesta_api(message) history.append((message, respuesta_api.strip())) return "", history # Interfaz Gradio with gr.Blocks() as demo: gr.Markdown("## 🤖 Chatbot Biblioteca PUCEI (Híbrido con Hugging Face API)") chatbot_ui = gr.Chatbot() msg = gr.Textbox(placeholder="Escribe tu mensaje aquí...") clear = gr.Button("Limpiar conversación") msg.submit(chatbot_hibrido, [msg, chatbot_ui], [msg, chatbot_ui]) clear.click(lambda: [], None, chatbot_ui, queue=False) demo.launch()