zo6-xzz's picture
Update app.py 4
fda4320 verified
Raw History Blame Contribute Delete
3.74 kB
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
import os
from Gradio_UI import GradioUI
API_KEY = os.getenv("TMDB_API_KEY")
BASE_URL = "https://api.themoviedb.org/3"
# 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 get_top_10_movies_by_genre(genre: str) -> str:
"""A tool that fetches the top 10 movies of a given genre using the TMDb API.
Args:
genre: A string representing the movie genre(e.g: 'Action', 'Fiction', 'Comedy', etc.
"""
try:
genre_response = requests.get(
f"{BASE_URL}/genre/movie/list",
params={"api_key": API_KEY}
)
genre_data = genre_response.json()
genre_map = {g["name"].lower(): g["id"] for g in genre_data["genres"]}
genre_id = genre_map.get(genre.lower())
if not genre_id:
return f"Genre '{genre}' not found. Available genres: {list(genre_map.keys())}"
movies_response = requests.get(
f"{BASE_URL}/discover/movie",
params={
"api_key": API_KEY,
"with_genres": genre_id,
"sort_by": "vote_average.desc",
"vote_count.gte": 1000
}
)
movies_data = movies_response.json()
movies = [m["title"] for m in movies_data.get("results", [])[:10]]
if not movies:
return f"No movies found for genre '{genre}'."
return f"Top 10 {genre.capitalize()} movies:\n" + "\n".join(movies)
except Exception as e:
return f"Error fetching movies for genre '{genre}': {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='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud',# 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, get_top_10_movies_by_genre],## 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()