File size: 2,590 Bytes
0606701
 
9b5b26a
 
c19d193
0606701
8fe992b
0606701
9b5b26a
 
0606701
 
 
 
9b5b26a
0606701
 
 
9b5b26a
0606701
 
9b5b26a
2aa759b
9b5b26a
0606701
9b5b26a
 
0606701
 
9b5b26a
0606701
9b5b26a
 
 
0606701
 
 
9b5b26a
8c01ffb
0606701
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
0606701
 
 
 
 
ae7a494
0606701
 
 
ae7a494
0606701
 
8c01ffb
0606701
8c01ffb
0606701
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
0606701
 
 
8fe992b
9b5b26a
0606701
 
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

from smolagents import CodeAgent, HfApiModel, load_tool, tool
import datetime
import pytz
import yaml
import logging

from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


@tool
def my_custom_tool(arg1: int, arg2: int) -> int:
    """Add two numbers.

    Args:
        arg1: The first number.
        arg2: The second number.
    """
    return arg1 + arg2


@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """Fetch the current local time in a specified timezone.

    Args:
        timezone: A valid timezone, such as Asia/Dubai or America/New_York.
    """
    try:
        tz = pytz.timezone(timezone)
        local_time = datetime.datetime.now(tz).strftime(
            "%Y-%m-%d %H:%M:%S %Z"
        )
        return f"The current local time in {timezone} is: {local_time}"

    except pytz.exceptions.UnknownTimeZoneError:
        return (
            f"Invalid timezone: {timezone}. "
            "Try a valid timezone such as Asia/Dubai."
        )
    except Exception as exc:
        logger.exception("Failed to fetch timezone")
        return f"Error fetching time: {exc}"


def main():
    # Configure the model
    model = HfApiModel(
        max_tokens=2096,
        temperature=0.5,
        model_id="Qwen/Qwen2.5-Coder-32B-Instruct",
        custom_role_conversions=None,
    )

    # Load the image tool
    image_generation_tool = load_tool(
        "agents-course/text-to-image",
        trust_remote_code=True,
    )

    # Load prompt templates
    with open("prompts.yaml", "r", encoding="utf-8") as stream:
        prompt_templates = yaml.safe_load(stream)

    if not isinstance(prompt_templates, dict):
        raise ValueError("prompts.yaml must contain a YAML mapping.")

    final_answer = FinalAnswerTool()

    # Initialize the agent with all tools
    agent = CodeAgent(
        model=model,
        tools=[
            get_current_time_in_timezone,
            my_custom_tool,
            image_generation_tool,
            final_answer,
        ],
        max_steps=6,
        verbosity_level=1,
        grammar=None,
        planning_interval=None,
        name="AI Assistant",
        description=(
            "An AI assistant that can calculate, retrieve local time, "
            "and generate images."
        ),
        prompt_templates=prompt_templates,
    )

    # Do not pass share=True here; your Gradio_UI.py
    # already sets share=True internally.
    GradioUI(agent).launch()


if __name__ == "__main__":
    main()