aiagents4pharma 1.42.0__py3-none-any.whl → 1.43.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. aiagents4pharma/talk2scholars/agents/paper_download_agent.py +7 -4
  2. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/default.yaml +49 -95
  3. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/paper_download_agent/default.yaml +15 -1
  4. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/pdf_agent/default.yaml +16 -2
  5. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/s2_agent/default.yaml +40 -5
  6. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/zotero_agent/default.yaml +15 -5
  7. aiagents4pharma/talk2scholars/configs/config.yaml +1 -3
  8. aiagents4pharma/talk2scholars/configs/tools/paper_download/default.yaml +124 -0
  9. aiagents4pharma/talk2scholars/tests/test_arxiv_downloader.py +478 -0
  10. aiagents4pharma/talk2scholars/tests/test_base_paper_downloader.py +620 -0
  11. aiagents4pharma/talk2scholars/tests/test_biorxiv_downloader.py +697 -0
  12. aiagents4pharma/talk2scholars/tests/test_medrxiv_downloader.py +534 -0
  13. aiagents4pharma/talk2scholars/tests/test_paper_download_agent.py +22 -12
  14. aiagents4pharma/talk2scholars/tests/test_paper_downloader.py +545 -0
  15. aiagents4pharma/talk2scholars/tests/test_pubmed_downloader.py +1067 -0
  16. aiagents4pharma/talk2scholars/tools/paper_download/__init__.py +2 -4
  17. aiagents4pharma/talk2scholars/tools/paper_download/paper_downloader.py +457 -0
  18. aiagents4pharma/talk2scholars/tools/paper_download/utils/__init__.py +20 -0
  19. aiagents4pharma/talk2scholars/tools/paper_download/utils/arxiv_downloader.py +209 -0
  20. aiagents4pharma/talk2scholars/tools/paper_download/utils/base_paper_downloader.py +343 -0
  21. aiagents4pharma/talk2scholars/tools/paper_download/utils/biorxiv_downloader.py +321 -0
  22. aiagents4pharma/talk2scholars/tools/paper_download/utils/medrxiv_downloader.py +198 -0
  23. aiagents4pharma/talk2scholars/tools/paper_download/utils/pubmed_downloader.py +337 -0
  24. aiagents4pharma/talk2scholars/tools/s2/query_dataframe.py +97 -45
  25. aiagents4pharma/talk2scholars/tools/s2/retrieve_semantic_scholar_paper_id.py +47 -29
  26. {aiagents4pharma-1.42.0.dist-info → aiagents4pharma-1.43.0.dist-info}/METADATA +3 -1
  27. {aiagents4pharma-1.42.0.dist-info → aiagents4pharma-1.43.0.dist-info}/RECORD +31 -28
  28. aiagents4pharma/talk2scholars/configs/tools/download_arxiv_paper/default.yaml +0 -4
  29. aiagents4pharma/talk2scholars/configs/tools/download_biorxiv_paper/__init__.py +0 -3
  30. aiagents4pharma/talk2scholars/configs/tools/download_biorxiv_paper/default.yaml +0 -2
  31. aiagents4pharma/talk2scholars/configs/tools/download_medrxiv_paper/__init__.py +0 -3
  32. aiagents4pharma/talk2scholars/configs/tools/download_medrxiv_paper/default.yaml +0 -2
  33. aiagents4pharma/talk2scholars/tests/test_paper_download_biorxiv.py +0 -151
  34. aiagents4pharma/talk2scholars/tests/test_paper_download_medrxiv.py +0 -151
  35. aiagents4pharma/talk2scholars/tests/test_paper_download_tools.py +0 -249
  36. aiagents4pharma/talk2scholars/tools/paper_download/download_arxiv_input.py +0 -177
  37. aiagents4pharma/talk2scholars/tools/paper_download/download_biorxiv_input.py +0 -114
  38. aiagents4pharma/talk2scholars/tools/paper_download/download_medrxiv_input.py +0 -114
  39. /aiagents4pharma/talk2scholars/configs/tools/{download_arxiv_paper → paper_download}/__init__.py +0 -0
  40. {aiagents4pharma-1.42.0.dist-info → aiagents4pharma-1.43.0.dist-info}/WHEEL +0 -0
  41. {aiagents4pharma-1.42.0.dist-info → aiagents4pharma-1.43.0.dist-info}/licenses/LICENSE +0 -0
  42. {aiagents4pharma-1.42.0.dist-info → aiagents4pharma-1.43.0.dist-info}/top_level.txt +0 -0
@@ -1,114 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Tool for downloading medRxiv paper metadata and retrieving the PDF URL.
4
- """
5
-
6
- import logging
7
- from typing import Annotated, Any
8
-
9
- import hydra
10
- import requests
11
- from langchain_core.messages import ToolMessage
12
- from langchain_core.tools import tool
13
- from langchain_core.tools.base import InjectedToolCallId
14
- from langgraph.types import Command
15
- from pydantic import BaseModel, Field
16
-
17
- # Configure logging
18
- logging.basicConfig(level=logging.INFO)
19
- logger = logging.getLogger(__name__)
20
-
21
-
22
- class DownloadMedrxivPaperInput(BaseModel):
23
- """Input schema for the medRxiv paper download tool."""
24
-
25
- doi: str = Field(
26
- description="""The medRxiv DOI, from search_helper or multi_helper or single_helper,
27
- used to retrieve the paper details and PDF URL."""
28
- )
29
- tool_call_id: Annotated[str, InjectedToolCallId]
30
-
31
-
32
- # Fetching raw metadata from medRxiv API for a given DOI
33
- def fetch_medrxiv_metadata(doi: str, api_url: str, request_timeout: int) -> dict:
34
- """
35
- Fetch metadata for a medRxiv paper using its DOI and extract relevant fields.
36
-
37
- Parameters:
38
- doi (str): The DOI of the medRxiv paper.
39
-
40
- Returns:
41
- dict: A dictionary containing the title, authors, abstract, publication date, and URLs.
42
- """
43
- # Strip any version suffix (e.g., v1) since bioRxiv's API is version-sensitive
44
- clean_doi = doi.split("v")[0]
45
-
46
- api_url = f"{api_url}{clean_doi}"
47
- logger.info("Fetching metadata from api url: %s", api_url)
48
- response = requests.get(api_url, timeout=request_timeout)
49
- response.raise_for_status()
50
-
51
- data = response.json()
52
- if not data.get("collection"):
53
- raise ValueError(f"No entry found for medRxiv ID {doi}")
54
-
55
- return data["collection"][0]
56
-
57
-
58
- # Extracting relevant metadata fields from the raw data
59
- def extract_metadata(paper: dict, doi: str) -> dict:
60
- """
61
- Extract relevant metadata fields from a medRxiv paper entry.
62
- """
63
- title = paper.get("title", "")
64
- authors = paper.get("authors", "")
65
- abstract = paper.get("abstract", "")
66
- pub_date = paper.get("date", "")
67
- doi_suffix = paper.get("doi", "").split("10.1101/")[-1]
68
- pdf_url = f"https://www.medrxiv.org/content/10.1101/{doi_suffix}.full.pdf"
69
- logger.info("PDF URL: %s", pdf_url)
70
- return {
71
- "Title": title,
72
- "Authors": authors,
73
- "Abstract": abstract,
74
- "Publication Date": pub_date,
75
- "URL": pdf_url,
76
- "pdf_url": pdf_url,
77
- "filename": f"{doi_suffix}.pdf",
78
- "source": "medrxiv",
79
- "medrxiv_id": doi,
80
- }
81
-
82
-
83
- # Tool to download medRxiv paper metadata and PDF URL
84
- @tool(args_schema=DownloadMedrxivPaperInput, parse_docstring=True)
85
- def download_medrxiv_paper(
86
- doi: str,
87
- tool_call_id: Annotated[str, InjectedToolCallId],
88
- ) -> Command[Any]:
89
- """
90
- Get metadata and PDF URL for a medRxiv paper using its doi or medrxiv id.
91
- """
92
- logger.info("Fetching metadata from medRxiv for DOI: %s", doi)
93
-
94
- # Load configuration
95
- with hydra.initialize(version_base=None, config_path="../../configs"):
96
- cfg = hydra.compose(
97
- config_name="config", overrides=["tools/download_medrxiv_paper=default"]
98
- )
99
- api_url = cfg.tools.download_medrxiv_paper.api_url
100
- request_timeout = cfg.tools.download_medrxiv_paper.request_timeout
101
- logger.info("API URL: %s", api_url)
102
-
103
- raw_data = fetch_medrxiv_metadata(doi, api_url, request_timeout)
104
- metadata = extract_metadata(raw_data, doi)
105
- article_data = {doi: metadata}
106
-
107
- content = f"Successfully retrieved metadata and PDF URL for medRxiv DOI {doi}"
108
-
109
- return Command(
110
- update={
111
- "article_data": article_data,
112
- "messages": [ToolMessage(content=content, tool_call_id=tool_call_id)],
113
- }
114
- )