Spaces:
Sleeping
Sleeping
File size: 6,842 Bytes
67ed0c5 d03367b 9b5b26a 67ed0c5 c19d193 67ed0c5 685045c d03367b 9b5b26a 1912e17 9b5b26a d03367b 1912e17 d03367b 00f7a0b d03367b 9b5b26a 67ed0c5 9b5b26a d03367b 1912e17 38530fa d03367b 1912e17 d03367b 9b5b26a 8c01ffb d03367b 1912e17 d03367b 8c01ffb d03367b ae7a494 d03367b 8c01ffb d03367b 8c01ffb d03367b 8c01ffb 8fe992b d03367b 8c01ffb d03367b 8fe992b 67ed0c5 8c01ffb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | # 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() |