Spaces:
Sleeping
Sleeping
File size: 4,844 Bytes
bc26476 9b5b26a c19d193 6aae614 9b5b26a bc26476 9b5b26a 50584ea 9b5b26a 50584ea 9b5b26a 50584ea 9b5b26a 50584ea 8c01ffb bc26476 8c01ffb bc26476 ae7a494 bc26476 ae7a494 bc26476 e121372 bc26476 13d500a 8c01ffb bc26476 861422e 9b5b26a bc26476 8c01ffb 8fe992b 50584ea 8c01ffb 861422e 8fe992b bc26476 8c01ffb |
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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
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
# Custom Tools
@tool
def convert_time_between_timezones(
time_str: str,
from_tz: str,
to_tz: str,
time_format: str = "%Y-%m-%d %H:%M:%S"
) -> str:
"""Converts a time between two timezones, handling DST automatically.
Args:
time_str: The time string to convert (e.g., '2023-12-25 16:00:00')
from_tz: Source timezone (e.g., 'Europe/Madrid', 'UTC+2', 'America/Mexico_City')
to_tz: Target timezone (e.g., 'America/Sao_Paulo', 'UTC-3')
time_format: Format of input/output time strings
"""
try:
# Handle UTC offsets (like 'UTC+2')
if from_tz.startswith('UTC'):
from_tz = f'Etc/GMT{-int(from_tz[3:])}' if '+' in from_tz else f'Etc/GMT{+int(from_tz[3:])}'
if to_tz.startswith('UTC'):
to_tz = f'Etc/GMT{-int(to_tz[3:])}' if '+' in to_tz else f'Etc/GMT{+int(to_tz[3:])}'
# Get timezone objects
from_zone = pytz.timezone(from_tz)
to_zone = pytz.timezone(to_tz)
# Parse time (naive) and localize to source timezone
naive_time = datetime.datetime.strptime(time_str, time_format)
localized_time = from_zone.localize(naive_time)
# Convert to target timezone
converted_time = localized_time.astimezone(to_zone)
# Get current UTC offsets to show the difference
from_offset = localized_time.strftime('%z')
to_offset = converted_time.strftime('%z')
return (f"{localized_time.strftime(time_format)} {from_tz} ({from_offset}) "
f"is {converted_time.strftime(time_format)} {to_tz} ({to_offset})")
except pytz.UnknownTimeZoneError as e:
common_tz = {
'Spain': 'Europe/Madrid',
'São Paulo': 'America/Sao_Paulo',
'SP': 'America/Sao_Paulo',
'Paulo, Mexico': 'America/Mexico_City',
'CEST': 'Europe/Madrid', # Central European Summer Time
'CET': 'Europe/Paris', # Central European Time
'BRT': 'America/Sao_Paulo'
}
if e.args[0] in common_tz:
return f"Note: Using '{common_tz[e.args[0]]}' for '{e.args[0]}'.\n" + \
convert_time_between_timezones(time_str, common_tz[e.args[0]], to_tz, time_format)
return f"Error: Unknown timezone - {str(e)}. Common timezones: Europe/Madrid, America/Sao_Paulo, etc."
except Exception as e:
return f"Error converting time: {str(e)}"
@tool
def weather_lookup(city: str) -> str:
"""Fetches current weather conditions for a specified city.
Args:
city: The city name to get weather for (e.g., 'Paris, France')
"""
try:
response = requests.get(f"https://wttr.in/{city}?format=%C+%t")
return f"Weather in {city}: {response.text}"
except Exception as e:
return f"Error fetching weather: {str(e)}"
@tool
def unit_converter(value: float, from_unit: str, to_unit: str) -> str:
"""Converts between different units (length, weight, temperature).
Args:
value: The numerical value to convert
from_unit: The unit to convert from (e.g., 'miles')
to_unit: The unit to convert to (e.g., 'kilometers')
"""
# Simplified conversion examples
conversions = {
('miles', 'kilometers'): lambda x: x * 1.60934,
('fahrenheit', 'celsius'): lambda x: (x - 32) * 5/9,
('pounds', 'kilograms'): lambda x: x * 0.453592
}
try:
if (from_unit, to_unit) in conversions:
result = conversions[(from_unit, to_unit)](value)
return f"{value} {from_unit} = {result:.2f} {to_unit}"
return f"Conversion from {from_unit} to {to_unit} not supported"
except Exception as e:
return f"Conversion error: {str(e)}"
# Initialize tools
final_answer = FinalAnswerTool()
duckduckgo_search = DuckDuckGoSearchTool()
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
# Initialize model
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
custom_role_conversions=None,
)
# Load system prompt
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
# Create agent with all tools
agent = CodeAgent(
model=model,
tools=[final_answer, duckduckgo_search, image_generation_tool, convert_time_between_timezones],
max_steps=6,
verbosity_level=1,
grammar=None,
planning_interval=None,
name=None,
description=None,
prompt_templates=prompt_templates
)
# Launch the interface
GradioUI(agent).launch() |