File size: 2,361 Bytes
3d569d4
 
 
 
 
 
 
9b5b26a
 
c19d193
8fe992b
3d569d4
9b5b26a
 
3d569d4
 
 
 
 
9b5b26a
3d569d4
 
9b5b26a
 
 
 
3d569d4
 
9b5b26a
 
 
3d569d4
9b5b26a
3d569d4
9b5b26a
 
 
 
 
 
 
8c01ffb
 
3d569d4
 
 
 
6aae614
ae7a494
3d569d4
 
 
 
 
 
 
ae7a494
e121372
3d569d4
 
 
 
13d500a
8c01ffb
 
3d569d4
 
 
 
 
8c01ffb
3d569d4
 
 
 
 
 
 
 
 
 
 
861422e
3d569d4
 
 
 
 
 
8c01ffb
8fe992b
3d569d4
 
 
 
 
 
8c01ffb
 
 
 
 
 
3d569d4
8fe992b
 
9b5b26a
3d569d4
 
 
 
 
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
from smolagents import (
    CodeAgent,
    DuckDuckGoSearchTool,
    HfApiModel,
    load_tool,
    tool,
)
import datetime
import pytz
import yaml

from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI


# -------------------------
# Custom tools
# -------------------------

@tool
def my_custom_tool(arg1: str, arg2: int) -> str:
    """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:
    """Fetch the current local time in a specified timezone.
    Args:
        timezone: A valid timezone (e.g., 'America/New_York')
    """
    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)}"


# -------------------------
# Required final answer tool
# -------------------------

final_answer = FinalAnswerTool()


# -------------------------
# Model (FIXED)
# -------------------------
# NOTE:
# 32B models do NOT work on the free HF Inference API.
# Use a smaller model unless you have a dedicated endpoint.

model = HfApiModel(
    model_id="Qwen/Qwen2.5-Coder-7B-Instruct",  # ✅ corrected
    max_tokens=2096,
    temperature=0.5,
    custom_role_conversions=None,
)


# -------------------------
# Optional tools
# -------------------------

search_tool = DuckDuckGoSearchTool()

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


# -------------------------
# Prompt templates
# -------------------------

with open("prompts.yaml", "r") as stream:
    prompt_templates = yaml.safe_load(stream)


# -------------------------
# Agent
# -------------------------

agent = CodeAgent(
    model=model,
    tools=[
        final_answer,
        search_tool,
        my_custom_tool,
        get_current_time_in_timezone,
    ],
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates,
)


# -------------------------
# UI
# -------------------------

GradioUI(agent).launch()