czrrr's picture
Update app.py
5dc4d4a verified
Raw
History Blame Contribute Delete
3.42 kB
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
# ==========================================
# 🛠️ 1. FERRAMENTAS PERSONALIZADAS
# ==========================================
@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:
tz = pytz.timezone(timezone)
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)}"
@tool
def get_weather(location: str) -> str:
"""A tool that fetches the current weather for a given location.
Args:
location: The name of the city or location (e.g., 'Tokyo', 'Sao Paulo', 'New York').
"""
try:
response = requests.get(f"https://wttr.in/{location}?format=3")
response.raise_for_status()
return f"O clima atual em {location} é: {response.text}"
except Exception as e:
return f"Erro ao buscar o clima para '{location}': {str(e)}"
@tool
def get_exchange_rate(base_currency: str, target_currency: str) -> str:
"""A tool that gets the current exchange rate between two currencies.
Args:
base_currency: The 3-letter code of the currency to convert from (e.g., 'USD', 'EUR').
target_currency: The 3-letter code of the currency to convert to (e.g., 'BRL', 'JPY').
"""
try:
url = f"https://api.frankfurter.app/latest?from={base_currency}&to={target_currency}"
response = requests.get(url)
data = response.json()
rate = data['rates'][target_currency]
return f"A cotação atual é: 1 {base_currency} = {rate} {target_currency}"
except Exception as e:
return "Erro ao buscar a cotação. Verifique se as siglas estão corretas (ex: USD, BRL)."
# ==========================================
# 🤖 2. CONFIGURAÇÃO DO MODELO E HUB TOOLS
# ==========================================
final_answer = FinalAnswerTool()
search_tool = DuckDuckGoSearchTool()
# AQUI ESTÁ A CORREÇÃO: Usando HfApiModel no lugar de InferenceClientModel
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
custom_role_conversions=None,
)
# Carrega ferramentas da comunidade do Hugging Face Hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
# ==========================================
# 🧠 3. INICIALIZAÇÃO DO AGENTE
# ==========================================
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
agent = CodeAgent(
model=model,
tools=[
final_answer,
search_tool,
get_current_time_in_timezone,
get_weather,
get_exchange_rate,
image_generation_tool
],
max_steps=6,
verbosity_level=1,
grammar=None,
planning_interval=None,
name=None,
description=None,
prompt_templates=prompt_templates
)
# Inicia a Interface Visual
GradioUI(agent).launch()