File size: 3,167 Bytes
3d60a28
9b5b26a
 
 
c19d193
f78d551
 
 
2bcc110
6aae614
9b5b26a
 
32548b2
 
 
f78d551
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
f78d551
 
9b5b26a
f78d551
9b5b26a
f78d551
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
f78d551
 
 
 
 
 
 
32548b2
 
 
 
f78d551
 
9b5b26a
 
f78d551
9b5b26a
f78d551
9b5b26a
 
 
 
 
 
f78d551
8c01ffb
6aae614
ae7a494
e121372
f78d551
 
 
 
13d500a
8c01ffb
f78d551
861422e
 
f78d551
8c01ffb
8fe992b
f78d551
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
f78d551
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
import asyncio
import datetime
import requests
import pytz
import yaml
from bs4 import BeautifulSoup  # For web scraping
from PIL import Image  # For image processing
from io import BytesIO
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI

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

# Weather Tool (using wttr.in API, no API key needed)
@tool
def get_weather(city: str) -> str:
    """Fetches the current weather for a given city.
    Args:
        city: The name of the city (e.g., 'London').
    """
    try:
        url = f"https://wttr.in/{city}?format=%C+%t+%w"
        response = requests.get(url)
        return f"Weather in {city}: {response.text}"
    except Exception as e:
        return f"Error fetching weather: {str(e)}"

# Web Scraping Tool (Extracts headlines and articles from a given news website)
@tool
def scrape_news(url: str) -> str:
    """Scrapes headlines and article text from a news website.
    Args:
        url: The URL of the news site.
    """
    try:
        headers = {'User-Agent': 'Mozilla/5.0'}
        response = requests.get(url, headers=headers)
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # Extracting headlines
        headlines = [h.get_text() for h in soup.find_all('h1')][:5]
        articles = [p.get_text() for p in soup.find_all('p')][:5]
        
        return f"Headlines:\n" + "\n".join(headlines) + "\n\nArticles:\n" + "\n".join(articles)
    except Exception as e:
        return f"Error scraping news: {str(e)}"

# Image Generation Tool (uses existing text-to-image tool)
@tool
def generate_image(prompt: str) -> str:
    """Generates an image based on the given text prompt.
    Args:
        prompt: A description of the image to generate.
    """
    try:
        return image_generation_tool.run(prompt)
    except Exception as e:
        return f"Error generating image: {str(e)}"

# Timezone Tool (already in your code)
@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """Fetches 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: {str(e)}"

final_answer = FinalAnswerTool()

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

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

agent = CodeAgent(
    model=model,
    tools=[final_answer, get_weather, scrape_news, generate_image],
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)

GradioUI(agent).launch()