import gradio as gr from transformers import pipeline from datetime import datetime import pytz import requests import wikipedia # Configura el idioma de Wikipedia wikipedia.set_lang("es") # Español # Crear el chatbot usando el modelo de transformers pipe = pipeline("text-generation", model="Isotonic/gpt-human-assistant") # Lista de malas palabras a filtrar malas_palabras = ["maldito", "estúpido", "imbécil", "tonto", "wn", "weon", "chucha", "mierda", "carajo", "wea", "ctm", "conchetumare"] # Puedes agregar más malas palabras aquí # Función para obtener el clima en Viña del Mar con Open-Meteo def get_weather(): url = "https://api.open-meteo.com/v1/forecast?latitude=-33.0153&longitude=-71.5503¤t_weather=true" response = requests.get(url) if response.status_code == 200: data = response.json() temp = data["current_weather"]["temperature"] windspeed = data["current_weather"]["windspeed"] return f"El clima es de {temp}°C con una velocidad de viento de {windspeed} km/h." else: return "Lo siento, no pude obtener el clima en este momento." # Función para filtrar malas palabras def filtrar_malas_palabras(texto): for palabra in malas_palabras: if palabra in texto.lower(): return True return False # Función para buscar en Wikipedia def buscar_wikipedia(consulta): try: summary = wikipedia.summary(consulta, sentences=2) return summary except wikipedia.exceptions.DisambiguationError: return "Hay muchos temas relacionados con esa búsqueda. ¿Podrías especificar más?" except wikipedia.exceptions.PageError: return "No encontré información sobre ese tema en Wikipedia." except Exception as e: return "Lo siento, ocurrió un error al buscar la información." # Función para obtener la respuesta del bot def get_response(user_input): # Filtrar malas palabras if filtrar_malas_palabras(user_input): return "Por favor, mantén un lenguaje respetuoso. No tolero las malas palabras." # Respuestas personalizadas respuestas_personalizadas = { "hola": "¡Hola, soy Jarbot! ¿Cómo puedo ayudarte hoy?", "horario": "El horario del Jardín Botánico es de 9:00 a 18:00 todos los días.", "actividades": "Hoy tenemos visitas guiadas, talleres de jardinería y un evento especial de conservación.", "especies": "El Jardín alberga una gran variedad de plantas y animales, como cactus, helechos, gansos, y más.", "reglas": "Por favor, no recojas plantas, respeta las áreas designadas y mantén limpio el Jardín.", "picnic": "¡Claro que sí! Contamos con áreas designadas para picnic.", "movilidad reducida": "Sí, el Jardín cuenta con caminos accesibles y rampas para todos.", "historia": "El Jardín Botánico fue fundado en 1951 y ha sido un espacio de conservación y educación desde entonces.", "clima": get_weather(), "hora": datetime.now(pytz.timezone("America/Santiago")).strftime('Son las %H:%M.'), "plantas": "Tenemos una gran variedad, desde árboles nativos hasta flores exóticas. ¿Te interesa alguna en particular?", "cactus": "Contamos con un bonito cactario con más de 680 ejemplares de cactus chilenos y centroamericanos.", "tu animal favorito": "¿Mi animal favorito? Creo que los patos, ¡cuack!", "tu propósito": "¡Soy el asistente del Jardín Botánico! Estoy aquí para ayudarte.", "donar": "Lo siento, no puedes donar especies al Jardín Botánico, ya que trabajamos en conservar las existentes.", "amigo": "¡Claro que sí, somos amigos! 😊", "recomendación": "Te recomiendo usar bloqueador solar y llevar agua, especialmente en días calurosos.", "basura": "Por favor, deposita la basura en los contenedores designados.", "patos": "Los patos están más adentro del Jardín. ¡Explora un poco para encontrarlos!", "queja": "Para quejas, contacta a la administración del Jardín. ¡Espero que no sea nada malo sobre mí! 🙃", "trabajas": "¡Trabajo para que tengas una experiencia increíble en el Jardín Botánico!" } # Verificar si hay una respuesta personalizada for clave, respuesta in respuestas_personalizadas.items(): if clave in user_input.lower(): return respuesta # Consultar en Wikipedia para temas relevantes temas_wikipedia = [ "fundación", "ubicación", "especies", "flora nativa", "conservación", "bosque esclerófilo", "flora mediterránea", "plantas endémicas", "biodiversidad en peligro de extinción", "restauración ecológica", "horticultura", "botánica aplicada", "programas de conservación" ] for tema in temas_wikipedia: if tema in user_input.lower(): return buscar_wikipedia(tema) # Si la entrada no coincide con nada return "Lo siento, no entendí bien la pregunta. ¿Podrías reformularla?" # Crear la interfaz con Gradio iface = gr.Interface(fn=get_response, inputs="text", outputs="text", title="Asistente Virtual", description="¡Escribe algo para interactuar con el asistente!") # Lanzar la interfaz iface.launch()