File size: 3,060 Bytes
ce696bb
9b5b26a
 
 
c19d193
ce696bb
 
6aae614
9b5b26a
 
 
 
ce696bb
9b5b26a
 
 
 
 
 
 
 
 
8c01ffb
ce696bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
ce696bb
ae7a494
ce696bb
 
 
 
 
 
 
 
 
 
 
 
 
 
0bac99f
 
 
 
 
ce696bb
 
 
ae7a494
e121372
ce696bb
 
 
 
13d500a
8c01ffb
ce696bb
9b5b26a
8c01ffb
ce696bb
861422e
 
0a91061
ce696bb
 
8c01ffb
8fe992b
ce696bb
 
 
 
 
8e2db10
ce696bb
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
ce696bb
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
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, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
import datetime
import requests
import pytz
import yaml
import os
from bs4 import BeautifulSoup
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI

@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """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)}"

@tool
def summarize_webpage(url: str) -> str:
    """Fetches a web page at `url`, extracts visible text, and returns a summary.
    Args:
        url: A webpage URL to summarize.
    """
    try:
        resp = requests.get(url, timeout=10)
        resp.raise_for_status()
    except Exception as e:
        return f"❌ Could not fetch {url}: {e}"

    soup = BeautifulSoup(resp.text, "html.parser")
    text_blocks = [p.get_text(" ", strip=True) for p in soup.find_all("p")]
    text = "\n\n".join(text_blocks)
    if not text:
        return "❌ No readable content found on the page."

    trimmed_text = text[:12000]

    hf_token = os.getenv("HF_TOKEN")
    if not hf_token:
        return "❌ Missing HF_TOKEN in environment."

    headers = {"Authorization": f"Bearer {hf_token}"}
    payload = {"inputs": trimmed_text}
    api_url = "https://api-inference.huggingface.co/models/facebook/bart-large-cnn"
    try:
        res = requests.post(api_url, headers=headers, json=payload, timeout=60)
        res.raise_for_status()
        return res.json()[0]["summary_text"].strip()
    except Exception as e:
        return f"❌ Failed to summarize page: {e}"


# Get current date.

TODAY = datetime.datetime.now().strftime("%B %d, %Y")  # e.g., "April 30, 2025"

# Instantiate tools and model
final_answer = FinalAnswerTool()
search_tool = DuckDuckGoSearchTool()

model = HfApiModel(
    max_tokens=2096,
    temperature=0.5,
    model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
    custom_role_conversions=None,
)

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

# Load prompt templates
with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)
    prompt_templates["system_prompt"] = prompt_templates["system_prompt"].replace("{{TODAY}}", TODAY)

# Build the agent
agent = CodeAgent(
    model=model,
    tools=[
        final_answer,
        search_tool,
        summarize_webpage,
        image_generation_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
)

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