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.
Files changed (44) hide show
  1. aiagents4pharma/talk2scholars/agents/main_agent.py +18 -10
  2. aiagents4pharma/talk2scholars/agents/paper_download_agent.py +5 -6
  3. aiagents4pharma/talk2scholars/agents/pdf_agent.py +4 -10
  4. aiagents4pharma/talk2scholars/agents/zotero_agent.py +9 -7
  5. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/default.yaml +18 -9
  6. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/s2_agent/default.yaml +2 -2
  7. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/zotero_agent/default.yaml +9 -15
  8. aiagents4pharma/talk2scholars/configs/app/frontend/default.yaml +1 -0
  9. aiagents4pharma/talk2scholars/configs/tools/multi_paper_recommendation/default.yaml +6 -1
  10. aiagents4pharma/talk2scholars/configs/tools/search/default.yaml +7 -1
  11. aiagents4pharma/talk2scholars/configs/tools/single_paper_recommendation/default.yaml +6 -1
  12. aiagents4pharma/talk2scholars/configs/tools/zotero_read/default.yaml +1 -1
  13. aiagents4pharma/talk2scholars/configs/tools/zotero_write/default.yaml +55 -0
  14. aiagents4pharma/talk2scholars/state/state_talk2scholars.py +7 -1
  15. aiagents4pharma/talk2scholars/tests/test_llm_main_integration.py +84 -53
  16. aiagents4pharma/talk2scholars/tests/test_main_agent.py +24 -0
  17. aiagents4pharma/talk2scholars/tests/test_question_and_answer_tool.py +79 -15
  18. aiagents4pharma/talk2scholars/tests/test_routing_logic.py +13 -10
  19. aiagents4pharma/talk2scholars/tests/test_s2_multi.py +27 -4
  20. aiagents4pharma/talk2scholars/tests/test_s2_search.py +19 -3
  21. aiagents4pharma/talk2scholars/tests/test_s2_single.py +27 -3
  22. aiagents4pharma/talk2scholars/tests/test_zotero_agent.py +3 -2
  23. aiagents4pharma/talk2scholars/tests/test_zotero_human_in_the_loop.py +273 -0
  24. aiagents4pharma/talk2scholars/tests/test_zotero_path.py +419 -1
  25. aiagents4pharma/talk2scholars/tests/test_zotero_read.py +25 -18
  26. aiagents4pharma/talk2scholars/tests/test_zotero_write.py +123 -588
  27. aiagents4pharma/talk2scholars/tools/paper_download/abstract_downloader.py +2 -0
  28. aiagents4pharma/talk2scholars/tools/paper_download/arxiv_downloader.py +11 -4
  29. aiagents4pharma/talk2scholars/tools/paper_download/download_arxiv_input.py +5 -1
  30. aiagents4pharma/talk2scholars/tools/pdf/question_and_answer.py +73 -26
  31. aiagents4pharma/talk2scholars/tools/s2/multi_paper_rec.py +46 -22
  32. aiagents4pharma/talk2scholars/tools/s2/query_results.py +1 -1
  33. aiagents4pharma/talk2scholars/tools/s2/search.py +40 -12
  34. aiagents4pharma/talk2scholars/tools/s2/single_paper_rec.py +42 -16
  35. aiagents4pharma/talk2scholars/tools/zotero/__init__.py +1 -0
  36. aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_path.py +125 -0
  37. aiagents4pharma/talk2scholars/tools/zotero/zotero_read.py +35 -20
  38. aiagents4pharma/talk2scholars/tools/zotero/zotero_review.py +198 -0
  39. aiagents4pharma/talk2scholars/tools/zotero/zotero_write.py +86 -118
  40. {aiagents4pharma-1.30.0.dist-info → aiagents4pharma-1.30.2.dist-info}/METADATA +4 -3
  41. {aiagents4pharma-1.30.0.dist-info → aiagents4pharma-1.30.2.dist-info}/RECORD +44 -41
  42. {aiagents4pharma-1.30.0.dist-info → aiagents4pharma-1.30.2.dist-info}/WHEEL +1 -1
  43. {aiagents4pharma-1.30.0.dist-info → aiagents4pharma-1.30.2.dist-info/licenses}/LICENSE +0 -0
  44. {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 aiagents4pharma.talk2scholars.tools.zotero.utils.zotero_path import (
18
- get_item_collections,
17
+ from .utils.zotero_path import (
18
+ find_or_create_collection,
19
+ fetch_papers_for_save,
19
20
  )
20
21
 
21
- # pylint: disable=R0914,R0912,R0915
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
- default=None,
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 zotero_save_tool(
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
- # Retrieve last displayed papers from the agent state
75
- last_displayed_key = state.get("last_displayed_papers", {})
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
- logger.warning("No fetched papers found to save.")
87
- raise RuntimeError(
88
- "No fetched papers were found to save. Please retry the same query."
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
- # Get all collections to find the correct one
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
- # Find matching collection
119
- matched_collection_key = None
120
-
121
- # First, try to directly find the collection key in zotero_read data
122
- for key, paths in zotero_read_data.items():
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
- name_to_key = {col["data"]["name"].lower(): col["key"] for col in collections}
152
- collection_name = normalized_path.lstrip("/")
153
- if collection_name in name_to_key:
154
- matched_collection_key = name_to_key[collection_name]
155
- logger.info(
156
- "Found match by collection name: %s -> %s",
157
- collection_name,
158
- matched_collection_key,
159
- )
160
- else:
161
- path_parts = normalized_path.strip("/").split("/")
162
- for part in path_parts:
163
- if part in name_to_key:
164
- matched_collection_key = name_to_key[part]
165
- logger.info(
166
- "Found match by path component: %s -> %s",
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
- break
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", paper.get("title", "N/A"))
189
- abstract = paper.get("Abstract", paper.get("abstractNote", "N/A"))
190
- date = paper.get("Date", paper.get("date", "N/A"))
191
- url = paper.get("URL", paper.get("url", paper.get("URL", "N/A")))
192
- citations = paper.get("Citations", "N/A")
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 the top articles:\n" + top_papers_info
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.2
1
+ Metadata-Version: 2.4
2
2
  Name: aiagents4pharma
3
- Version: 1.30.0
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.4
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
  [![Talk2BioModels](https://github.com/VirtualPatientEngine/AIAgents4Pharma/actions/workflows/tests_talk2biomodels.yml/badge.svg)](https://github.com/VirtualPatientEngine/AIAgents4Pharma/actions/workflows/tests_talk2biomodels.yml)
67
68
  [![Talk2Cells](https://github.com/VirtualPatientEngine/AIAgents4Pharma/actions/workflows/tests_talk2cells.yml/badge.svg)](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=TABzGSOg7I0_fJ0qybBVqZDdrU8YCjyG_m-kasO4WgE,2854
140
- aiagents4pharma/talk2scholars/agents/paper_download_agent.py,sha256=3GxxNhA_VGf3QOozIjr5cEY2te5n6rQSdZpdFajZttA,3006
141
- aiagents4pharma/talk2scholars/agents/pdf_agent.py,sha256=c9-_z5qp5Zkgh6piEIlgI4uo4OMXD3janZNmfYwnFCg,3729
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=5jfIJiLsRdlCJjkF7BQMkP5PsEY_Gr7SfztWKozbUGo,4223
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=rZfZ_dJArjlznHzusjxCnOjhptLTyejFiB0euV5R13c,662
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=sn6vX6r-P0CR7UWS63ZqCmMKKn4As8pZoITRWx8sdoo,1151
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=lWBreotqsu1jlHi1uZ9vY60zi-MiiG2VuHxo5IoAvkE,1112
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=wsELBdRLv6UqZ9QZfwpS7K4xfMj5s-a99-aXqIs6WEI,868
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=QV7HrG7NdjBEjTMszh27MbGBYMbf_78V3sCGftdTtvo,442
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=153R4NmtG2bGKpxwo73tR15IetGKdrD4QgZRlz8zS18,504
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=1QtFWqnGftIipftlALnG_IdCAOwzJTyOpUSUfWqQ7cA,596
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=6ZvZdCsnudPeVjnatv78Z0QfMwsHZuliE2RCIRCW05Y,1221
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=0dFSdsGiiilNIuuHQFEjpjQmcZXlK0JQwMV_GCiAsuU,2490
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=SAMG-Kb2S9sei8Us5vUWCUJikTKXPZVKQ6aJJPEhJsc,1880
177
- aiagents4pharma/talk2scholars/tests/test_main_agent.py,sha256=5QnOPKNrQCd5GdYU-vVF3bUrmitOsUcazZA7BsXeomo,5947
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=TpCDiGfsC2y6bOkm0ZTXjT1Vp8D-Po25wiEH5aDT_DA,6491
182
- aiagents4pharma/talk2scholars/tests/test_routing_logic.py,sha256=AZrvaEBDk51KL6edrZY3GpQ_N6VbrlADqXFeg_jxDoQ,2284
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=fkTQ268WqOYvJEtTteVJ7eav3QuMAahhYR6LOnx1Huk,10161
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=ZnfBO0b9xMwMvT1oaw1yIFxLToSej1_KSyEzHr6HbOQ,9068
189
- aiagents4pharma/talk2scholars/tests/test_s2_single.py,sha256=J4r_J4gPeIIWAIUlahClINnCu7bEiW5AcphRNChv2Eo,9317
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=3TKz6yjNfYulaQv-MBv1zXCmR9xh9g3ju4Ge5HDdt1o,6136
192
- aiagents4pharma/talk2scholars/tests/test_zotero_path.py,sha256=XeXYqTlSkJgZ02tCz84VNDHGYnmrxrGFLxlLq_Bargs,2356
193
- aiagents4pharma/talk2scholars/tests/test_zotero_read.py,sha256=vLAPAFeL8MjDju_HlsLnio-9HxzN1RqOApr9jyemYBk,14951
194
- aiagents4pharma/talk2scholars/tests/test_zotero_write.py,sha256=76V7ezb6Xw-BEEwdJQvJs78JPGRYpAsijHIi3bTGsW8,23206
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=UgJOu9o9RAjlzMahUgPWV6iCGC6n7atDOa0VEp8bGx0,1325
198
- aiagents4pharma/talk2scholars/tools/paper_download/arxiv_downloader.py,sha256=kP5tyLc92zlkF5EPA7zVYSjpVk724pCsjHFgOntb_Tw,3869
199
- aiagents4pharma/talk2scholars/tools/paper_download/download_arxiv_input.py,sha256=EJBr9RSSog8tFa7BIFIDZ-Qn7qjqJIAuRb_hF4wZ49Q,2181
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=22JvT7F0rY11TF40pBfe9Cn2Y-6Tx73NfWDt4NJv700,6639
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=Y-nIjtPSYvL7kLaN9_cueQM-VZF1SPZZ1_FB8KhS0XY,6352
205
- aiagents4pharma/talk2scholars/tools/s2/query_results.py,sha256=S4yBNtg1loDu4ckLPrW4H8GAswriPaRU4U08cOuw2HE,2028
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=496sv4aAfqB65zgjNxU2AGnhclcRRNF0VuG4fguN3gw,5319
208
- aiagents4pharma/talk2scholars/tools/s2/single_paper_rec.py,sha256=YJ1P-BAn5d2vGKIg3OTsYH1g8as5LeqaRuraL0buqJo,6095
209
- aiagents4pharma/talk2scholars/tools/zotero/__init__.py,sha256=HF47ta_r94Y4gP3fK3WG_ix8kg1zUQw8yWjLJksnTfc,100
210
- aiagents4pharma/talk2scholars/tools/zotero/zotero_read.py,sha256=eRqdQCyWws8q6iC_w4OIBR6w9Ha5x5UT5S8jifNxcqw,6142
211
- aiagents4pharma/talk2scholars/tools/zotero/zotero_write.py,sha256=dqYc5HWMK3vz77psHYUosMLE63NYg9Nk6xbWy8TOrU4,9246
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=nHmYe3kcrygNOslHki4YeMztfnmRDPul4gZvXl_XsV0,1954
214
- aiagents4pharma-1.30.0.dist-info/LICENSE,sha256=IcIbyB1Hyk5ZDah03VNQvJkbNk2hkBCDqQ8qtnCvB4Q,1077
215
- aiagents4pharma-1.30.0.dist-info/METADATA,sha256=411N0HHxJVGSKxY07zzYQ4Z60aIJRN7fd4cMaSa7uVc,13245
216
- aiagents4pharma-1.30.0.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
217
- aiagents4pharma-1.30.0.dist-info/top_level.txt,sha256=-AH8rMmrSnJtq7HaAObS78UU-cTCwvX660dSxeM7a0A,16
218
- aiagents4pharma-1.30.0.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.2)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5