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 | |
import numpy as np | |
from typing import Tuple | |
from Gradio_UI import GradioUI | |
# Below is an example of a tool that does nothing. Amaze us with your creativity ! | |
def get_age_univers(arg1:datetime, arg2:float)-> str: #it's import to specify the return type | |
#Keep this format for the description / args / args description but feel free to modify the tool | |
"""A tool that computes the age of a universe in a given date based on the vacuum energy | |
Args: | |
arg1: the date on which we want to compute the age of the univers | |
arg2: the vacuum energy in GeV | |
""" | |
return "The age of the universe is 14 point 5 billion years" | |
def compute_vacuum_energy(L: float, N_max: int, hbar: float=1.0545718e-34, c: float=3e8)->float: | |
""" | |
Compute the vacuum (zero-point) energy of a scalar field in a 3D box. | |
Args: | |
L: Length of the cubic box in meters. | |
N_max: Maximum mode number in each direction (for cutoff/regularization). | |
hbar: Reduced Planck constant (default is SI units). | |
c: Speed of light (default is SI units). | |
Returns: | |
float: Total vacuum energy in joules. | |
""" | |
energy = 0.0 | |
for nx in range(1, N_max + 1): | |
for ny in range(1, N_max + 1): | |
for nz in range(1, N_max + 1): | |
# Compute magnitude of k-vector | |
k = np.pi * np.sqrt(nx**2 + ny**2 + nz**2) / L | |
omega = c * k | |
energy += 0.5 * hbar * omega | |
return energy | |
def compute_universe_color(age_in_gyr: float) -> Tuple[int, int, int]: | |
""" | |
Estimate the average color of the universe based on its age. | |
Args: | |
age_in_gyr (float): Age of the universe in billions of years (Gyr). | |
Returns: | |
Tuple[int, int, int]: RGB color representing the average color of the universe. | |
""" | |
# Clamp age to a plausible range (0 - 20 Gyr) | |
age = max(0.0, min(age_in_gyr, 20.0)) | |
# Approximate color evolution over time in RGB | |
# 0 Gyr → blue-white (hot stars), 13.8 Gyr → cosmic latte (pale beige), 20 Gyr → reddish | |
if age < 1.0: | |
color = (180, 210, 255) # bright blue-white | |
elif age < 5.0: | |
color = (240, 230, 255) # softer white | |
elif age < 9.0: | |
color = (255, 240, 220) # yellowish | |
elif age < 13.0: | |
color = (255, 230, 210) # pale beige | |
elif age <= 14.0: | |
color = (255, 223, 196) # "cosmic latte" | |
else: | |
color = (240, 200, 180) # redder with star aging | |
return color | |
def convert_energy(value: float, current_unit: str, target_unit: str) -> float: | |
""" | |
Convert an energy value from one unit to another. | |
Args: | |
value: The energy value to convert. | |
current_unit: The unit of the input energy (e.g., 'J', 'eV', 'GeV', 'kcal', 'kWh'). | |
target_unit: The desired output unit. | |
Returns: | |
float: The converted energy value in the target unit. | |
Supported units: | |
- 'J' : Joules | |
- 'eV' : Electronvolts | |
- 'GeV' : Giga-electronvolts | |
- 'kcal' : Kilocalories | |
- 'kWh' : Kilowatt-hours | |
""" | |
UNIT_EQUIVALENT_IN_JOULES: dict[str, float] = { | |
'j': 1.0, | |
'ev': 1.602176634e-19, | |
'gev': 1.602176634e-10, | |
'kcal': 4184.0, | |
'kwh': 3.6e6, | |
} | |
current_unit = current_unit.strip().lower() | |
target_unit = target_unit.strip().lower() | |
supported_units = list(UNIT_EQUIVALENT_IN_JOULES.keys()) | |
if current_unit not in UNIT_EQUIVALENT_IN_JOULES: | |
raise ValueError( | |
f"Unsupported current unit: '{current_unit}'.\n" | |
f"Supported units are: {', '.join(supported_units)}" | |
) | |
if target_unit not in UNIT_EQUIVALENT_IN_JOULES: | |
raise ValueError( | |
f"Unsupported target unit: '{target_unit}'.\n" | |
f"Supported units are: {', '.join(supported_units)}" | |
) | |
value_in_joules = value * UNIT_EQUIVALENT_IN_JOULES[current_unit] | |
converted_value = value_in_joules / UNIT_EQUIVALENT_IN_JOULES[target_unit] | |
return converted_value | |
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: | |
# Create timezone object | |
tz = pytz.timezone(timezone) | |
# Get current time in that 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)}" | |
final_answer = FinalAnswerTool() | |
# If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face Endpoint that also contains qwen2.5 coder: | |
# model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud' | |
model = HfApiModel( | |
max_tokens=2096, | |
temperature=0.5, | |
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',# it is possible that this model may be overloaded | |
custom_role_conversions=None, | |
) | |
# Import tool from 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, image_generation_tool, get_current_time_in_timezone, get_age_univers, convert_energy, compute_vacuum_energy, compute_universe_color], ## add your tools here (don't remove final answer) | |
max_steps=6, | |
verbosity_level=1, | |
grammar=None, | |
planning_interval=None, | |
name=None, | |
description=None, | |
prompt_templates=prompt_templates | |
) | |
GradioUI(agent).launch() |