Spaces:
Sleeping
Sleeping
| 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 | |
| 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() |