aiagents4pharma 1.30.0__py3-none-any.whl → 1.30.2__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/main_agent.py +18 -10
- aiagents4pharma/talk2scholars/agents/paper_download_agent.py +5 -6
- aiagents4pharma/talk2scholars/agents/pdf_agent.py +4 -10
- aiagents4pharma/talk2scholars/agents/zotero_agent.py +9 -7
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/default.yaml +18 -9
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/s2_agent/default.yaml +2 -2
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/zotero_agent/default.yaml +9 -15
- aiagents4pharma/talk2scholars/configs/app/frontend/default.yaml +1 -0
- aiagents4pharma/talk2scholars/configs/tools/multi_paper_recommendation/default.yaml +6 -1
- aiagents4pharma/talk2scholars/configs/tools/search/default.yaml +7 -1
- aiagents4pharma/talk2scholars/configs/tools/single_paper_recommendation/default.yaml +6 -1
- aiagents4pharma/talk2scholars/configs/tools/zotero_read/default.yaml +1 -1
- aiagents4pharma/talk2scholars/configs/tools/zotero_write/default.yaml +55 -0
- aiagents4pharma/talk2scholars/state/state_talk2scholars.py +7 -1
- aiagents4pharma/talk2scholars/tests/test_llm_main_integration.py +84 -53
- aiagents4pharma/talk2scholars/tests/test_main_agent.py +24 -0
- aiagents4pharma/talk2scholars/tests/test_question_and_answer_tool.py +79 -15
- aiagents4pharma/talk2scholars/tests/test_routing_logic.py +13 -10
- aiagents4pharma/talk2scholars/tests/test_s2_multi.py +27 -4
- aiagents4pharma/talk2scholars/tests/test_s2_search.py +19 -3
- aiagents4pharma/talk2scholars/tests/test_s2_single.py +27 -3
- aiagents4pharma/talk2scholars/tests/test_zotero_agent.py +3 -2
- aiagents4pharma/talk2scholars/tests/test_zotero_human_in_the_loop.py +273 -0
- aiagents4pharma/talk2scholars/tests/test_zotero_path.py +419 -1
- aiagents4pharma/talk2scholars/tests/test_zotero_read.py +25 -18
- aiagents4pharma/talk2scholars/tests/test_zotero_write.py +123 -588
- aiagents4pharma/talk2scholars/tools/paper_download/abstract_downloader.py +2 -0
- aiagents4pharma/talk2scholars/tools/paper_download/arxiv_downloader.py +11 -4
- aiagents4pharma/talk2scholars/tools/paper_download/download_arxiv_input.py +5 -1
- aiagents4pharma/talk2scholars/tools/pdf/question_and_answer.py +73 -26
- aiagents4pharma/talk2scholars/tools/s2/multi_paper_rec.py +46 -22
- aiagents4pharma/talk2scholars/tools/s2/query_results.py +1 -1
- aiagents4pharma/talk2scholars/tools/s2/search.py +40 -12
- aiagents4pharma/talk2scholars/tools/s2/single_paper_rec.py +42 -16
- aiagents4pharma/talk2scholars/tools/zotero/__init__.py +1 -0
- aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_path.py +125 -0
- aiagents4pharma/talk2scholars/tools/zotero/zotero_read.py +35 -20
- aiagents4pharma/talk2scholars/tools/zotero/zotero_review.py +198 -0
- aiagents4pharma/talk2scholars/tools/zotero/zotero_write.py +86 -118
- {aiagents4pharma-1.30.0.dist-info → aiagents4pharma-1.30.2.dist-info}/METADATA +4 -3
- {aiagents4pharma-1.30.0.dist-info → aiagents4pharma-1.30.2.dist-info}/RECORD +44 -41
- {aiagents4pharma-1.30.0.dist-info → aiagents4pharma-1.30.2.dist-info}/WHEEL +1 -1
- {aiagents4pharma-1.30.0.dist-info → aiagents4pharma-1.30.2.dist-info/licenses}/LICENSE +0 -0
- {aiagents4pharma-1.30.0.dist-info → aiagents4pharma-1.30.2.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
2
|
|
3
3
|
"""
|
4
|
-
This tool is used to save fetched papers to Zotero library.
|
4
|
+
This tool is used to save fetched papers to Zotero library after human approval.
|
5
5
|
"""
|
6
6
|
|
7
7
|
import logging
|
@@ -14,11 +14,13 @@ from langchain_core.tools.base import InjectedToolCallId
|
|
14
14
|
from langgraph.types import Command
|
15
15
|
from langgraph.prebuilt import InjectedState
|
16
16
|
from pydantic import BaseModel, Field
|
17
|
-
from
|
18
|
-
|
17
|
+
from .utils.zotero_path import (
|
18
|
+
find_or_create_collection,
|
19
|
+
fetch_papers_for_save,
|
19
20
|
)
|
20
21
|
|
21
|
-
|
22
|
+
|
23
|
+
# pylint: disable=R0914,R0911,R0912,R0915
|
22
24
|
|
23
25
|
# Configure logging
|
24
26
|
logging.basicConfig(level=logging.INFO)
|
@@ -30,29 +32,31 @@ class ZoteroSaveInput(BaseModel):
|
|
30
32
|
|
31
33
|
tool_call_id: Annotated[str, InjectedToolCallId]
|
32
34
|
collection_path: str = Field(
|
33
|
-
|
34
|
-
description=(
|
35
|
-
"The path where the paper should be saved in the Zotero library."
|
36
|
-
"Example: '/machine/cern/mobile'"
|
37
|
-
),
|
35
|
+
description="The path where the paper should be saved in the Zotero library."
|
38
36
|
)
|
39
37
|
state: Annotated[dict, InjectedState]
|
40
38
|
|
41
39
|
|
42
40
|
@tool(args_schema=ZoteroSaveInput, parse_docstring=True)
|
43
|
-
def
|
41
|
+
def zotero_write(
|
44
42
|
tool_call_id: Annotated[str, InjectedToolCallId],
|
45
43
|
collection_path: str,
|
46
44
|
state: Annotated[dict, InjectedState],
|
47
45
|
) -> Command[Any]:
|
48
46
|
"""
|
49
47
|
Use this tool to save previously fetched papers from Semantic Scholar
|
50
|
-
to a specified Zotero collection.
|
48
|
+
to a specified Zotero collection after human approval.
|
49
|
+
|
50
|
+
This tool checks if the user has approved the save operation via the
|
51
|
+
zotero_review. If approved, it will save the papers to the
|
52
|
+
approved collection path.
|
51
53
|
|
52
54
|
Args:
|
53
55
|
tool_call_id (Annotated[str, InjectedToolCallId]): The tool call ID.
|
54
56
|
collection_path (str): The Zotero collection path where papers should be saved.
|
55
57
|
state (Annotated[dict, InjectedState]): The state containing previously fetched papers.
|
58
|
+
user_confirmation (str, optional): User confirmation message when interrupt is
|
59
|
+
not available.
|
56
60
|
|
57
61
|
Returns:
|
58
62
|
Command[Any]: The save results and related information.
|
@@ -71,135 +75,96 @@ def zotero_save_tool(
|
|
71
75
|
# Initialize Zotero client
|
72
76
|
zot = zotero.Zotero(cfg.user_id, cfg.library_type, cfg.api_key)
|
73
77
|
|
74
|
-
#
|
75
|
-
|
76
|
-
if isinstance(last_displayed_key, str):
|
77
|
-
# If it's a string (key to another state object), get that object
|
78
|
-
fetched_papers = state.get(last_displayed_key, {})
|
79
|
-
logger.info("Using papers from '%s' state key", last_displayed_key)
|
80
|
-
else:
|
81
|
-
# If it's already the papers object
|
82
|
-
fetched_papers = last_displayed_key
|
83
|
-
logger.info("Using papers directly from last_displayed_papers")
|
78
|
+
# Use our utility function to fetch papers from state
|
79
|
+
fetched_papers = fetch_papers_for_save(state)
|
84
80
|
|
85
81
|
if not fetched_papers:
|
86
|
-
|
87
|
-
|
88
|
-
"
|
89
|
-
)
|
90
|
-
|
91
|
-
# First, check if zotero_read exists in state and has collection data
|
92
|
-
zotero_read_data = state.get("zotero_read", {})
|
93
|
-
logger.info("Retrieved zotero_read from state: %d items", len(zotero_read_data))
|
94
|
-
|
95
|
-
# If zotero_read is empty, use get_item_collections as fallback
|
96
|
-
if not zotero_read_data:
|
97
|
-
logger.info(
|
98
|
-
"zotero_read is empty, fetching paths dynamically using get_item_collections"
|
82
|
+
raise ValueError(
|
83
|
+
"No fetched papers were found to save. "
|
84
|
+
"Please retrieve papers using Zotero Read or Semantic Scholar first."
|
99
85
|
)
|
100
|
-
try:
|
101
|
-
zotero_read_data = get_item_collections(zot)
|
102
|
-
logger.info(
|
103
|
-
"Successfully generated %d path mappings", len(zotero_read_data)
|
104
|
-
)
|
105
|
-
except Exception as e:
|
106
|
-
logger.error("Error generating path mappings: %s", str(e))
|
107
|
-
raise RuntimeError(
|
108
|
-
"Failed to generate collection path mappings. Please retry the same query."
|
109
|
-
) from e
|
110
86
|
|
111
|
-
#
|
112
|
-
collections = zot.collections()
|
113
|
-
logger.info("Found %d collections", len(collections))
|
114
|
-
|
115
|
-
# Normalize the requested collection path (remove trailing slash, lowercase for comparison)
|
87
|
+
# Normalize the requested collection path
|
116
88
|
normalized_path = collection_path.rstrip("/").lower()
|
117
89
|
|
118
|
-
#
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
if isinstance(paths, list):
|
124
|
-
for path in paths:
|
125
|
-
if path.lower() == normalized_path:
|
126
|
-
matched_collection_key = key
|
127
|
-
logger.info(
|
128
|
-
"Found direct match in zotero_read: %s -> %s", path, key
|
129
|
-
)
|
130
|
-
break
|
131
|
-
elif isinstance(paths, str) and paths.lower() == normalized_path:
|
132
|
-
matched_collection_key = key
|
133
|
-
logger.info("Found direct match in zotero_read: %s -> %s", paths, key)
|
134
|
-
break
|
135
|
-
|
136
|
-
# If not found in zotero_read, try matching by collection name
|
137
|
-
if not matched_collection_key:
|
138
|
-
for col in collections:
|
139
|
-
col_name = col["data"]["name"]
|
140
|
-
if f"/{col_name}".lower() == normalized_path:
|
141
|
-
matched_collection_key = col["key"]
|
142
|
-
logger.info(
|
143
|
-
"Found direct match by collection name: %s (key: %s)",
|
144
|
-
col_name,
|
145
|
-
col["key"],
|
146
|
-
)
|
147
|
-
break
|
90
|
+
# Use our utility function to find or optionally create the collection
|
91
|
+
# First try to find the exact collection
|
92
|
+
matched_collection_key = find_or_create_collection(
|
93
|
+
zot, normalized_path, create_missing=False # First try without creating
|
94
|
+
)
|
148
95
|
|
149
|
-
# If still not found, try part-matching
|
150
96
|
if not matched_collection_key:
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
part,
|
168
|
-
matched_collection_key,
|
97
|
+
# Get all collection names without hierarchy for clearer display
|
98
|
+
available_collections = zot.collections()
|
99
|
+
collection_names = [col["data"]["name"] for col in available_collections]
|
100
|
+
names_display = ", ".join(collection_names)
|
101
|
+
|
102
|
+
return Command(
|
103
|
+
update={
|
104
|
+
"messages": [
|
105
|
+
ToolMessage(
|
106
|
+
content=(
|
107
|
+
f"Error: The collection path '{collection_path}' does "
|
108
|
+
f"not exist in Zotero. "
|
109
|
+
f"Available collections are: {names_display}. "
|
110
|
+
f"Please try saving to one of these existing collections."
|
111
|
+
),
|
112
|
+
tool_call_id=tool_call_id,
|
169
113
|
)
|
170
|
-
|
171
|
-
|
172
|
-
# Do not fall back to a default collection: raise error if no match found
|
173
|
-
if not matched_collection_key:
|
174
|
-
logger.error(
|
175
|
-
"Invalid collection path: %s. No matching collection found in Zotero.",
|
176
|
-
collection_path,
|
177
|
-
)
|
178
|
-
|
179
|
-
available_paths = ", ".join(["/" + col["data"]["name"] for col in collections])
|
180
|
-
raise RuntimeError(
|
181
|
-
f"Error: The collection path '{collection_path}' does not exist in Zotero. "
|
182
|
-
f"Available collections are: {available_paths}"
|
114
|
+
],
|
115
|
+
}
|
183
116
|
)
|
184
117
|
|
185
118
|
# Format papers for Zotero and assign to the specified collection
|
186
119
|
zotero_items = []
|
187
120
|
for paper_id, paper in fetched_papers.items():
|
188
|
-
title = paper.get("Title",
|
189
|
-
abstract = paper.get("Abstract",
|
190
|
-
|
191
|
-
url = paper.get("URL",
|
192
|
-
citations = paper.get("
|
121
|
+
title = paper.get("Title", "N/A")
|
122
|
+
abstract = paper.get("Abstract", "N/A")
|
123
|
+
publication_date = paper.get("Publication Date", "N/A") # Use Publication Date
|
124
|
+
url = paper.get("URL", "N/A")
|
125
|
+
citations = paper.get("Citation Count", "N/A")
|
126
|
+
venue = paper.get("Venue", "N/A")
|
127
|
+
publication_venue = paper.get("Publication Venue", "N/A")
|
128
|
+
journal_name = paper.get("Journal Name", "N/A")
|
129
|
+
journal_volume = paper.get("Journal Volume", "N/A")
|
130
|
+
journal_pages = paper.get("Journal Pages", "N/A")
|
131
|
+
|
132
|
+
# Convert Authors list to Zotero format
|
133
|
+
authors = [
|
134
|
+
(
|
135
|
+
{
|
136
|
+
"creatorType": "author",
|
137
|
+
"firstName": name.split(" ")[0],
|
138
|
+
"lastName": " ".join(name.split(" ")[1:]),
|
139
|
+
}
|
140
|
+
if " " in name
|
141
|
+
else {"creatorType": "author", "lastName": name}
|
142
|
+
)
|
143
|
+
for name in [
|
144
|
+
author.split(" (ID: ")[0] for author in paper.get("Authors", [])
|
145
|
+
]
|
146
|
+
]
|
193
147
|
|
194
148
|
zotero_items.append(
|
195
149
|
{
|
196
150
|
"itemType": "journalArticle",
|
197
151
|
"title": title,
|
198
152
|
"abstractNote": abstract,
|
199
|
-
"date": date
|
153
|
+
"date": publication_date, # Now saving full publication date
|
200
154
|
"url": url,
|
201
155
|
"extra": f"Paper ID: {paper_id}\nCitations: {citations}",
|
202
156
|
"collections": [matched_collection_key],
|
157
|
+
"publicationTitle": (
|
158
|
+
publication_venue if publication_venue != "N/A" else venue
|
159
|
+
), # Use publication venue if available
|
160
|
+
"journalAbbreviation": journal_name, # Save Journal Name
|
161
|
+
"volume": (
|
162
|
+
journal_volume if journal_volume != "N/A" else None
|
163
|
+
), # Save Journal Volume
|
164
|
+
"pages": (
|
165
|
+
journal_pages if journal_pages != "N/A" else None
|
166
|
+
), # Save Journal Pages
|
167
|
+
"creators": authors, # Save authors list properly
|
203
168
|
}
|
204
169
|
)
|
205
170
|
|
@@ -212,6 +177,7 @@ def zotero_save_tool(
|
|
212
177
|
raise RuntimeError(f"Error saving papers to Zotero: {str(e)}") from e
|
213
178
|
|
214
179
|
# Get the collection name for better feedback
|
180
|
+
collections = zot.collections()
|
215
181
|
collection_name = ""
|
216
182
|
for col in collections:
|
217
183
|
if col["key"] == matched_collection_key:
|
@@ -232,8 +198,9 @@ def zotero_save_tool(
|
|
232
198
|
for i, paper in enumerate(top_papers)
|
233
199
|
]
|
234
200
|
)
|
235
|
-
content += "Here are
|
201
|
+
content += "Here are a few of these articles:\n" + top_papers_info
|
236
202
|
|
203
|
+
# Clear the approval info so it's not reused
|
237
204
|
return Command(
|
238
205
|
update={
|
239
206
|
"messages": [
|
@@ -243,5 +210,6 @@ def zotero_save_tool(
|
|
243
210
|
artifact=fetched_papers,
|
244
211
|
)
|
245
212
|
],
|
213
|
+
"zotero_write_approval_status": {}, # Clear approval info
|
246
214
|
}
|
247
215
|
)
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: aiagents4pharma
|
3
|
-
Version: 1.30.
|
3
|
+
Version: 1.30.2
|
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
|
@@ -23,7 +23,7 @@ Requires-Dist: langchain-experimental==0.3.3
|
|
23
23
|
Requires-Dist: langchain-nvidia-ai-endpoints==0.3.9
|
24
24
|
Requires-Dist: langchain-openai==0.2.5
|
25
25
|
Requires-Dist: langchain_ollama==0.2.3
|
26
|
-
Requires-Dist: langgraph_supervisor==0.0.
|
26
|
+
Requires-Dist: langgraph_supervisor==0.0.9
|
27
27
|
Requires-Dist: matplotlib==3.9.2
|
28
28
|
Requires-Dist: openai==1.59.4
|
29
29
|
Requires-Dist: ollama==0.4.7
|
@@ -62,6 +62,7 @@ Requires-Dist: umap-learn==0.5.7
|
|
62
62
|
Requires-Dist: plotly-express==0.4.1
|
63
63
|
Requires-Dist: seaborn==0.13.2
|
64
64
|
Requires-Dist: scanpy==1.11.0
|
65
|
+
Dynamic: license-file
|
65
66
|
|
66
67
|
[](https://github.com/VirtualPatientEngine/AIAgents4Pharma/actions/workflows/tests_talk2biomodels.yml)
|
67
68
|
[](https://github.com/VirtualPatientEngine/AIAgents4Pharma/actions/workflows/tests_talk2cells.yml)
|
@@ -136,83 +136,86 @@ aiagents4pharma/talk2knowledgegraphs/utils/extractions/__init__.py,sha256=7gwwtf
|
|
136
136
|
aiagents4pharma/talk2knowledgegraphs/utils/extractions/pcst.py,sha256=m5p0yoJb7I19ua5yeQfXPf7c4r6S1XPwttsrM7Qoy94,9336
|
137
137
|
aiagents4pharma/talk2scholars/__init__.py,sha256=gphERyVKZHvOnMQsml7TIHlaIshHJ75R1J3FKExkfuY,120
|
138
138
|
aiagents4pharma/talk2scholars/agents/__init__.py,sha256=inLJpRDlT80RNSi3OFNi2lpbbTisQgzNkMYTvnhFjVY,203
|
139
|
-
aiagents4pharma/talk2scholars/agents/main_agent.py,sha256=
|
140
|
-
aiagents4pharma/talk2scholars/agents/paper_download_agent.py,sha256=
|
141
|
-
aiagents4pharma/talk2scholars/agents/pdf_agent.py,sha256=
|
139
|
+
aiagents4pharma/talk2scholars/agents/main_agent.py,sha256=KdKbnc-5zxktLUkzEZHC3bvn8_iKa8Kk4So90i48cdE,3275
|
140
|
+
aiagents4pharma/talk2scholars/agents/paper_download_agent.py,sha256=wrK9CPy5evH56fyOZ2BlkBfY5aEj6tefc4jSDPVzYvs,3041
|
141
|
+
aiagents4pharma/talk2scholars/agents/pdf_agent.py,sha256=xt_bgCTVJ6jOCkhc_rHh8pngq4uS8kuNOevuP3eC-sA,3702
|
142
142
|
aiagents4pharma/talk2scholars/agents/s2_agent.py,sha256=ua1bjKE2HBKZuLnDn8me5fuV1lSvdZbwAlo3Yp27TT4,4659
|
143
|
-
aiagents4pharma/talk2scholars/agents/zotero_agent.py,sha256=
|
143
|
+
aiagents4pharma/talk2scholars/agents/zotero_agent.py,sha256=f11kNqtyZnpBiIf3Fe9gU0WqQ0-ohhngTKl-o0u997Q,4442
|
144
144
|
aiagents4pharma/talk2scholars/configs/__init__.py,sha256=tf2gz8n7M4ko6xLdX_C925ELVIxoP6SgkPcbeh59ad4,151
|
145
145
|
aiagents4pharma/talk2scholars/configs/config.yaml,sha256=-8X0_gTmjEuXAeIrnppw3Npy8HICelHZOvTKEScI-rs,596
|
146
146
|
aiagents4pharma/talk2scholars/configs/agents/__init__.py,sha256=yyh7PB2oY_JulnpSQCWS4wwCH_uzIdt47O2Ay48x_oU,75
|
147
147
|
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/__init__.py,sha256=64GEWAoKOd_YHLi27eSOcOC5eSLK0IG_FNra3ZBt02Y,146
|
148
148
|
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
149
|
-
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/default.yaml,sha256=
|
149
|
+
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/default.yaml,sha256=GZRqZoUy8eAWXyd9GJDh-A4mYSJOhnkid6TaIJTGBeU,1192
|
150
150
|
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/paper_download_agent/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
151
151
|
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/pdf_agent/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
152
152
|
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/s2_agent/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
153
|
-
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/s2_agent/default.yaml,sha256=
|
153
|
+
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/s2_agent/default.yaml,sha256=UIYkr060IpoLHMXVPxGAjrkCJSjX7H0DzcFSasyW6sE,1185
|
154
154
|
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/zotero_agent/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
155
|
-
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/zotero_agent/default.yaml,sha256=
|
155
|
+
aiagents4pharma/talk2scholars/configs/agents/talk2scholars/zotero_agent/default.yaml,sha256=09nMAlI4CTLlss03trR0ZaEeLdABQfkwUUE6ZCK4WzY,718
|
156
156
|
aiagents4pharma/talk2scholars/configs/app/__init__.py,sha256=JoSZV6N669kGMv5zLDszwf0ZjcRHx9TJfIqGhIIdPXE,70
|
157
157
|
aiagents4pharma/talk2scholars/configs/app/frontend/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
158
|
-
aiagents4pharma/talk2scholars/configs/app/frontend/default.yaml,sha256=
|
158
|
+
aiagents4pharma/talk2scholars/configs/app/frontend/default.yaml,sha256=A6nYjrgzEyRv5JYsGN7oqNX4-tufMBZ6mg-A7bMX6V4,906
|
159
159
|
aiagents4pharma/talk2scholars/configs/tools/__init__.py,sha256=GwpgnRrfjyZDVsangewSVTG3H3GBYM6s_YaQd9-zI10,238
|
160
160
|
aiagents4pharma/talk2scholars/configs/tools/download_arxiv_paper/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
161
161
|
aiagents4pharma/talk2scholars/configs/tools/multi_paper_recommendation/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
162
|
-
aiagents4pharma/talk2scholars/configs/tools/multi_paper_recommendation/default.yaml,sha256=
|
162
|
+
aiagents4pharma/talk2scholars/configs/tools/multi_paper_recommendation/default.yaml,sha256=comNgL9hRpH--IWuEsrN6hV5WdrJmh-ZsRh7hbryVhg,631
|
163
163
|
aiagents4pharma/talk2scholars/configs/tools/question_and_answer/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
164
164
|
aiagents4pharma/talk2scholars/configs/tools/retrieve_semantic_scholar_paper_id/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
165
165
|
aiagents4pharma/talk2scholars/configs/tools/retrieve_semantic_scholar_paper_id/default.yaml,sha256=HG-N8yRjlX9zFwbIBvaDI9ndKjfL-gqPTCCPMLgdUpw,271
|
166
166
|
aiagents4pharma/talk2scholars/configs/tools/search/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
167
|
-
aiagents4pharma/talk2scholars/configs/tools/search/default.yaml,sha256=
|
167
|
+
aiagents4pharma/talk2scholars/configs/tools/search/default.yaml,sha256=RlORkZFLDKFXQqjXjTM0NqsHyLDTIfirbWlAAXrAT00,694
|
168
168
|
aiagents4pharma/talk2scholars/configs/tools/single_paper_recommendation/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
169
|
-
aiagents4pharma/talk2scholars/configs/tools/single_paper_recommendation/default.yaml,sha256=
|
169
|
+
aiagents4pharma/talk2scholars/configs/tools/single_paper_recommendation/default.yaml,sha256=PFXz5oRpNbjQp789QlgmyXktdVWwwVfoYi7mAnlRgik,785
|
170
170
|
aiagents4pharma/talk2scholars/configs/tools/zotero_read/__init__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
171
|
-
aiagents4pharma/talk2scholars/configs/tools/zotero_read/default.yaml,sha256=
|
171
|
+
aiagents4pharma/talk2scholars/configs/tools/zotero_read/default.yaml,sha256=ifOtX8Huj1LPHF_rRe1JxWgrDaLiKg6HVoQen_1R1Ls,1223
|
172
172
|
aiagents4pharma/talk2scholars/configs/tools/zotero_write/__inti__.py,sha256=fqQQ-GlRcbzru2KmEk3oMma0R6_SzGM8dOXzYeU4oVA,46
|
173
|
+
aiagents4pharma/talk2scholars/configs/tools/zotero_write/default.yaml,sha256=gB7y7pznviQUzu49Eu4ONNkjQjT8wPKNSw6S_vfd9kI,1222
|
173
174
|
aiagents4pharma/talk2scholars/state/__init__.py,sha256=S6SxlszIMZSIMJehjevPF9sKyR-PAwWb5TEdo6xWXE8,103
|
174
|
-
aiagents4pharma/talk2scholars/state/state_talk2scholars.py,sha256=
|
175
|
+
aiagents4pharma/talk2scholars/state/state_talk2scholars.py,sha256=8ZFfv55tXO3LU-2DzKC5JjH4_ryodgu-H1ieKBmVFvw,2844
|
175
176
|
aiagents4pharma/talk2scholars/tests/__init__.py,sha256=U3PsTiUZaUBD1IZanFGkDIOdFieDVJtGKQ5-woYUo8c,45
|
176
|
-
aiagents4pharma/talk2scholars/tests/test_llm_main_integration.py,sha256=
|
177
|
-
aiagents4pharma/talk2scholars/tests/test_main_agent.py,sha256=
|
177
|
+
aiagents4pharma/talk2scholars/tests/test_llm_main_integration.py,sha256=FBRqS06IKJYFOudQEHQr-9oJ4tftkH-gTCowTAqwWSg,3686
|
178
|
+
aiagents4pharma/talk2scholars/tests/test_main_agent.py,sha256=hgKgMXAGGqGJ6EXbjfsdZ5t1IWo2W67tc_F7vK747Qg,6844
|
178
179
|
aiagents4pharma/talk2scholars/tests/test_paper_download_agent.py,sha256=CP4fKFU_JYP_AXvTptnwpjaVar1d5lVKV5vxYgH_1j4,5309
|
179
180
|
aiagents4pharma/talk2scholars/tests/test_paper_download_tools.py,sha256=_bGuoo4b6zD_vwLa7jGziWDT5qRtavsf02Jiaa7JIRU,5817
|
180
181
|
aiagents4pharma/talk2scholars/tests/test_pdf_agent.py,sha256=TN4Sq5-SCxv-9VfFyq7sOlBlxbekmnWuB7-qh4MrhkA,4656
|
181
|
-
aiagents4pharma/talk2scholars/tests/test_question_and_answer_tool.py,sha256=
|
182
|
-
aiagents4pharma/talk2scholars/tests/test_routing_logic.py,sha256=
|
182
|
+
aiagents4pharma/talk2scholars/tests/test_question_and_answer_tool.py,sha256=te6w1tPvuNSNCTihIwaCT083BzUCowjOQPwuCodXR4k,8723
|
183
|
+
aiagents4pharma/talk2scholars/tests/test_routing_logic.py,sha256=g79tG68ZrUOL3-duCCJwvFK6OieR5KedRf3yTUDqIFk,2784
|
183
184
|
aiagents4pharma/talk2scholars/tests/test_s2_agent.py,sha256=BhW1wGc-wUPS4fwNBQRtBXJaJ_i7L6t_G9Bq57fK7rI,7784
|
184
185
|
aiagents4pharma/talk2scholars/tests/test_s2_display.py,sha256=w1TqgEdl9WpW_A2Ud1slfI5fkRFkKtKadAlkEfSLOZk,2247
|
185
|
-
aiagents4pharma/talk2scholars/tests/test_s2_multi.py,sha256=
|
186
|
+
aiagents4pharma/talk2scholars/tests/test_s2_multi.py,sha256=0XGtl6BigfDI6zpblQlJmKqml-fQ30HQB12PMCOl0h8,11115
|
186
187
|
aiagents4pharma/talk2scholars/tests/test_s2_query.py,sha256=hEcBt142nn_bKV9lor__Yk4LusgE1tN5dA-qpT606Bc,2443
|
187
188
|
aiagents4pharma/talk2scholars/tests/test_s2_retrieve.py,sha256=YtA2nbPRtoSR7mPqEjqLF5ERGVzTfeULztsNoCI48X8,2003
|
188
|
-
aiagents4pharma/talk2scholars/tests/test_s2_search.py,sha256=
|
189
|
-
aiagents4pharma/talk2scholars/tests/test_s2_single.py,sha256=
|
189
|
+
aiagents4pharma/talk2scholars/tests/test_s2_search.py,sha256=wuXEke7_bmancvlh7C5WFbXRbpcUVrYGhD_X47tOt3M,9834
|
190
|
+
aiagents4pharma/talk2scholars/tests/test_s2_single.py,sha256=l0uBxwjqojlmT65j7WK3R-u2PMyPcMf95yLGApSycO0,10274
|
190
191
|
aiagents4pharma/talk2scholars/tests/test_state.py,sha256=_iHXvoZnU_eruf8l1sQKBSCIVnxNkH_9VzkVtZZA6bY,384
|
191
|
-
aiagents4pharma/talk2scholars/tests/test_zotero_agent.py,sha256=
|
192
|
-
aiagents4pharma/talk2scholars/tests/
|
193
|
-
aiagents4pharma/talk2scholars/tests/
|
194
|
-
aiagents4pharma/talk2scholars/tests/
|
192
|
+
aiagents4pharma/talk2scholars/tests/test_zotero_agent.py,sha256=fQDQj28uFNC1TyMPzNaNfDJacuw1_DqwGiX6IgliR3Y,6130
|
193
|
+
aiagents4pharma/talk2scholars/tests/test_zotero_human_in_the_loop.py,sha256=YelLQu9Y_r1SNQsC1xoLHJoJ3soIZtBt1MFbbNhY-Dg,10744
|
194
|
+
aiagents4pharma/talk2scholars/tests/test_zotero_path.py,sha256=bgVPlmNmC7OVOvKDL8fn311rNgv59DkWFd-L1PDpCOQ,18157
|
195
|
+
aiagents4pharma/talk2scholars/tests/test_zotero_read.py,sha256=r3DweOxG6gycTbR_uIB6V84drdbVi6GRQDNfdyESN8U,15216
|
196
|
+
aiagents4pharma/talk2scholars/tests/test_zotero_write.py,sha256=QtB5FrWu4wNOR8VKFDhaNh1Lrki8fp_GQj0Zkst13bQ,6051
|
195
197
|
aiagents4pharma/talk2scholars/tools/__init__.py,sha256=UtGutYNNaRcr2nOmT_XqbTiaJpgVYKo3KVGVPFVrX2Y,107
|
196
198
|
aiagents4pharma/talk2scholars/tools/paper_download/__init__.py,sha256=0XmPLEqCply536Y1uWksmHYjlgNWcmcMpZx63XvGEFI,413
|
197
|
-
aiagents4pharma/talk2scholars/tools/paper_download/abstract_downloader.py,sha256=
|
198
|
-
aiagents4pharma/talk2scholars/tools/paper_download/arxiv_downloader.py,sha256=
|
199
|
-
aiagents4pharma/talk2scholars/tools/paper_download/download_arxiv_input.py,sha256=
|
199
|
+
aiagents4pharma/talk2scholars/tools/paper_download/abstract_downloader.py,sha256=nwVhRUqkdta3WLgd9roAWpx-bhJm3aAgJLx4RSYSJXQ,1327
|
200
|
+
aiagents4pharma/talk2scholars/tools/paper_download/arxiv_downloader.py,sha256=hM9fdbwtOxuW1mpAfmfbILTI7kSVALgrGpjC2vMsvf8,3970
|
201
|
+
aiagents4pharma/talk2scholars/tools/paper_download/download_arxiv_input.py,sha256=zndAnNFRBztuBK-tpW9UyYsGL8tB3gFjYhiTq6nzZu4,2203
|
200
202
|
aiagents4pharma/talk2scholars/tools/pdf/__init__.py,sha256=WOm-o-fFzyjFZBaHg658Gjzdiu1Kt-h9xvzvw0hR7aE,103
|
201
|
-
aiagents4pharma/talk2scholars/tools/pdf/question_and_answer.py,sha256=
|
203
|
+
aiagents4pharma/talk2scholars/tools/pdf/question_and_answer.py,sha256=tNv0frCr0dxA0lfbwf5yudKRyWtbuRGMwqW5mk9u4eE,8797
|
202
204
|
aiagents4pharma/talk2scholars/tools/s2/__init__.py,sha256=wytqCmGm8Fbl8y5qLdIkxhhG8VHLYMifCGjbH_LK2Fc,258
|
203
205
|
aiagents4pharma/talk2scholars/tools/s2/display_results.py,sha256=UR0PtEHGDpOhPH0Di5HT8-Fip2RkEMTJgzROsChb1gc,2959
|
204
|
-
aiagents4pharma/talk2scholars/tools/s2/multi_paper_rec.py,sha256=
|
205
|
-
aiagents4pharma/talk2scholars/tools/s2/query_results.py,sha256=
|
206
|
+
aiagents4pharma/talk2scholars/tools/s2/multi_paper_rec.py,sha256=FeuZfx8TQ7kB68_9RqDwyhB5ut14YedlHVzNIbXHXno,7744
|
207
|
+
aiagents4pharma/talk2scholars/tools/s2/query_results.py,sha256=5yXuHqz5UKO9BbovEUnqgjcMvqVG4vp9VJO8Zaz5N1w,2029
|
206
208
|
aiagents4pharma/talk2scholars/tools/s2/retrieve_semantic_scholar_paper_id.py,sha256=llzMMnEQKeYVamJbF4_DTMx-BgVe79vwDcUIFGLrmUY,2615
|
207
|
-
aiagents4pharma/talk2scholars/tools/s2/search.py,sha256=
|
208
|
-
aiagents4pharma/talk2scholars/tools/s2/single_paper_rec.py,sha256=
|
209
|
-
aiagents4pharma/talk2scholars/tools/zotero/__init__.py,sha256=
|
210
|
-
aiagents4pharma/talk2scholars/tools/zotero/zotero_read.py,sha256=
|
211
|
-
aiagents4pharma/talk2scholars/tools/zotero/
|
209
|
+
aiagents4pharma/talk2scholars/tools/s2/search.py,sha256=L7myD4ET_iTTO4LZ9V8zU6y4KHSDSn5HylG9Z1i1Wo4,6722
|
210
|
+
aiagents4pharma/talk2scholars/tools/s2/single_paper_rec.py,sha256=dLLEq7mwOMfkO3eydFcZzB3mU3N_PmX3vCTwJSh7lYA,7474
|
211
|
+
aiagents4pharma/talk2scholars/tools/zotero/__init__.py,sha256=Hnd_R0q_Xyf1CNCdHCdsCkbo0sRKHKLWBLdoHZDOK1A,128
|
212
|
+
aiagents4pharma/talk2scholars/tools/zotero/zotero_read.py,sha256=3tmZkF29SjAIfZFl-tKUq3_Yf9u-ujHAcrKBRw-rZ-w,7131
|
213
|
+
aiagents4pharma/talk2scholars/tools/zotero/zotero_review.py,sha256=0RS6J5FCHaBdQNK31RQMphZS7kiimCwV6lPeatAg0x8,7538
|
214
|
+
aiagents4pharma/talk2scholars/tools/zotero/zotero_write.py,sha256=BNOOIBoGXyurBC9v4qrSyihgYkfMUb_4mCQYIaWzwEE,7954
|
212
215
|
aiagents4pharma/talk2scholars/tools/zotero/utils/__init__.py,sha256=Ll8YQZj9sYJpXmoGxj_0ZcuEHDj06_CUqdDlTlevGL4,53
|
213
|
-
aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_path.py,sha256=
|
214
|
-
aiagents4pharma-1.30.
|
215
|
-
aiagents4pharma-1.30.
|
216
|
-
aiagents4pharma-1.30.
|
217
|
-
aiagents4pharma-1.30.
|
218
|
-
aiagents4pharma-1.30.
|
216
|
+
aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_path.py,sha256=AFv6s2nkLFSobGCQ0a8uK5C0h50GK-x2TYGY1yjv0Gk,6365
|
217
|
+
aiagents4pharma-1.30.2.dist-info/licenses/LICENSE,sha256=IcIbyB1Hyk5ZDah03VNQvJkbNk2hkBCDqQ8qtnCvB4Q,1077
|
218
|
+
aiagents4pharma-1.30.2.dist-info/METADATA,sha256=gqMqFcmqMJ97IA_fcg_5XWnbQtZJxF_fb9_CXwEi75c,13267
|
219
|
+
aiagents4pharma-1.30.2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
220
|
+
aiagents4pharma-1.30.2.dist-info/top_level.txt,sha256=-AH8rMmrSnJtq7HaAObS78UU-cTCwvX660dSxeM7a0A,16
|
221
|
+
aiagents4pharma-1.30.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|