Spaces:
Build error
Build error
| from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool, Tool | |
| import datetime | |
| import requests | |
| import pytz | |
| import yaml | |
| import json | |
| from tools.final_answer import FinalAnswerTool | |
| from Gradio_UI import GradioUI | |
| from smolagents import Tool | |
| from epmc_xml import fetch | |
| import requests | |
| import json | |
| class EuropePMCCitationsTool(Tool): | |
| name = "europepmc_citation_downloader" | |
| description = """ | |
| This tool queries the Europe PMC API to retrieve citations for a given PMCID. | |
| It returns a list of cited PMCID strings from the citation list. | |
| """ | |
| inputs = { | |
| "pmcid": { | |
| "type": "string", | |
| "description": "the PMCID to query (e.g., 'PMC7779037')", | |
| } | |
| } | |
| output_type = "array" | |
| def forward(self, pmcid: str): | |
| url = f"https://www.ebi.ac.uk/europepmc/webservices/rest/PMC/{pmcid}/citations?page=1&pageSize=1000&format=json" | |
| headers = { | |
| 'Content-Type': 'application/json', | |
| } | |
| response = requests.get(url, headers=headers) | |
| if response.status_code != 200: | |
| raise Exception(f"Error querying Europe PMC API: {response.status_code}") | |
| data = json.loads(response.text) | |
| citations = data.get("citationList", {}).get("citation", []) | |
| # Extract PMCID strings from citations | |
| pmcid_list = [str(citation.get("id", "")) for citation in citations] | |
| return pmcid_list | |
| class EuropePMCArticleTextTool(Tool): | |
| name = "europepmc_fulltext_downloader" | |
| description = """ | |
| This is a tool that fetches the full text of an article from Europe PMC. | |
| It takes a PMCID (format PMC\d+) as input and returns the full text of the article as a string. | |
| Articles can only be fetched if they are open access; returns emptty string if article is not open access. | |
| """ | |
| inputs = { | |
| "pmcid": { | |
| "type": "string", | |
| "description": "the PMCID of the article to fetch (e.g., 'PMC7779037')", | |
| } | |
| } | |
| output_type = "string" | |
| def forward(self, pmcid: str): | |
| # Fetch the article using epmc_xml | |
| try: | |
| article = fetch.article(pmcid) | |
| # Extract the full text from the article object | |
| full_text = article.get_body() | |
| except: | |
| full_text = ""#f"The article {pmcid} does not appear to be open access." | |
| # Return the full text as a string | |
| return full_text | |
| class PMID2PMCIDConverter(Tool): | |
| name = "pmid_2_pmcid_converter" | |
| description = """ | |
| This tool converts the pmids (all numbers) to pmcids (format PMC\d+). | |
| Use this to convert pmids reported by the citation tool to pmcids needed by the fulltext downloader | |
| """ | |
| inputs = { | |
| "pmid": { | |
| "type": "string", | |
| "description": "the PMID to query (e.g., '36033386')", | |
| } | |
| } | |
| output_type = "string" | |
| def forward(self, pmid): | |
| url = f"https://www.ncbi.nlm.nih.gov/pmc/utils/idconv/v1.0?ids={pmid}&versions=no&format=json" | |
| headers = { | |
| 'Content-Type': 'application/json', | |
| } | |
| response = requests.get(url, headers=headers) | |
| if response.status_code != 200: | |
| raise Exception(f"Error querying NCBI API: {response.status_code}") | |
| data = json.loads(response.text) | |
| pmcid = data.get("records", {})[0].get("pmcid", []) | |
| return pmcid | |
| 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() | |
| citationtool = EuropePMCCitationsTool() | |
| fulltexttool = EuropePMCArticleTextTool() | |
| convert_id_tool = PMID2PMCIDConverter() | |
| # 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='deepseek-ai/DeepSeek-R1-Distill-Qwen-32B',# 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, citationtool, fulltexttool, convert_id_tool], ## 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() |