File size: 3,329 Bytes
3121027 9b5b26a c19d193 6aae614 b43ab58 66459aa 3121027 ebaf70b 5591fd4 3121027 23f40a4 3121027 5591fd4 23f40a4 3121027 5591fd4 23f40a4 3121027 23f40a4 5591fd4 23f40a4 5591fd4 23f40a4 3121027 401f9bf b43ab58 401f9bf b43ab58 3121027 b43ab58 3121027 b43ab58 66459aa b43ab58 3121027 b43ab58 3121027 23f40a4 3121027 b43ab58 23f40a4 |
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 |
from smolagents import CodeAgent, HfApiModel, load_tool, tool
import datetime
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from tools.book_tool import BookSearchTool, BookDetailsTool
from tools.arxiv_tool import ArxivSearchTool, LatestPapersTool
from tools.web_search import DuckDuckGoSearchTool
from Gradio_UI import GradioUI
@tool
def calculator(operation: str) -> str:
"""A simple calculator tool that safely evaluates basic math expressions.
Args:
operation: The mathematical expression to evaluate (e.g., "2 + 2", "5 * 3").
Supports basic operations (+, -, *, /) and parentheses.
Returns:
str: The result of the calculation or an error message
"""
try:
allowed_chars = set("0123456789+-*/ .()")
if not all(c in allowed_chars for c in operation):
return "Error: Only basic math operations allowed"
result = eval(operation, {"__builtins__": {}})
return f"Result: {result}"
except Exception as e:
return f"Error calculating {operation}: {str(e)}"
@tool
def get_current_time_in_timezone(timezone: str) -> str:
"""Get the current time in a specified timezone.
Args:
timezone: The name of the timezone to get time for (e.g., 'America/New_York',
'Asia/Tokyo', 'UTC'). Must be a valid timezone string.
Returns:
str: The current time in the specified timezone or an error message
"""
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)}"
def initialize_agent():
"""Initialize and return the CodeAgent with all tools."""
# Initialize tools
final_answer = FinalAnswerTool()
book_search = BookSearchTool()
book_details = BookDetailsTool()
arxiv_search = ArxivSearchTool()
latest_papers = LatestPapersTool()
web_search = DuckDuckGoSearchTool(max_results=5) # Initialize DDG search with 5 results
# Initialize the model
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
custom_role_conversions=None,
)
# Load prompt templates
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
# Initialize agent with all tools
agent = CodeAgent(
model=model,
tools=[
final_answer,
calculator,
get_current_time_in_timezone,
book_search,
book_details,
arxiv_search,
latest_papers,
web_search
],
max_steps=8,
verbosity_level=1,
grammar=None,
planning_interval=None,
name="ResearchAssistant",
description="An AI assistant specialized in helping users discover and research books, papers, and web content on AI and machine learning.",
prompt_templates=prompt_templates
)
return agent
# Launch Gradio UI
if __name__ == "__main__":
# Initialize and launch the agent
agent = initialize_agent()
GradioUI(agent).launch() |