File size: 2,982 Bytes
9b5b26a
 
 
 
c19d193
6aae614
8fe992b
9b5b26a
ecd4181
7cb41fc
ecd4181
9b5b26a
d9a0ba7
d7dde43
 
 
 
 
 
 
 
 
 
9b5b26a
d7dde43
 
7cb41fc
d7dde43
 
 
d9a0ba7
d7dde43
 
d9a0ba7
d7dde43
 
 
d9a0ba7
d7dde43
 
d9a0ba7
 
d7dde43
 
 
 
d9a0ba7
 
 
7cb41fc
d7dde43
d9a0ba7
d7dde43
d9a0ba7
 
d7dde43
 
6aae614
ae7a494
 
 
 
e121372
bf6d34c
 
41d1605
 
fe328e0
13d500a
8c01ffb
d9a0ba7
861422e
 
d9a0ba7
 
8c01ffb
8fe992b
7cb41fc
8c01ffb
 
 
 
 
 
861422e
8fe992b
 
9b5b26a
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
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool

from Gradio_UI import GradioUI

import os

@tool
def news_aggregator(keyword: str, max_results: int = 5) -> str:
    """
    A tool that fetches the latest news articles related to a specific keyword.
    
    Args:
        keyword: The topic or keyword to search for (e.g., "AI", "technology").
        max_results: The maximum number of articles to return (default is 5).
    
    Returns:
        A string containing the titles and URLs of the latest news articles.
    """
    try:
        # Fetch the API key from environment variables
        api_key = os.getenv("NEWSAPI_KEY")
        if not api_key:
            return "Error: NewsAPI key is missing. Please set the NEWSAPI_KEY environment variable."
        
        # Construct the API URL
        url = f"https://newsapi.org/v2/everything?q={keyword}&pageSize={max_results}&apiKey={api_key}"
        
        # Make the API request
        response = requests.get(url)
        response.raise_for_status()  # Raise an error for bad status codes
        
        # Parse the JSON response
        data = response.json()
        
        # Check if the response contains articles
        articles = data.get("articles", [])
        if not articles:
            return f"No news articles found for the keyword '{keyword}'."
        
        # Format the results
        result = f"Here are the latest news articles about '{keyword}':\n"
        for i, article in enumerate(articles, 1):
            title = article.get("title", "No title")
            url = article.get("url", "#")
            result += f"{i}. {title}\n   {url}\n"
        
        return result
    
    except requests.exceptions.RequestException as e:
        return f"Error fetching news articles: {str(e)}"
    except Exception as e:
        return f"An unexpected error occurred: {str(e)}"
final_answer = FinalAnswerTool()

# If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face Endpoint that also contains qwen2.5 coder:
# model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud' 

model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',# it is possible that this model may be overloaded
#model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud',
custom_role_conversions=None,
)

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

# Agent and tools
agent = CodeAgent(
    model=model,
    tools=[final_answer, news_aggregator], ## add your tools here (don't remove final answer)
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates
)


GradioUI(agent).launch()