Ferocious0xide's picture
update app.py
b50c4f3 verified
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()