Spaces:
Sleeping
Sleeping
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 | |
# Tool personalizzato per ottenere l'ora attuale in qualsiasi città | |
def get_current_time(city: str) -> str: | |
"""Restituisce l'ora attuale per una città specificata dall'utente. | |
Args: | |
city (str): Il nome della città per cui ottenere l'ora. | |
Returns: | |
str: Una stringa contenente l'ora attuale nella città richiesta oppure un messaggio di errore. | |
""" | |
try: | |
# Mapping della città alla sua timezone | |
timezone = pytz.timezone(city) | |
local_time = datetime.datetime.now(timezone).strftime("%Y-%m-%d %H:%M:%S") | |
return f"L'ora attuale a {city.capitalize()} è: {local_time}" | |
except Exception as e: | |
return f"Errore nel recupero dell'ora per {city}: {str(e)}" | |
final_answer = FinalAnswerTool() | |
model = HfApiModel( | |
max_tokens=2096, | |
temperature=0.5, | |
model_id='Qwen/Qwen2.5-Coder-32B-Instruct', | |
custom_role_conversions=None, | |
) | |
# Importa lo strumento di generazione immagini dal tool Hub | |
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True) | |
with open("prompts.yaml", 'r') as stream: | |
prompt_templates = yaml.safe_load(stream) | |
agent = CodeAgent( | |
model=model, | |
tools=[final_answer, get_current_time], # Aggiunto il nuovo tool per qualsiasi città | |
max_steps=6, | |
verbosity_level=1, | |
grammar=None, | |
planning_interval=None, | |
name=None, | |
description=None, | |
prompt_templates=prompt_templates | |
) | |
# Funzione per interpretare la richiesta e restituire l'ora della città specificata | |
def interpret_and_respond(query: str) -> str: | |
"""Interpreta la richiesta dell'utente e restituisce l'ora per una città specificata. | |
Args: | |
query (str): La domanda dell'utente contenente la città richiesta. | |
Returns: | |
str: Una stringa contenente l'ora attuale nella città richiesta oppure un messaggio di errore. | |
""" | |
words = query.lower().split() | |
if "time" in words or "ora" in words: | |
for word in words: | |
try: | |
return get_current_time(word) | |
except: | |
continue | |
return "Per favore, specifica una città valida." | |
return "Mi dispiace, non ho capito la richiesta. Puoi riformularla?" | |
agent.tools.append(interpret_and_respond) | |
GradioUI(agent).launch() | |