from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool import spaces import datetime import requests import pytz import yaml from tools.final_answer import FinalAnswerTool from Gradio_UI import GradioUI # Below is an example of a tool that does nothing. Amaze us with your creativity ! @tool def my_custom_tool(arg1:str, arg2:int)-> 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 does nothing yet Args: arg1: the first argument arg2: the second argument """ return "What magic will you build ?" @tool 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)}" @tool def calculate_vat(price: float, country: str) -> str: """ Calculates the final price including standard VAT for Spain or Portugal. Args: price: Price before VAT. country: Country where VAT should be applied. Use "Spain" or "Portugal". """ country = country.lower().strip() if country in ["spain", "españa"]: vat_rate = 0.21 elif country in ["portugal"]: vat_rate = 0.23 else: return "Country not supported. Please use Spain or Portugal." vat_amount = price * vat_rate final_price = price + vat_amount return ( f"Base price: €{price:.2f}. " f"VAT rate: {vat_rate * 100:.0f}%. " f"VAT amount: €{vat_amount:.2f}. " f"Final price: €{final_price:.2f}." ) @tool def calculate_field_of_view( focal_length: float, sensor_format: str ) -> str: """ Calculates the full-frame equivalent focal length and approximate diagonal field of view for different camera sensor formats. Args: focal_length: Actual focal length of the lens in millimeters. sensor_format: Sensor format. Supported values include: "full frame", "canon aps-c", "aps-c", "micro four thirds", "mft", "4/3". """ import math sensor_format = sensor_format.lower().strip() if sensor_format in ["full frame", "full-frame", "ff"]: crop_factor = 1.0 sensor_name = "Full Frame" elif sensor_format in [ "canon aps-c", "canon apsc", "canon crop" ]: crop_factor = 1.6 sensor_name = "Canon APS-C" elif sensor_format in [ "aps-c", "apsc", "nikon aps-c", "nikon dx", "sony aps-c", "fujifilm aps-c", "fuji aps-c", "pentax aps-c" ]: crop_factor = 1.5 sensor_name = "APS-C (1.5x)" elif sensor_format in [ "micro four thirds", "micro 4/3", "mft", "4/3", "four thirds" ]: crop_factor = 2.0 sensor_name = "Micro Four Thirds" else: return ( "Unsupported sensor format. Try Full Frame, Canon APS-C, " "APS-C, or Micro Four Thirds." ) equivalent_focal_length = focal_length * crop_factor # Full-frame diagonal is approximately 43.27 mm. # Dividing it by the crop factor gives the equivalent sensor diagonal. full_frame_diagonal = 43.27 sensor_diagonal = full_frame_diagonal / crop_factor diagonal_fov = math.degrees( 2 * math.atan(sensor_diagonal / (2 * focal_length)) ) return ( f"Sensor format: {sensor_name}. " f"Crop factor: {crop_factor:.1f}x. " f"Actual focal length: {focal_length:.1f} mm. " f"Full-frame equivalent focal length: " f"{equivalent_focal_length:.1f} mm. " f"Approximate diagonal field of view: " f"{diagonal_fov:.1f} degrees." ) 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) #Aquí añado esto para ver si así arranca el app. @spaces.GPU def run_image_generation(prompt: str): return image_generation_tool(prompt) @tool def generate_image(prompt: str) -> str: """ Generates an image from a textual description. Args: prompt: A detailed description of the image to generate. """ return run_image_generation(prompt) with open("prompts.yaml", 'r') as stream: prompt_templates = yaml.safe_load(stream) agent = CodeAgent( model=model, tools=[ generate_image, DuckDuckGoSearchTool(), get_current_time_in_timezone, calculate_vat, calculate_field_of_view, final_answer ], ## 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()