Spaces:
Running
Running
File size: 6,147 Bytes
9b5b26a c19d193 6aae614 8fe992b 9b5b26a 5df72d6 9b5b26a 3d1237b 9b5b26a 4a757ea 9b5b26a 4a757ea 9b5b26a 4a757ea 9b5b26a 4a757ea 8c01ffb 6aae614 ae7a494 e121372 bf6d34c 29ec968 fe328e0 13d500a 8c01ffb 9b5b26a 8c01ffb e446438 861422e 9b5b26a 8c01ffb 8fe992b d1f7bc6 4a757ea 8c01ffb 861422e 8fe992b 9b5b26a 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 199 200 201 202 203 204 205 206 207 208 209 210 | 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:
"""
Retrieve the current local date and time for a specified timezone.
This tool should be used whenever the user asks about:
- The current time in a city, country, or region.
- Timezone conversions.
- Scheduling meetings across different regions.
- Determining local time before performing an action.
Accepted timezone format:
- Asia/Kolkata
- America/New_York
- Europe/London
- Asia/Tokyo
- Australia/Sydney
Args:
timezone: A valid IANA timezone identifier.
Returns:
A formatted string containing the current local date and time
in the requested timezone.
Example:
get_current_time_in_timezone("Asia/Kolkata")
Expected Output:
Current date and time in Asia/Kolkata:
2026-06-22 14:35:10
"""
try:
tz = pytz.timezone(timezone)
current_time = datetime.datetime.now(tz)
return (
f"Current date and time in {timezone}:\n"
f"{current_time.strftime('%Y-%m-%d %H:%M:%S')}"
)
except Exception as e:
return f"Error: {str(e)}"
@tool
def web_search(query: str) -> str:
"""
Search the public internet using DuckDuckGo and return relevant search results.
This tool should be used whenever up-to-date or real-time information is needed,
including current events, recent news, company information, software releases,
technical documentation, API references, research topics, tutorials, market trends,
product information, or facts that may have changed after the model's training cutoff.
The tool performs a DuckDuckGo web search and returns the most relevant results,
including the page title, summary snippet, and source URL.
Use this tool when:
- The user asks for recent or current information.
- The user asks about news, events, announcements, or updates.
- The user requests information about websites, companies, products, or services.
- Additional verification is needed before answering.
- The user explicitly asks to search the web.
Do NOT use this tool when:
- The answer can be provided from general knowledge alone.
- The user requests creative writing, brainstorming, or opinion generation.
- The information is already available in the conversation context.
Args:
query: A clear and specific search query describing the information
to retrieve. Examples:
- "Latest OpenAI announcements"
- "Python 3.14 release features"
- "Current weather in Kochi"
- "SmolAgents documentation"
Returns:
A formatted string containing the most relevant search results.
Each result includes:
- Title
- Short description/snippet
- Source URL
Examples:
>>> web_search("Latest AI agent frameworks")
Returns a list of recent web results about AI agent frameworks.
>>> web_search("Qwen3 model release")
Returns search results related to the Qwen3 model release.
>>> web_search("FastAPI documentation")
Returns links and summaries for FastAPI documentation.
"""
try:
results = []
with DDGS() as ddgs:
for r in ddgs.text(query, max_results=5):
results.append(
f"Title: {r['title']}\n"
f"Body: {r['body']}\n"
f"URL: {r['href']}\n"
)
return "\n\n".join(results)
except Exception as e:
return f"Search Error: {e}"
@tool
def get_weather(city: str) -> str:
"""
Get the current weather for a city.
Use this tool whenever the user asks:
- Weather information
- Temperature
- Rain forecasts
- Climate conditions
- Outdoor planning questions
Args:
city: Name of a city.
Returns:
Current weather conditions and temperature.
Example:
get_weather("Kochi")
Example Questions:
- What's the weather in Kochi?
- Is it raining in London?
- Current temperature in Tokyo
"""
try:
url = f"https://wttr.in/{city}?format=3"
response = requests.get(url)
return response.text
except Exception as e:
return f"Weather lookup failed: {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)
search_tool = DuckDuckGoSearchTool()
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
agent = CodeAgent(
model=model,
tools=[
final_answer,
search_tool,
get_current_time_in_timezone,
get_weather,
image_generation_tool
],
max_steps=10,
verbosity_level=2,
grammar=None,
planning_interval=None,
name=None,
description=None,
prompt_templates=prompt_templates
)
GradioUI(agent).launch() |