Spaces:
Sleeping
Sleeping
File size: 5,677 Bytes
9b5b26a c19d193 6aae614 8fe992b 9b5b26a 5df72d6 9b5b26a 3d1237b 9b5b26a 8c01ffb e859fe1 6bc9ac3 8a7c133 c10be8d 8a7c133 6bc9ac3 737c90a c10be8d 8a7c133 c10be8d d26894b c10be8d d26894b 0908fe6 476882d 61614af 476882d d26894b 476882d e859fe1 476882d c10be8d 8a7c133 88141c7 64efced 88141c7 1b9e29f 0908fe6 88141c7 5658739 88141c7 5658739 88141c7 e6dfe62 88141c7 6aae614 ae7a494 e121372 bf6d34c f40be10 fe328e0 13d500a 8c01ffb 9b5b26a 8c01ffb 861422e 9b5b26a 8c01ffb 8fe992b d623796 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 | 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)}"
import re # Import regular expression library
import re # Import regular expression library
@tool
def get_stock_price(stock: str) -> str:
"""
Fetches the current stock price using DuckDuckGo search.
Args:
stock: A stock ticker symbol or company name (e.g., 'AAPL', 'GOOGL'). # Added description here
Returns:
str: A message with the stock price or an error message.
"""
try:
# Initialize the DuckDuckGo search tool
search_tool = DuckDuckGoSearchTool()
# Perform the search
search_results = search_tool(f"current stock price of {stock}")
return search_results
# Debugging: Print results to see what is returned
print(f"DEBUG: search results -> {search_results}")
# # Handle different result types
# if isinstance(search_results, list) and len(search_results) > 0:
# # Try to extract the stock price from the first result
# first_result = search_results[0]
# # Attempt to find a pattern like "123.45 USD" in the text
# match = re.search(r"(\d+\.\d+)\s*(USD|EUR|CAD|GBP)", first_result, re.IGNORECASE)
# if match:
# price = match.group(1)
# currency = match.group(2)
# return f"The current price for {stock} is: {price} {currency}"
# else:
# return f"Could not extract stock price from search results for {stock}."
# elif isinstance(search_results, str):
# # Try to directly find a price in the string
# match = re.search(r"(\d+\.\d+)\s*(USD|EUR|CAD|GBP)", search_results, re.IGNORECASE)
# if match:
# price = match.group(1)
# currency = match.group(2)
# return f"The current price for {stock} is: {price} {currency}"
# else:
# return f"Could not extract stock price from search results for {stock}."
# else:
# return f"No search results found for {stock}."
except Exception as e:
return f"Error fetching price for stock '{stock}': {str(e)}"
@tool
def duckweb_search(query: str) -> str:
"""
Fetches the information using DuckDuckGo search.
Args:
query: A query or question # Added description here
Returns:
str: A message with the search result or an error message.
"""
try:
# Initialize the DuckDuckGo search tool
search_tool = DuckDuckGoSearchTool()
# Perform the search
search_results = search_tool(query)
return f"the answer is {search_results}"
# Debugging: Print results to see what is returned
print(f"DEBUG: search results -> {search_results}")
# # Handle different result types
# if isinstance(search_results, list) and len(search_results) > 0:
# # Try to extract the stock price from the first result
# first_result = search_results[0]
# # Attempt to find a pattern like "123.45 USD" in the text
# return f"the answer is {first_result}"
# else:
# return f"No search results found for {query}."
except Exception as e:
return f"Error fetching price for stock '{query}': {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
# model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud',
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, get_stock_price, get_current_time_in_timezone, duckweb_search], ## 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() |