A-Aryam's picture
enhance hbty func
38530fa verified
Raw
History Blame Contribute Delete
6.84 kB
# old and defaulyt code:
# 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 !
# @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)}"
# 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()
# new code: (by gemini + me + Agents course)
# 1. Import spaces at the top
import datetime
import pytz
import requests
import yaml
import spaces
from smolagents import CodeAgent, HfApiModel, DuckDuckGoSearchTool, load_tool, tool, FinalAnswerTool #, InferenceClientModel,
#from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI
from duckduckgo_search import DDGS # or: from ddgs import DDGS
# Gloable vars and important stuff:
search_tool = DuckDuckGoSearchTool() #for search tool # the easy way.
#search_results = _ddg_search(query)
final_answer = FinalAnswerTool() #final answer tool
# image generation tool
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
# our llm:
model = HfApiModel(
#model = InferenceClientModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
custom_role_conversions=None,
)
# in `prompts.yml` we have sys_prompt.
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
# Tools (user def tools):
@tool
def my_custom_tool(arg1: str, arg2: int) -> str:
"""A tool that does nothing yet
Args:
arg1: the first argument
arg2: the second argument
"""
return "What magic will you build ?"
@tool
def hbty(b_day: str) -> str: #hbty = Happy Birthday to you
"""
A tool for wishing Happy Birthday, If use query or inputs have or contain keyword "birthday" or "bday".
A tool that generates a happy birthday greeting whenever the user mentions 'birthday', 'bday', or asks about birthdays.
Args:
b_day: A string containing a question or statement to check for birthday keywords like 'birthday' or 'bday'.
"""
#return "Happy Birthday To You !!!! :)"
cleaned_input = b_day.lower()
if "birthday" in cleaned_input or "bday" in cleaned_input:
return "Happy Birthday To You !!!! :)"
else:
return "No birthday mentioned in the statement."
@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:
tz = pytz.timezone(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_search_results(query: str) -> str:
"""A tool that fetches the data from the internet, for a specific search query.
Args:
query: A string representing a valid question or request for example, 'What is the capitol of india?'
"""
try:
# DuckDuckGoSearchTool is callable directly with the query string
#search_results = _ddg_search(query)
#return search_results
results = ddg_client.text(query, max_results=5)
return str(results)
except Exception as e:
return f"Error executing search query '{query}': {str(e)}"
@tool
def generate_code_snippet(language: str, task_description: str) -> str:
"""Generates a clean code snippet in a requested programming language for a specific task.
Args:
language: The programming language to write (e.g., 'python', 'cpp', 'javascript', 'sql').
task_description: A clear description of what the code should do.
"""
prompt = f"Write a clean, efficient {language} code snippet to fulfill this task: {task_description}. Provide brief comments."
try:
# Call the model to generate code
response = model([{"role": "user", "content": prompt}])
return response.content
except Exception as e:
return f"Error generating code: {str(e)}"
# Runner code:
# 2. Decorate the agent execution function for ZeroGPU
@spaces.GPU
def run_agent(prompt):
return agent.run(prompt)
# our agent:
agent = CodeAgent(
model=model,
tools=[final_answer,generate_code_snippet,get_search_results,get_current_time_in_timezone,hbty,my_custom_tool,search_tool,image_generation_tool], # 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 # Pass system prompt to CodeAgent
)
# Launch Gradio UI
GradioUI(agent).launch()