File size: 2,594 Bytes
9b5b26a
 
 
c19d193
8d66c6f
6aae614
9b5b26a
 
8d66c6f
9b5b26a
 
 
 
 
 
 
 
 
 
 
8c01ffb
8d66c6f
df6192e
8d66c6f
 
 
 
 
 
df6192e
 
 
 
 
 
 
 
 
 
8c01ffb
8d66c6f
6aae614
8d66c6f
 
ae7a494
8d66c6f
 
 
 
 
 
 
13d500a
8c01ffb
8d66c6f
 
 
 
 
8c01ffb
8d66c6f
861422e
 
8d66c6f
 
 
8c01ffb
8fe992b
8d66c6f
 
 
8c01ffb
861422e
8fe992b
 
8d66c6f
8c01ffb
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
import datetime
import requests
import pytz
import yaml
from smolagents import CodeAgent, DuckDuckGoSearchTool, InferenceClientModel, load_tool, ManagedAgent
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI

# 1. Define your custom tools
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)}"

# 2. Setup the Model
'''
model = InferenceClientModel(
    max_tokens=2096,
    temperature=0.5,
    model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
    custom_role_conversions=None,
)
'''
# HfApiModel is the updated standard for Hugging Face Hub inference
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, ManagedAgent

model = HfApiModel(
    model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
    max_tokens=2096,
    temperature=0.5,
    token=None # It will automatically use your HF_TOKEN environment variable
)

# 3. Initialize Base Tools
final_answer = FinalAnswerTool()
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
search_tool = DuckDuckGoSearchTool()

# 4. CREATE A MANAGED AGENT (The "Worker")
# A managed agent needs a 'name' and 'description' so the manager knows how to call it.
web_search_agent = CodeAgent(
    model=model,
    tools=[search_tool],
    name="web_search_agent",
    description="Useful for searching the internet for current events, news, or specific facts."
)

managed_web_agent = ManagedAgent(
    agent=web_search_agent,
    name="web_search",
    description="Runs web searches for you. Give it a detailed query as a task."
)

# 5. Load system prompt
with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)

# 6. CREATE THE MANAGER AGENT
# We pass the managed_web_agent into 'managed_agents'
agent = CodeAgent(
    model=model,
    tools=[final_answer, get_current_time_in_timezone, image_generation_tool],
    managed_agents=[managed_web_agent], # Manager can now delegate to the search agent
    max_steps=10, # Increased steps to allow for delegation overhead
    verbosity_level=1,
    prompt_templates=prompt_templates
)

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