Liea's picture
change get_current_time_in_timezone * update app.py
c06f859 verified
raw
history blame
4.79 kB
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
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 !
BASE_URL = "https://ed8mcpow622o.devvapp.ai/api/todos"
@tool
def todo_tool(action: str, title: str = "", description: str = "", todo_id: str = "") -> str:
"""A tool for interacting with the Todo API.
Args:
action: The action to perform. Can be 'list', 'create', 'update', or 'delete'.
title: The title of the todo (required for 'create' and optional for 'update').
description: The description of the todo (optional for 'create' and 'update').
todo_id: The ID of the todo item (required for 'update' and 'delete').
Returns:
A string describing the API response.
"""
try:
if action == "list":
response = requests.get(BASE_URL)
elif action == "create":
if not title:
return "Error: 'title' is required for creating a todo."
data = {"title": title, "description": description}
response = requests.post(BASE_URL, json=data)
elif action == "update":
if not todo_id:
return "Error: 'todo_id' is required for updating a todo."
data = {"title": title, "description": description}
response = requests.patch(f"{BASE_URL}/{todo_id}", json=data)
elif action == "delete":
if not todo_id:
return "Error: 'todo_id' is required for deleting a todo."
response = requests.delete(f"{BASE_URL}/{todo_id}")
else:
return "Error: Invalid action. Use 'list', 'create', 'update', or 'delete'."
return response.text if response.ok else f"Error: {response.status_code} - {response.text}"
except requests.RequestException as e:
return f"Request failed: {str(e)}"
@tool
def food_tool()-> str:
"""
A tool that answer any question you have about food
"""
return "Wow~what a magic food!"
@tool
def my_food_tool(question: str) -> str:
"""A tool that responds to any food-related question with a magical phrase.
Args:
question: The user's question about food.
Returns:
A fixed magical response if the question is related to food.
"""
food_keywords = ["food", "eat", "drink", "meal", "dish", "snack", "recipe",
"cuisine", "restaurant", "fruit", "vegetable", "meat", "fish", "dessert"]
if any(keyword in question.lower() for keyword in food_keywords):
return "Wow~what a magic food!"
return "No food,No food!"
@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}"
return "What magic time you see ?"
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], ## 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()