File size: 2,972 Bytes
0f92422
7ac47ff
bb42f19
7ac47ff
 
9b5b26a
 
c19d193
8fe992b
bb42f19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
7ac47ff
 
 
 
9b5b26a
 
 
 
 
 
7ac47ff
 
9b5b26a
7ac47ff
 
9b5b26a
 
 
 
 
 
 
 
 
8c01ffb
 
bb42f19
6aae614
0f92422
cef52d0
7ac47ff
 
13d500a
8c01ffb
bb42f19
 
 
 
cef52d0
7ac47ff
 
 
8c01ffb
7ac47ff
9b5b26a
8c01ffb
7ac47ff
8c01ffb
8fe992b
7ac47ff
 
 
bb42f19
 
 
7ac47ff
8c01ffb
 
861422e
8fe992b
 
7ac47ff
 
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
from smolagents import CodeAgent, DuckDuckGoSearchTool, load_tool, tool, HfApiModel
from tools.final_answer import FinalAnswerTool
import Gradio_UI       # ← we’ll patch its stream_to_gradio
from Gradio_UI import GradioUI

import datetime
import pytz
import yaml

# --- Monkey-patch to guard against None token counts ─────────────
# Wrap the original stream_to_gradio so that None → 0 for token counting
_original_stream = Gradio_UI.stream_to_gradio
def _patched_stream_to_gradio(agent, task, reset_agent_memory=False):
    for msg in _original_stream(agent, task, reset_agent_memory):
        # ensure these are ints
        if agent.model.last_input_token_count is None:
            agent.model.last_input_token_count = 0
        if agent.model.last_output_token_count is None:
            agent.model.last_output_token_count = 0
        yield msg

Gradio_UI.stream_to_gradio = _patched_stream_to_gradio
# ────────────────────────────────────────────────────────────────────


# --- Custom Tool Example (You can edit this) ---
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 ?"


# --- Working Timezone Tool ---
def get_current_time_in_timezone(timezone: str) -> str:
    """
    A tool that fetches the current local time in a specified timezone.
    Args:
        timezone: A string representing 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)}"


# --- Load and configure model ---
final_answer = FinalAnswerTool()
model = HfApiModel(
    model_id='Qwen/Qwen3-Coder-30B-A3B-Instruct',
    max_tokens=2096,
    temperature=0.5,
)

# initialize counters so they're never None
model.last_input_token_count = 0
model.last_output_token_count = 0


# --- Load System Prompts ---
with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)

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

# --- Create the Agent ---
agent = CodeAgent(
    model=model,
    tools=[
        final_answer,
        image_generation_tool,
        # DuckDuckGoSearchTool(),                # optional
        # tool(my_custom_tool),                  # if you decorate it
        # tool(get_current_time_in_timezone),    # likewise
    ],
    max_steps=6,
    verbosity_level=1,
    prompt_templates=prompt_templates
)

# --- Launch UI ---
GradioUI(agent).launch()