aiagents4pharma 1.37.0__py3-none-any.whl → 1.39.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.
- aiagents4pharma/talk2scholars/agents/paper_download_agent.py +12 -4
- aiagents4pharma/talk2scholars/configs/config.yaml +2 -0
- aiagents4pharma/talk2scholars/configs/tools/download_biorxiv_paper/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/tools/download_medrxiv_paper/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/tools/zotero_read/default.yaml +1 -0
- aiagents4pharma/talk2scholars/state/state_talk2scholars.py +33 -7
- aiagents4pharma/talk2scholars/tests/test_paper_download_biorxiv.py +151 -0
- aiagents4pharma/talk2scholars/tests/test_paper_download_medrxiv.py +151 -0
- aiagents4pharma/talk2scholars/tests/test_question_and_answer_tool.py +59 -3
- aiagents4pharma/talk2scholars/tests/test_read_helper_utils.py +110 -0
- aiagents4pharma/talk2scholars/tests/test_s2_display.py +20 -1
- aiagents4pharma/talk2scholars/tests/test_s2_query.py +17 -0
- aiagents4pharma/talk2scholars/tests/test_state.py +25 -1
- aiagents4pharma/talk2scholars/tests/test_zotero_pdf_downloader_utils.py +46 -0
- aiagents4pharma/talk2scholars/tests/test_zotero_read.py +35 -40
- aiagents4pharma/talk2scholars/tools/paper_download/__init__.py +4 -1
- aiagents4pharma/talk2scholars/tools/paper_download/download_biorxiv_input.py +112 -0
- aiagents4pharma/talk2scholars/tools/paper_download/download_medrxiv_input.py +112 -0
- aiagents4pharma/talk2scholars/tools/pdf/question_and_answer.py +82 -41
- aiagents4pharma/talk2scholars/tools/s2/display_dataframe.py +6 -2
- aiagents4pharma/talk2scholars/tools/s2/multi_paper_rec.py +2 -1
- aiagents4pharma/talk2scholars/tools/s2/query_dataframe.py +7 -3
- aiagents4pharma/talk2scholars/tools/s2/search.py +2 -1
- aiagents4pharma/talk2scholars/tools/s2/single_paper_rec.py +2 -1
- aiagents4pharma/talk2scholars/tools/s2/utils/multi_helper.py +2 -0
- aiagents4pharma/talk2scholars/tools/s2/utils/search_helper.py +2 -0
- aiagents4pharma/talk2scholars/tools/s2/utils/single_helper.py +2 -0
- aiagents4pharma/talk2scholars/tools/zotero/utils/read_helper.py +79 -136
- aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_pdf_downloader.py +147 -0
- aiagents4pharma/talk2scholars/tools/zotero/zotero_read.py +42 -9
- {aiagents4pharma-1.37.0.dist-info → aiagents4pharma-1.39.0.dist-info}/METADATA +1 -1
- {aiagents4pharma-1.37.0.dist-info → aiagents4pharma-1.39.0.dist-info}/RECORD +35 -26
- {aiagents4pharma-1.37.0.dist-info → aiagents4pharma-1.39.0.dist-info}/WHEEL +1 -1
- {aiagents4pharma-1.37.0.dist-info → aiagents4pharma-1.39.0.dist-info}/licenses/LICENSE +0 -0
- {aiagents4pharma-1.37.0.dist-info → aiagents4pharma-1.39.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,147 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Utility functions for downloading PDFs from Zotero.
|
4
|
+
"""
|
5
|
+
|
6
|
+
import logging
|
7
|
+
import tempfile
|
8
|
+
from typing import Optional, Tuple, Dict
|
9
|
+
import concurrent.futures
|
10
|
+
import requests
|
11
|
+
|
12
|
+
logger = logging.getLogger(__name__)
|
13
|
+
|
14
|
+
|
15
|
+
def download_zotero_pdf(
|
16
|
+
session: requests.Session,
|
17
|
+
user_id: str,
|
18
|
+
api_key: str,
|
19
|
+
attachment_key: str,
|
20
|
+
**kwargs,
|
21
|
+
) -> Optional[Tuple[str, str]]:
|
22
|
+
"""
|
23
|
+
Download a PDF from Zotero by attachment key.
|
24
|
+
|
25
|
+
Args:
|
26
|
+
session: requests.Session for HTTP requests.
|
27
|
+
user_id: Zotero user ID.
|
28
|
+
api_key: Zotero API key.
|
29
|
+
attachment_key: Zotero attachment item key.
|
30
|
+
kwargs:
|
31
|
+
timeout (int): Request timeout in seconds (default: 10).
|
32
|
+
chunk_size (int, optional): Chunk size for streaming.
|
33
|
+
|
34
|
+
Returns:
|
35
|
+
Tuple of (local_file_path, filename) if successful, else None.
|
36
|
+
"""
|
37
|
+
# Extract optional parameters
|
38
|
+
timeout = kwargs.get("timeout", 10)
|
39
|
+
chunk_size = kwargs.get("chunk_size")
|
40
|
+
# Log configured parameters for verification
|
41
|
+
logger.info("download_zotero_pdf params -> timeout=%s, chunk_size=%s", timeout, chunk_size)
|
42
|
+
# Log download start
|
43
|
+
logger.info(
|
44
|
+
"Downloading Zotero PDF for attachment %s from Zotero API", attachment_key
|
45
|
+
)
|
46
|
+
zotero_pdf_url = (
|
47
|
+
f"https://api.zotero.org/users/{user_id}/items/" f"{attachment_key}/file"
|
48
|
+
)
|
49
|
+
headers = {"Zotero-API-Key": api_key}
|
50
|
+
|
51
|
+
try:
|
52
|
+
response = session.get(
|
53
|
+
zotero_pdf_url, headers=headers, stream=True, timeout=timeout
|
54
|
+
)
|
55
|
+
response.raise_for_status()
|
56
|
+
|
57
|
+
# Download to a temporary file first
|
58
|
+
with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as temp_file:
|
59
|
+
for chunk in response.iter_content(chunk_size=chunk_size):
|
60
|
+
temp_file.write(chunk)
|
61
|
+
temp_file_path = temp_file.name
|
62
|
+
# Temp file written to %s
|
63
|
+
logger.info("Zotero PDF downloaded to temporary file: %s", temp_file_path)
|
64
|
+
|
65
|
+
# Determine filename from Content-Disposition header or default
|
66
|
+
if "filename=" in response.headers.get("Content-Disposition", ""):
|
67
|
+
filename = (
|
68
|
+
response.headers.get("Content-Disposition", "")
|
69
|
+
.split("filename=")[-1]
|
70
|
+
.strip('"')
|
71
|
+
)
|
72
|
+
else:
|
73
|
+
filename = "downloaded.pdf"
|
74
|
+
|
75
|
+
return temp_file_path, filename
|
76
|
+
|
77
|
+
except (requests.exceptions.RequestException, OSError) as e:
|
78
|
+
logger.error(
|
79
|
+
"Failed to download Zotero PDF for attachment %s: %s", attachment_key, e
|
80
|
+
)
|
81
|
+
return None
|
82
|
+
|
83
|
+
|
84
|
+
def download_pdfs_in_parallel(
|
85
|
+
session: requests.Session,
|
86
|
+
user_id: str,
|
87
|
+
api_key: str,
|
88
|
+
attachment_item_map: Dict[str, str],
|
89
|
+
**kwargs,
|
90
|
+
) -> Dict[str, Tuple[str, str, str]]:
|
91
|
+
"""
|
92
|
+
Download multiple PDFs in parallel using ThreadPoolExecutor.
|
93
|
+
|
94
|
+
Args:
|
95
|
+
session: requests.Session for HTTP requests.
|
96
|
+
user_id: Zotero user ID.
|
97
|
+
api_key: Zotero API key.
|
98
|
+
attachment_item_map: Mapping of attachment_key to parent item_key.
|
99
|
+
kwargs:
|
100
|
+
max_workers (int, optional): Maximum number of worker threads (default: min(10, n)).
|
101
|
+
chunk_size (int, optional): Chunk size for streaming.
|
102
|
+
|
103
|
+
Returns:
|
104
|
+
Mapping of parent item_key to (local_file_path, filename, attachment_key).
|
105
|
+
"""
|
106
|
+
# Extract optional parameters
|
107
|
+
max_workers = kwargs.get("max_workers")
|
108
|
+
chunk_size = kwargs.get("chunk_size")
|
109
|
+
# Log configured parameters for verification
|
110
|
+
logger.info(
|
111
|
+
"download_pdfs_in_parallel params -> max_workers=%s, chunk_size=%s",
|
112
|
+
max_workers,
|
113
|
+
chunk_size,
|
114
|
+
)
|
115
|
+
results: Dict[str, Tuple[str, str, str]] = {}
|
116
|
+
if not attachment_item_map:
|
117
|
+
return results
|
118
|
+
|
119
|
+
with concurrent.futures.ThreadPoolExecutor(
|
120
|
+
max_workers=(
|
121
|
+
max_workers
|
122
|
+
if max_workers is not None
|
123
|
+
else min(10, len(attachment_item_map))
|
124
|
+
)
|
125
|
+
) as executor:
|
126
|
+
future_to_keys = {
|
127
|
+
executor.submit(
|
128
|
+
download_zotero_pdf,
|
129
|
+
session,
|
130
|
+
user_id,
|
131
|
+
api_key,
|
132
|
+
attachment_key,
|
133
|
+
chunk_size=chunk_size,
|
134
|
+
): (attachment_key, item_key)
|
135
|
+
for attachment_key, item_key in attachment_item_map.items()
|
136
|
+
}
|
137
|
+
|
138
|
+
for future in concurrent.futures.as_completed(future_to_keys):
|
139
|
+
attachment_key, item_key = future_to_keys[future]
|
140
|
+
try:
|
141
|
+
res = future.result()
|
142
|
+
if res:
|
143
|
+
results[item_key] = (*res, attachment_key)
|
144
|
+
except (requests.exceptions.RequestException, OSError) as e:
|
145
|
+
logger.error("Failed to download PDF for key %s: %s", attachment_key, e)
|
146
|
+
|
147
|
+
return results
|
@@ -1,7 +1,11 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
2
|
|
3
3
|
"""
|
4
|
-
|
4
|
+
Zotero Read Tool
|
5
|
+
|
6
|
+
This LangGraph tool searches a user's Zotero library for items matching a query
|
7
|
+
and optionally downloads their PDF attachments. It returns structured metadata
|
8
|
+
for each found item and makes the results available as an artifact.
|
5
9
|
"""
|
6
10
|
|
7
11
|
import logging
|
@@ -20,7 +24,15 @@ logger = logging.getLogger(__name__)
|
|
20
24
|
|
21
25
|
|
22
26
|
class ZoteroSearchInput(BaseModel):
|
23
|
-
"""Input schema for the Zotero search tool.
|
27
|
+
"""Input schema for the Zotero search tool.
|
28
|
+
|
29
|
+
Attributes:
|
30
|
+
query (str): Search string to match against item metadata.
|
31
|
+
only_articles (bool): If True, restrict results to 'journalArticle' and similar types.
|
32
|
+
limit (int): Maximum number of items to fetch from Zotero.
|
33
|
+
download_pdfs (bool): If True, download PDF attachments for each item.
|
34
|
+
tool_call_id (str): Internal identifier for this tool invocation.
|
35
|
+
"""
|
24
36
|
|
25
37
|
query: str = Field(
|
26
38
|
description="Search query string to find papers in Zotero library."
|
@@ -32,6 +44,10 @@ class ZoteroSearchInput(BaseModel):
|
|
32
44
|
limit: int = Field(
|
33
45
|
default=2, description="Maximum number of results to return", ge=1, le=100
|
34
46
|
)
|
47
|
+
download_pdfs: bool = Field(
|
48
|
+
default=False,
|
49
|
+
description="Whether to download PDF attachments immediately (default True).",
|
50
|
+
)
|
35
51
|
tool_call_id: Annotated[str, InjectedToolCallId]
|
36
52
|
|
37
53
|
|
@@ -41,20 +57,36 @@ def zotero_read(
|
|
41
57
|
only_articles: bool,
|
42
58
|
tool_call_id: Annotated[str, InjectedToolCallId],
|
43
59
|
limit: int = 2,
|
60
|
+
download_pdfs: bool = False,
|
44
61
|
) -> Command[Any]:
|
45
62
|
"""
|
46
|
-
|
63
|
+
Execute a search on the Zotero library and return matching items.
|
47
64
|
|
48
65
|
Args:
|
49
|
-
query (str):
|
50
|
-
|
51
|
-
|
66
|
+
query (str): Text query to search in titles, abstracts, tags, etc.
|
67
|
+
only_articles (bool): When True, only include items of type 'journalArticle'
|
68
|
+
or 'conferencePaper'.
|
69
|
+
tool_call_id (str): Internal ID injected by LangGraph to track this tool call.
|
70
|
+
limit (int, optional): Max number of items to return (1–100). Defaults to 2.
|
71
|
+
download_pdfs (bool, optional): If True, PDFs for each returned item will be downloaded now.
|
72
|
+
If False, only metadata is fetched. Defaults to False.
|
52
73
|
|
53
74
|
Returns:
|
54
|
-
|
75
|
+
Command[Any]: A LangGraph Command updating the agent state:
|
76
|
+
- 'article_data': dict mapping item keys to metadata (and 'pdf_url' if downloaded).
|
77
|
+
- 'last_displayed_papers': identifier pointing to the articles in state.
|
78
|
+
- 'messages': list containing a ToolMessage with a human-readable summary
|
79
|
+
and an 'artifact' referencing the raw article_data.
|
55
80
|
"""
|
56
81
|
# Create search data object to organize variables
|
57
|
-
|
82
|
+
# download_pdfs flag controls whether PDFs are fetched now or deferred
|
83
|
+
search_data = ZoteroSearchData(
|
84
|
+
query=query,
|
85
|
+
only_articles=only_articles,
|
86
|
+
limit=limit,
|
87
|
+
download_pdfs=download_pdfs,
|
88
|
+
tool_call_id=tool_call_id,
|
89
|
+
)
|
58
90
|
|
59
91
|
# Process the search
|
60
92
|
search_data.process_search()
|
@@ -63,7 +95,8 @@ def zotero_read(
|
|
63
95
|
return Command(
|
64
96
|
update={
|
65
97
|
"article_data": results["article_data"],
|
66
|
-
|
98
|
+
# Store the latest article_data mapping directly for display
|
99
|
+
"last_displayed_papers": results["article_data"],
|
67
100
|
"messages": [
|
68
101
|
ToolMessage(
|
69
102
|
content=results["content"],
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: aiagents4pharma
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.39.0
|
4
4
|
Summary: AI Agents for drug discovery, drug development, and other pharmaceutical R&D.
|
5
5
|
Classifier: Programming Language :: Python :: 3
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
@@ -147,12 +147,12 @@ aiagents4pharma/talk2knowledgegraphs/utils/extractions/pcst.py,sha256=m5p0yoJb7I
|
|
147
147
|
aiagents4pharma/talk2scholars/__init__.py,sha256=NOZxTklAH1j1ggu97Ib8Xn9LCKudEWt-8dx8w7yxVD8,180
|
148
148
|
aiagents4pharma/talk2scholars/agents/__init__.py,sha256=c_0Pk85bt-RfK5RMyALM3MXo3qXVMoYS7BOqM9wuFME,317
|
149
149
|
aiagents4pharma/talk2scholars/agents/main_agent.py,sha256=oCSWPj3TUgTIERmYbBTYipNrU1g956LXJEUx-7-KAQ0,3354
|
150
|
-
aiagents4pharma/talk2scholars/agents/paper_download_agent.py,sha256=
|
150
|
+
aiagents4pharma/talk2scholars/agents/paper_download_agent.py,sha256=J_kEl8joQfM80211xlNLZA9RkN52fY58dbCisuiEft8,3687
|
151
151
|
aiagents4pharma/talk2scholars/agents/pdf_agent.py,sha256=GEXzJMQxIeZ7zLP-AlnTMU-n_KXZ7g22Qd9L3USIc_4,3626
|
152
152
|
aiagents4pharma/talk2scholars/agents/s2_agent.py,sha256=oui0CMSyXmBGBJ7LnYq8Ce0V8Qc3BS6GgH5Qx5wI6oM,4565
|
153
153
|
aiagents4pharma/talk2scholars/agents/zotero_agent.py,sha256=NAmEURIhH-sjXGO-dqAigUA10m-Re9Qe1hY8db4CIP0,4370
|
154
154
|
aiagents4pharma/talk2scholars/configs/__init__.py,sha256=Y9-4PxsNCMoxyyQgDSbPByJnO9wnyem5SYL3eOZt1HY,189
|
155
|
-
aiagents4pharma/talk2scholars/configs/config.yaml,sha256
|
155
|
+
aiagents4pharma/talk2scholars/configs/config.yaml,sha256=F7BCgmcnhfkyKT6qFL11E_iwTYPmF8W_0b1n4KAaSho,680
|
156
156
|
aiagents4pharma/talk2scholars/configs/agents/__init__.py,sha256=plv5Iw34gvbGZbRyJapvoOiiFXekRQIwjV_yy5AR_SI,104
|
157
157
|
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/__init__.py,sha256=D94LW4cXLmJe4dNl5qoR9QN0JnBqGLbQDgDLqhCNUE0,213
|
158
158
|
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
@@ -168,6 +168,8 @@ aiagents4pharma/talk2scholars/configs/app/frontend/__init__.py,sha256=fqQQ-GlRcb
|
|
168
168
|
aiagents4pharma/talk2scholars/configs/app/frontend/default.yaml,sha256=A6nYjrgzEyRv5JYsGN7oqNX4-tufMBZ6mg-A7bMX6V4,906
|
169
169
|
aiagents4pharma/talk2scholars/configs/tools/__init__.py,sha256=6pHPF0ZGY78SD6KPMukd_xrfO1ocVXcyrsrB-kz-OnI,402
|
170
170
|
aiagents4pharma/talk2scholars/configs/tools/download_arxiv_paper/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
171
|
+
aiagents4pharma/talk2scholars/configs/tools/download_biorxiv_paper/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
172
|
+
aiagents4pharma/talk2scholars/configs/tools/download_medrxiv_paper/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
171
173
|
aiagents4pharma/talk2scholars/configs/tools/multi_paper_recommendation/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
172
174
|
aiagents4pharma/talk2scholars/configs/tools/multi_paper_recommendation/default.yaml,sha256=comNgL9hRpH--IWuEsrN6hV5WdrJmh-ZsRh7hbryVhg,631
|
173
175
|
aiagents4pharma/talk2scholars/configs/tools/question_and_answer/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
@@ -178,59 +180,66 @@ aiagents4pharma/talk2scholars/configs/tools/search/default.yaml,sha256=RlORkZFLD
|
|
178
180
|
aiagents4pharma/talk2scholars/configs/tools/single_paper_recommendation/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
179
181
|
aiagents4pharma/talk2scholars/configs/tools/single_paper_recommendation/default.yaml,sha256=PFXz5oRpNbjQp789QlgmyXktdVWwwVfoYi7mAnlRgik,785
|
180
182
|
aiagents4pharma/talk2scholars/configs/tools/zotero_read/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
181
|
-
aiagents4pharma/talk2scholars/configs/tools/zotero_read/default.yaml,sha256=
|
183
|
+
aiagents4pharma/talk2scholars/configs/tools/zotero_read/default.yaml,sha256=Vbu67JYcKvXzcUFOVW-C8Rve2tbmnQz_xmlkbmE6kC8,1294
|
182
184
|
aiagents4pharma/talk2scholars/configs/tools/zotero_write/__inti__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
183
185
|
aiagents4pharma/talk2scholars/configs/tools/zotero_write/default.yaml,sha256=gB7y7pznviQUzu49Eu4ONNkjQjT8wPKNSw6S_vfd9kI,1222
|
184
186
|
aiagents4pharma/talk2scholars/state/__init__.py,sha256=ReScKLpEvedq4P6ww52NRQS0Xr6SSQV7hqoQ83Mt75U,138
|
185
|
-
aiagents4pharma/talk2scholars/state/state_talk2scholars.py,sha256=
|
187
|
+
aiagents4pharma/talk2scholars/state/state_talk2scholars.py,sha256=Z2zV-SXB2SMnn8PnjWjmK-OD5KjUwMTChBpXBAcl2hg,3885
|
186
188
|
aiagents4pharma/talk2scholars/tests/__init__.py,sha256=U3PsTiUZaUBD1IZanFGkDIOdFieDVJtGKQ5-woYUo8c,45
|
187
189
|
aiagents4pharma/talk2scholars/tests/test_llm_main_integration.py,sha256=FBRqS06IKJYFOudQEHQr-9oJ4tftkH-gTCowTAqwWSg,3686
|
188
190
|
aiagents4pharma/talk2scholars/tests/test_main_agent.py,sha256=IZYSocYVwqPil2lF6L07mKm8PUq7vjopmqNiCm6IJEA,6876
|
189
191
|
aiagents4pharma/talk2scholars/tests/test_paper_download_agent.py,sha256=gKSQp-sw62FplNnGYW0wv2ZIUEefh3o0tFWbRzy9yLs,5068
|
192
|
+
aiagents4pharma/talk2scholars/tests/test_paper_download_biorxiv.py,sha256=gosuW4VBXyorQXbf0TpgAIT2hQjEeuvTTnT1jnoBYqM,6405
|
193
|
+
aiagents4pharma/talk2scholars/tests/test_paper_download_medrxiv.py,sha256=iNq9vEIVapmnUZTRJXCv_UoaWThGapW7Vt_2BmZG9NE,6414
|
190
194
|
aiagents4pharma/talk2scholars/tests/test_paper_download_tools.py,sha256=3mycLeEgH5XkwxuoXfTpQb8c8xFtIX2HjVnACPrSf60,7141
|
191
195
|
aiagents4pharma/talk2scholars/tests/test_pdf_agent.py,sha256=scGCTgka2JuoUhzZwzDn0OgIYihOLhXbwb5uGFR02aI,4302
|
192
|
-
aiagents4pharma/talk2scholars/tests/test_question_and_answer_tool.py,sha256=
|
196
|
+
aiagents4pharma/talk2scholars/tests/test_question_and_answer_tool.py,sha256=KR4GjjGgBjWXwEVzSh4ZpYjcWPq-EaZTT_fzRheb0uY,37286
|
197
|
+
aiagents4pharma/talk2scholars/tests/test_read_helper_utils.py,sha256=yTT1aLpTydDSdGcRZur5cMktwYZbFK5NEUgOBvltcWg,3819
|
193
198
|
aiagents4pharma/talk2scholars/tests/test_routing_logic.py,sha256=g79tG68ZrUOL3-duCCJwvFK6OieR5KedRf3yTUDqIFk,2784
|
194
199
|
aiagents4pharma/talk2scholars/tests/test_s2_agent.py,sha256=xvlPU4Lz_DdQLTpdtoHW9l_AMvFrzC-FXE5royGbtLM,7806
|
195
|
-
aiagents4pharma/talk2scholars/tests/test_s2_display.py,sha256=
|
200
|
+
aiagents4pharma/talk2scholars/tests/test_s2_display.py,sha256=Q1q0TEavO2kkXBjo2yeSbzV7xHspnDSvTveaUB-NkQE,3116
|
196
201
|
aiagents4pharma/talk2scholars/tests/test_s2_multi.py,sha256=VCTfexhtX7FgWOBS0YtSm1zghbByZnni1NBLGVTJVGI,11166
|
197
|
-
aiagents4pharma/talk2scholars/tests/test_s2_query.py,sha256=
|
202
|
+
aiagents4pharma/talk2scholars/tests/test_s2_query.py,sha256=8Em_bcexpv3odC20TRPi6eoz-6fPXGKabob1Ye0jdsg,3286
|
198
203
|
aiagents4pharma/talk2scholars/tests/test_s2_retrieve.py,sha256=YtA2nbPRtoSR7mPqEjqLF5ERGVzTfeULztsNoCI48X8,2003
|
199
204
|
aiagents4pharma/talk2scholars/tests/test_s2_search.py,sha256=mCGpoCYVn0SJ9BPcEjTz2MLy_K2XJIxvPngwsMoKijA,9945
|
200
205
|
aiagents4pharma/talk2scholars/tests/test_s2_single.py,sha256=KjSh7V2cl1IuO_M9O6dj0vnMHr13H-xKxia_ZgT4qag,10313
|
201
|
-
aiagents4pharma/talk2scholars/tests/test_state.py,sha256=
|
206
|
+
aiagents4pharma/talk2scholars/tests/test_state.py,sha256=A2lqA4h37QptLnwKWwm1Y79yELE4wtEBXzCiQ13YdLw,1270
|
202
207
|
aiagents4pharma/talk2scholars/tests/test_zotero_agent.py,sha256=jFEtfQVEwEQ6v3kq7A1_p2MKCu5wbtX47V4bE-fKD6M,6158
|
203
208
|
aiagents4pharma/talk2scholars/tests/test_zotero_human_in_the_loop.py,sha256=YelLQu9Y_r1SNQsC1xoLHJoJ3soIZtBt1MFbbNhY-Dg,10744
|
204
209
|
aiagents4pharma/talk2scholars/tests/test_zotero_path.py,sha256=Ko0HyXCrpm-vs8Bkf-syxp3MfL1IvZwXXgPExyQy_F8,18618
|
205
|
-
aiagents4pharma/talk2scholars/tests/
|
210
|
+
aiagents4pharma/talk2scholars/tests/test_zotero_pdf_downloader_utils.py,sha256=N9CBRG0rQyqptKRCaYCH2VJk87O-wc9Cc1KI5MMnyjA,1670
|
211
|
+
aiagents4pharma/talk2scholars/tests/test_zotero_read.py,sha256=E7ncgspEzhJTvmZuKplugZJPPWsoiFU_xLUg-oz6qkI,29100
|
206
212
|
aiagents4pharma/talk2scholars/tests/test_zotero_write.py,sha256=qWlO0XoZJ6vxUxgisjYv9Np87CoTEDxiQBEOhdj9foo,6111
|
207
213
|
aiagents4pharma/talk2scholars/tools/__init__.py,sha256=c8pYHDqR9P0Frz2jWjbvyizfSTBMlMFzGsiQzx2KC9c,189
|
208
|
-
aiagents4pharma/talk2scholars/tools/paper_download/__init__.py,sha256=
|
214
|
+
aiagents4pharma/talk2scholars/tools/paper_download/__init__.py,sha256=Lu5FmBxDH8mIIYE41G8_BKYXUf-vHIYVwujidbeydl4,295
|
209
215
|
aiagents4pharma/talk2scholars/tools/paper_download/download_arxiv_input.py,sha256=WTWvXbh0C96OoMoPf8Bgu0AgorsdkWslac_WqlHc4bo,3900
|
216
|
+
aiagents4pharma/talk2scholars/tools/paper_download/download_biorxiv_input.py,sha256=R92OaR4Omilj-v-rT0Me_BhxN8-AF0sbDwhUxNCUTm4,3718
|
217
|
+
aiagents4pharma/talk2scholars/tools/paper_download/download_medrxiv_input.py,sha256=UaHsdZXseUMQfiIovD0kS8r9DZ6KJpRGtTZyOCTRYVs,3786
|
210
218
|
aiagents4pharma/talk2scholars/tools/pdf/__init__.py,sha256=DPpOfON3AySko5EBBAe_3udOoSaAdQWNyGeNvJyV5R8,138
|
211
|
-
aiagents4pharma/talk2scholars/tools/pdf/question_and_answer.py,sha256=
|
219
|
+
aiagents4pharma/talk2scholars/tools/pdf/question_and_answer.py,sha256=pzJhSOdchyS3J4Tzoh7aFMALJFCqEk4Xh4LCDa-5I1I,23406
|
212
220
|
aiagents4pharma/talk2scholars/tools/s2/__init__.py,sha256=w_eiw0pG8HNp79F9O_icXs_Yl_4odsmagYNKDTjIsvk,428
|
213
|
-
aiagents4pharma/talk2scholars/tools/s2/display_dataframe.py,sha256=
|
214
|
-
aiagents4pharma/talk2scholars/tools/s2/multi_paper_rec.py,sha256=
|
215
|
-
aiagents4pharma/talk2scholars/tools/s2/query_dataframe.py,sha256=
|
221
|
+
aiagents4pharma/talk2scholars/tools/s2/display_dataframe.py,sha256=wOZ7UJq4b8vl7NU9mU3BW_nRmCIkeBvc6nbGGegysek,3181
|
222
|
+
aiagents4pharma/talk2scholars/tools/s2/multi_paper_rec.py,sha256=N7-6dzRI71bK7MG3-A4G505YnNvAMJW_Qjjtcoo4JYw,2799
|
223
|
+
aiagents4pharma/talk2scholars/tools/s2/query_dataframe.py,sha256=uI6-UnZu96Uirzohx-F7vMHOVSPlPrD4XJdwgF5GcMo,2866
|
216
224
|
aiagents4pharma/talk2scholars/tools/s2/retrieve_semantic_scholar_paper_id.py,sha256=llzMMnEQKeYVamJbF4_DTMx-BgVe79vwDcUIFGLrmUY,2615
|
217
|
-
aiagents4pharma/talk2scholars/tools/s2/search.py,sha256=
|
218
|
-
aiagents4pharma/talk2scholars/tools/s2/single_paper_rec.py,sha256=
|
225
|
+
aiagents4pharma/talk2scholars/tools/s2/search.py,sha256=p86RLy_9bMxm3KTDL2L0Ilb3yeF4K6IIkZCgbt4CsiE,2529
|
226
|
+
aiagents4pharma/talk2scholars/tools/s2/single_paper_rec.py,sha256=rnl6Bb7mKXg_lsProAYaSEJNIzWgNVZuDHqD-dDe9EI,2763
|
219
227
|
aiagents4pharma/talk2scholars/tools/s2/utils/__init__.py,sha256=wBTPVgiXbmIJUMouOQRwojgk5PJXeEinDJzHzEToZbU,229
|
220
|
-
aiagents4pharma/talk2scholars/tools/s2/utils/multi_helper.py,sha256=
|
221
|
-
aiagents4pharma/talk2scholars/tools/s2/utils/search_helper.py,sha256=
|
222
|
-
aiagents4pharma/talk2scholars/tools/s2/utils/single_helper.py,sha256=
|
228
|
+
aiagents4pharma/talk2scholars/tools/s2/utils/multi_helper.py,sha256=kjzZ90Cd23hXBQ861Z2BEjE1VvI02zxc1mIj2S7YWFo,7379
|
229
|
+
aiagents4pharma/talk2scholars/tools/s2/utils/search_helper.py,sha256=AembYVndEOwgcDz_n1VWAydfL8ufQ5pEokTKkrx47jA,6474
|
230
|
+
aiagents4pharma/talk2scholars/tools/s2/utils/single_helper.py,sha256=zLENnFSyQIpXqmJKow1XHS9pWbf27tsSUEvzydNCj9I,7094
|
223
231
|
aiagents4pharma/talk2scholars/tools/zotero/__init__.py,sha256=wXiQILLq-utV35PkDUpm_F074mG9yRMyGQAFlr9UAOw,197
|
224
|
-
aiagents4pharma/talk2scholars/tools/zotero/zotero_read.py,sha256=
|
232
|
+
aiagents4pharma/talk2scholars/tools/zotero/zotero_read.py,sha256=Fgv7PIkIlRqfl8EprcXqr1S4wtbSG8itv7x-3nMf3Rc,3990
|
225
233
|
aiagents4pharma/talk2scholars/tools/zotero/zotero_review.py,sha256=iqwpolg7GWAjXizubLrPaAsgOpsOhKz-tFRyLOiBvC0,6325
|
226
234
|
aiagents4pharma/talk2scholars/tools/zotero/zotero_write.py,sha256=KnDcnUBB0lwMcxNpC3hsVnICWkj23MDAePdHlK-Kekk,3024
|
227
235
|
aiagents4pharma/talk2scholars/tools/zotero/utils/__init__.py,sha256=uIyKZSFB07-zd3vjS9ABL0r6fdBX9JHw60j8oUfxHQs,209
|
228
|
-
aiagents4pharma/talk2scholars/tools/zotero/utils/read_helper.py,sha256=
|
236
|
+
aiagents4pharma/talk2scholars/tools/zotero/utils/read_helper.py,sha256=54SO05iuJ2VHLJ1d4b16oh5b5VCp2-nB1nT5eOCHb-g,11712
|
229
237
|
aiagents4pharma/talk2scholars/tools/zotero/utils/review_helper.py,sha256=IPD1V9yrBYaDnRe7sR6PrpwR82OBJbA2P_Tc6RbxAbM,2748
|
230
238
|
aiagents4pharma/talk2scholars/tools/zotero/utils/write_helper.py,sha256=ALwLecy1QVebbsmXJiDj1GhGmyhq2R2tZlAyEl1vfhw,7410
|
231
239
|
aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_path.py,sha256=oIrfbOySgts50ksHKyjcWjRkPRIS88g3Lc0v9mBkU8w,6375
|
232
|
-
aiagents4pharma
|
233
|
-
aiagents4pharma-1.
|
234
|
-
aiagents4pharma-1.
|
235
|
-
aiagents4pharma-1.
|
236
|
-
aiagents4pharma-1.
|
240
|
+
aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_pdf_downloader.py,sha256=ERBha8afU6Q1EaRBe9qB8tchOzZ4_KfFgDW6EElOJoU,4816
|
241
|
+
aiagents4pharma-1.39.0.dist-info/licenses/LICENSE,sha256=IcIbyB1Hyk5ZDah03VNQvJkbNk2hkBCDqQ8qtnCvB4Q,1077
|
242
|
+
aiagents4pharma-1.39.0.dist-info/METADATA,sha256=ITwj9yujMnDVZtQM3n09ZxDv4ueGCGDlG2JZOvU3n7k,16788
|
243
|
+
aiagents4pharma-1.39.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
244
|
+
aiagents4pharma-1.39.0.dist-info/top_level.txt,sha256=-AH8rMmrSnJtq7HaAObS78UU-cTCwvX660dSxeM7a0A,16
|
245
|
+
aiagents4pharma-1.39.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|