Spaces:
Sleeping
Sleeping
File size: 3,031 Bytes
bece47b 9b5b26a c19d193 6aae614 9b5b26a bece47b 9aedbf9 c778676 ee43a34 c778676 ee43a34 1cb1525 c778676 1cb1525 c778676 1cb1525 c778676 1cb1525 c778676 1cb1525 c778676 1cb1525 c778676 1cb1525 c778676 9b5b26a 90dd6dc 9b5b26a 90dd6dc 9b5b26a 90dd6dc 9b5b26a 90dd6dc 8c01ffb bece47b 8c01ffb 6aae614 90dd6dc ae7a494 e121372 bece47b 13d500a 8c01ffb 90dd6dc bece47b 8c01ffb 8fe992b 4982450 90dd6dc c778676 9aedbf9 4982450 90dd6dc 8c01ffb 90dd6dc 8fe992b bece47b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | 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
# --- FERRAMENTAS PERSONALIZADAS ---
@tool
def get_time_diff_between_timezones(timezone_a: str, timezone_b: str) -> str:
"""Calcula a diferença de horas entre duas timezones quaisquer.
Args:
timezone_a: A primeira timezone (ex: 'Europe/Lisbon').
timezone_b: A segunda timezone para comparar (ex: 'Asia/Tokyo').
"""
try:
# Definir as timezones
tz_a = pytz.timezone(timezone_a)
tz_b = pytz.timezone(timezone_b)
# Obter a data atual
now = datetime.datetime.now()
# Calcular os offsets em relação ao UTC
offset_a = tz_a.localize(now).utcoffset().total_seconds() / 3600
offset_b = tz_b.localize(now).utcoffset().total_seconds() / 3600
diff = offset_a - offset_b
if diff == 0:
return f"Não há diferença horária entre {timezone_a} e {timezone_b}."
# Lógica para explicar a diferença de forma humana
if diff > 0:
return f"{timezone_a} está {abs(diff)} horas à frente de {timezone_b}."
else:
return f"{timezone_a} está {abs(diff)} horas atrás de {timezone_b}."
except Exception as e:
return f"Erro ao calcular a diferença entre {timezone_a} e {timezone_b}: {str(e)}"
@tool
def get_current_time_in_timezone(timezone: str) -> str:
"""Busca a hora local atual numa timezone específica.
Args:
timezone: Uma string de timezone válida (ex: 'Europe/Lisbon').
"""
try:
tz = pytz.timezone(timezone)
local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
return f"A hora atual em {timezone} é: {local_time}"
except Exception as e:
return f"Erro ao obter a hora para '{timezone}': {str(e)}"
# --- INICIALIZAÇÃO ---
final_answer = FinalAnswerTool()
search_tool = DuckDuckGoSearchTool()
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
)
# RECOMENDAÇÃO: Se o ficheiro prompts.yaml estiver a causar o KeyError 'final_answer',
# o melhor é não o carregar até que o ficheiro esteja corrigido.
prompt_templates = None
try:
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
except Exception:
print("Aviso: prompts.yaml não encontrado ou inválido. Usando templates padrão.")
# --- CRIAÇÃO DO AGENTE ---
agent = CodeAgent(
model=model,
tools=[
final_answer,
search_tool,
get_time_diff_between_timezones, # Substitui a antiga por esta
get_current_time_in_timezone
],
max_steps=10,
verbosity_level=1,
prompt_templates=prompt_templates if prompt_templates else None
)
if __name__ == "__main__":
GradioUI(agent).launch() |