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() |