ignacio-ferreira-dev's picture
Update app.py
34d402b verified
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
import os
from twilio.rest import Client
from typing import Union
# Find your Account SID and Auth Token at twilio.com/console
# and set the environment variables. See http://twil.io/secure
account_sid = os.environ["TWILIO_ACCOUNT_SID"]
auth_token = os.environ["TWILIO_AUTH_TOKEN"]
my_number = os.environ["MY_NUMBER"]
client = Client(account_sid, auth_token)
@tool
def send_message(phone_number:str, text:str)-> str:
#Keep this format for the description / args / args description but feel free to modify the tool
"""A tool that sends you a Whatsapp message at the number containing text, returns the status of the message sent in json format
If the number has a 0 right next after the extension, for example: +598092235067 we should use +59892235067 instead.
Args:
phone_number: The phone number, it should have the extension + and country code, without spaces
text: The text that will be sent to the whatsapp number
"""
try:
message = client.messages.create(
from_="whatsapp:"+my_number,
body=text,
to="whatsapp:"+phone_number)
except Exception as e:
return "Error while sending request: "+str(e)
return "Message sent correctly to "+phone_number + " "+str(message)
@tool
def get_cat_fact() -> Union[str, None]:
"""A tool that gives you a random fact about cats each time, it can return a string in case the result is correctly obtained, or none in case there was an error
Args: no args
"""
url = "https://meowfacts.herokuapp.com/"
try:
# Make a GET request to the API
response = requests.get(url)
# Check that the request was successful
if response.status_code == 200:
# Parse the JSON response
data = response.json()
# Extract the fact (if available)
fact = data.get('data', [])[0] if 'data' in data and data['data'] else None
return fact
else:
print(f"Failed to fetch data. Status code: {response.status_code}")
return None
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
return None
@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)}"
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', #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=[send_message, get_cat_fact, 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()