Spaces:
Sleeping
Sleeping
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() | |