maperez's picture
Update app.py
c55edd7 verified
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI
# Herramienta personalizada de ejemplo
@tool
def my_cutom_tool(arg1: str, arg2: int) -> str:
"""A tool that does nothing yet.
Args:
arg1: the first argument
arg2: the second argument
"""
return "What magic will you build?"
# Herramienta para obtener la hora actual en una zona horaria específica
@tool
def get_current_time_in_timezone(timezone: str) -> str:
"""A tool that fetches the current local time in a specified timezone.
Args:
timezone: A string representing a valid timezone (e.g., 'America/New_York').
"""
try:
# Crear objeto de zona horaria
tz = pytz.timezone(timezone)
# Obtener la hora actual en esa zona horaria
local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
return f"The current local time in {timezone} is: {local_time}"
except Exception as e:
return f"Error fetching time for timezone '{timezone}': {str(e)}"
# Herramienta para obtener el clima actual de una ciudad
@tool
def get_current_weather(city: str, api_key: str) -> str:
"""A tool that fetches the current weather for a specified city.
Args:
city: The name of the city to fetch the weather for.
api_key: The API key for OpenWeatherMap.
"""
base_url = "http://api.openweathermap.org/data/2.5/weather?"
complete_url = f"{base_url}q={city}&appid={api_key}&units=metric"
try:
response = requests.get(complete_url)
data = response.json()
if data["cod"] != "404":
main = data["main"]
temperature = main["temp"]
humidity = main["humidity"]
weather_description = data["weather"][0]["description"]
return f"The current temperature in {city} is {temperature}°C with {weather_description}. Humidity is {humidity}%."
else:
return f"City {city} not found."
except Exception as e:
return f"Error fetching weather data: {str(e)}"
# Herramienta de respuesta final
final_answer = FinalAnswerTool()
# Configuración del modelo
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='https://wxknx1kg971u7k1n.us-east-1.aws.endpoints.huggingface.cloud', # Puede estar sobrecargado
custom_role_conversions=None,
)
# Cargar herramienta de generación de imágenes desde el Hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
# Cargar plantillas de prompts desde un archivo YAML
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
# Crear instancias de las herramientas
search_tool = DuckDuckGoSearchTool()
weather_tool = get_current_weather
# Configurar el agente con las herramientas
agent = CodeAgent(
model=model,
tools=[final_answer, search_tool, weather_tool, get_current_time_in_timezone], # Agregar herramientas aquí
max_steps=6,
verbosity_level=1,
grammar=None,
planning_interval=None,
name=None,
description=None,
prompt_templates=prompt_templates
)
# Lanzar la interfaz de Gradio
GradioUI(agent).launch()