C-L-V's picture
Update app.py
4ecea64 verified
Raw
History Blame Contribute Delete
5.81 kB
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()