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 | |
| import xml.etree.ElementTree as ET | |
| import os | |
| from Gradio_UI import GradioUI | |
| HF_SECRET = os.getenv("HF_TOKEN") | |
| # Below is an example of a tool that does nothing. Amaze us with your creativity ! | |
| def paper_finder(topics:list, max_paper:int)-> str: #it's import to specify the return type | |
| #Keep this format for the description / args / args description but feel free to modify the tool | |
| """ | |
| Searches arxiv.org for the most recently updated research papers on specified topics. | |
| Args: | |
| topics: A list of topic keywords or phrases (e.g., ['Computer Vision', 'NLP']) to guide the search. | |
| max_paper: The maximum number of papers to retrieve for each topic. | |
| """ | |
| results = [] | |
| for topic in topics: | |
| # request to the arxiv page | |
| query = requests.utils.quote(topic) | |
| url = f"http://export.arxiv.org/api/query?search_query=all:{query}&sortBy=lastUpdatedDate&sortOrder=descending&max_results={max_paper}" | |
| try: | |
| response = requests.get(url) | |
| response.raise_for_status() | |
| # parsing element tree as text | |
| root = ET.fromstring(response.text) | |
| # extract paper information | |
| papers = [] | |
| # arxiv returns responses in Atom 1.0 format "https://info.arxiv.org/help/api/user-manual.html#32-the-api-response" | |
| namespace = {"atom": 'http://www.w3.org/2005/Atom'} | |
| # list of the returned Atom results | |
| for entry in root.findall('atom:entry', namespace): | |
| title = entry.find('atom:title', namespace).text.strip() | |
| summary = entry.find('atom:summary', namespace).text.strip() | |
| published = entry.find('atom:published', namespace).text.strip()[:10] | |
| link = entry.find('./atom:link[@title="pdf"]', namespace) | |
| if link is not None: | |
| pdf_url = link.get('href') | |
| else: | |
| pdf_url = "No PDF link available" | |
| # Authors of the paper | |
| authors = [] | |
| for author in entry.findall('atom:author/atom:name', namespace): | |
| authors.append(author.text.strip()) | |
| # Adding paper | |
| papers.append({ | |
| "title": title, | |
| "authors": ", ".join(authors[:3]) + ("..." if len(authors) > 3 else ""), | |
| "published": published, | |
| "summary": summary[:150] + "..." if len(summary) > 150 else summary, | |
| "pdf_url": pdf_url | |
| }) | |
| # Format the results for this topic | |
| topic_results = f"\n## Latest papers on {topic} ({len(papers)})\n\n" | |
| for i, paper in enumerate(papers, 1): | |
| topic_results += f"{i}. {paper['title']}\n" | |
| topic_results += f" Authors: {paper['authors']}\n" | |
| topic_results += f" Published: {paper['published']}\n" | |
| topic_results += f" Summary: {paper['summary']}\n" | |
| topic_results += f" PDF: {paper['pdf_url']}\n\n" | |
| results.append(topic_results) | |
| except Exception as e: | |
| results.append(f"\n## Error searching for {topic}: {str(e)}\n") | |
| return "\n".join(results) if results else "No papers found for the given topics. Try different search terms." | |
| def get_current_time_in_timezone(timezone: str) -> str: | |
| """A tool that fetches the current local time in a specified timezone. | |
| Args: | |
| timezone: A string representing a valid timezone (e.g., 'America/New_York'). | |
| """ | |
| try: | |
| # Create timezone object | |
| tz = pytz.timezone(timezone) | |
| # Get current time in that 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)}" | |
| 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 | |
| custom_role_conversions=None, | |
| ) | |
| # Import tool from Hub | |
| image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True) | |
| with open("prompts.yaml", 'r') as stream: | |
| prompt_templates = yaml.safe_load(stream) | |
| agent = CodeAgent( | |
| model=model, | |
| tools=[final_answer, paper_finder, get_current_time_in_timezone], ## 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() |