File size: 2,360 Bytes
3121027
9b5b26a
 
c19d193
6aae614
3121027
ebaf70b
5591fd4
3121027
23f40a4
 
 
 
 
 
 
 
 
3121027
 
 
 
 
 
 
 
5591fd4
 
23f40a4
 
3121027
5591fd4
23f40a4
 
3121027
 
23f40a4
5591fd4
 
23f40a4
 
 
5591fd4
23f40a4
3121027
23f40a4
 
3121027
23f40a4
 
 
 
 
 
 
3121027
23f40a4
 
 
3121027
23f40a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3121027
23f40a4
3121027
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
from smolagents import CodeAgent, HfApiModel, load_tool, tool
import datetime
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
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)}"

# Initialize components
final_answer = FinalAnswerTool()

# 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
    ],
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)

# Launch Gradio UI
if __name__ == "__main__":
    GradioUI(agent).launch()