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()