aiagents4pharma 0.0.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 (336) hide show
  1. aiagents4pharma/__init__.py +11 -0
  2. aiagents4pharma/talk2aiagents4pharma/.dockerignore +13 -0
  3. aiagents4pharma/talk2aiagents4pharma/Dockerfile +133 -0
  4. aiagents4pharma/talk2aiagents4pharma/README.md +1 -0
  5. aiagents4pharma/talk2aiagents4pharma/__init__.py +5 -0
  6. aiagents4pharma/talk2aiagents4pharma/agents/__init__.py +6 -0
  7. aiagents4pharma/talk2aiagents4pharma/agents/main_agent.py +70 -0
  8. aiagents4pharma/talk2aiagents4pharma/configs/__init__.py +5 -0
  9. aiagents4pharma/talk2aiagents4pharma/configs/agents/__init__.py +5 -0
  10. aiagents4pharma/talk2aiagents4pharma/configs/agents/main_agent/default.yaml +29 -0
  11. aiagents4pharma/talk2aiagents4pharma/configs/app/__init__.py +0 -0
  12. aiagents4pharma/talk2aiagents4pharma/configs/app/frontend/__init__.py +0 -0
  13. aiagents4pharma/talk2aiagents4pharma/configs/app/frontend/default.yaml +102 -0
  14. aiagents4pharma/talk2aiagents4pharma/configs/config.yaml +4 -0
  15. aiagents4pharma/talk2aiagents4pharma/docker-compose/cpu/.env.example +23 -0
  16. aiagents4pharma/talk2aiagents4pharma/docker-compose/cpu/docker-compose.yml +93 -0
  17. aiagents4pharma/talk2aiagents4pharma/docker-compose/gpu/.env.example +23 -0
  18. aiagents4pharma/talk2aiagents4pharma/docker-compose/gpu/docker-compose.yml +108 -0
  19. aiagents4pharma/talk2aiagents4pharma/install.md +154 -0
  20. aiagents4pharma/talk2aiagents4pharma/states/__init__.py +5 -0
  21. aiagents4pharma/talk2aiagents4pharma/states/state_talk2aiagents4pharma.py +18 -0
  22. aiagents4pharma/talk2aiagents4pharma/tests/__init__.py +3 -0
  23. aiagents4pharma/talk2aiagents4pharma/tests/test_main_agent.py +312 -0
  24. aiagents4pharma/talk2biomodels/.dockerignore +13 -0
  25. aiagents4pharma/talk2biomodels/Dockerfile +104 -0
  26. aiagents4pharma/talk2biomodels/README.md +1 -0
  27. aiagents4pharma/talk2biomodels/__init__.py +5 -0
  28. aiagents4pharma/talk2biomodels/agents/__init__.py +6 -0
  29. aiagents4pharma/talk2biomodels/agents/t2b_agent.py +104 -0
  30. aiagents4pharma/talk2biomodels/api/__init__.py +5 -0
  31. aiagents4pharma/talk2biomodels/api/ols.py +75 -0
  32. aiagents4pharma/talk2biomodels/api/uniprot.py +36 -0
  33. aiagents4pharma/talk2biomodels/configs/__init__.py +5 -0
  34. aiagents4pharma/talk2biomodels/configs/agents/__init__.py +5 -0
  35. aiagents4pharma/talk2biomodels/configs/agents/t2b_agent/__init__.py +3 -0
  36. aiagents4pharma/talk2biomodels/configs/agents/t2b_agent/default.yaml +14 -0
  37. aiagents4pharma/talk2biomodels/configs/app/__init__.py +0 -0
  38. aiagents4pharma/talk2biomodels/configs/app/frontend/__init__.py +0 -0
  39. aiagents4pharma/talk2biomodels/configs/app/frontend/default.yaml +72 -0
  40. aiagents4pharma/talk2biomodels/configs/config.yaml +7 -0
  41. aiagents4pharma/talk2biomodels/configs/tools/__init__.py +5 -0
  42. aiagents4pharma/talk2biomodels/configs/tools/ask_question/__init__.py +3 -0
  43. aiagents4pharma/talk2biomodels/configs/tools/ask_question/default.yaml +30 -0
  44. aiagents4pharma/talk2biomodels/configs/tools/custom_plotter/__init__.py +3 -0
  45. aiagents4pharma/talk2biomodels/configs/tools/custom_plotter/default.yaml +8 -0
  46. aiagents4pharma/talk2biomodels/configs/tools/get_annotation/__init__.py +3 -0
  47. aiagents4pharma/talk2biomodels/configs/tools/get_annotation/default.yaml +8 -0
  48. aiagents4pharma/talk2biomodels/install.md +63 -0
  49. aiagents4pharma/talk2biomodels/models/__init__.py +5 -0
  50. aiagents4pharma/talk2biomodels/models/basico_model.py +125 -0
  51. aiagents4pharma/talk2biomodels/models/sys_bio_model.py +60 -0
  52. aiagents4pharma/talk2biomodels/states/__init__.py +6 -0
  53. aiagents4pharma/talk2biomodels/states/state_talk2biomodels.py +49 -0
  54. aiagents4pharma/talk2biomodels/tests/BIOMD0000000449_url.xml +1585 -0
  55. aiagents4pharma/talk2biomodels/tests/__init__.py +3 -0
  56. aiagents4pharma/talk2biomodels/tests/article_on_model_537.pdf +0 -0
  57. aiagents4pharma/talk2biomodels/tests/test_api.py +31 -0
  58. aiagents4pharma/talk2biomodels/tests/test_ask_question.py +42 -0
  59. aiagents4pharma/talk2biomodels/tests/test_basico_model.py +67 -0
  60. aiagents4pharma/talk2biomodels/tests/test_get_annotation.py +190 -0
  61. aiagents4pharma/talk2biomodels/tests/test_getmodelinfo.py +92 -0
  62. aiagents4pharma/talk2biomodels/tests/test_integration.py +116 -0
  63. aiagents4pharma/talk2biomodels/tests/test_load_biomodel.py +35 -0
  64. aiagents4pharma/talk2biomodels/tests/test_param_scan.py +71 -0
  65. aiagents4pharma/talk2biomodels/tests/test_query_article.py +184 -0
  66. aiagents4pharma/talk2biomodels/tests/test_save_model.py +47 -0
  67. aiagents4pharma/talk2biomodels/tests/test_search_models.py +35 -0
  68. aiagents4pharma/talk2biomodels/tests/test_simulate_model.py +44 -0
  69. aiagents4pharma/talk2biomodels/tests/test_steady_state.py +86 -0
  70. aiagents4pharma/talk2biomodels/tests/test_sys_bio_model.py +67 -0
  71. aiagents4pharma/talk2biomodels/tools/__init__.py +17 -0
  72. aiagents4pharma/talk2biomodels/tools/ask_question.py +125 -0
  73. aiagents4pharma/talk2biomodels/tools/custom_plotter.py +165 -0
  74. aiagents4pharma/talk2biomodels/tools/get_annotation.py +342 -0
  75. aiagents4pharma/talk2biomodels/tools/get_modelinfo.py +159 -0
  76. aiagents4pharma/talk2biomodels/tools/load_arguments.py +134 -0
  77. aiagents4pharma/talk2biomodels/tools/load_biomodel.py +44 -0
  78. aiagents4pharma/talk2biomodels/tools/parameter_scan.py +310 -0
  79. aiagents4pharma/talk2biomodels/tools/query_article.py +64 -0
  80. aiagents4pharma/talk2biomodels/tools/save_model.py +98 -0
  81. aiagents4pharma/talk2biomodels/tools/search_models.py +96 -0
  82. aiagents4pharma/talk2biomodels/tools/simulate_model.py +137 -0
  83. aiagents4pharma/talk2biomodels/tools/steady_state.py +187 -0
  84. aiagents4pharma/talk2biomodels/tools/utils.py +23 -0
  85. aiagents4pharma/talk2cells/README.md +1 -0
  86. aiagents4pharma/talk2cells/__init__.py +5 -0
  87. aiagents4pharma/talk2cells/agents/__init__.py +6 -0
  88. aiagents4pharma/talk2cells/agents/scp_agent.py +87 -0
  89. aiagents4pharma/talk2cells/states/__init__.py +6 -0
  90. aiagents4pharma/talk2cells/states/state_talk2cells.py +15 -0
  91. aiagents4pharma/talk2cells/tests/scp_agent/test_scp_agent.py +22 -0
  92. aiagents4pharma/talk2cells/tools/__init__.py +6 -0
  93. aiagents4pharma/talk2cells/tools/scp_agent/__init__.py +6 -0
  94. aiagents4pharma/talk2cells/tools/scp_agent/display_studies.py +27 -0
  95. aiagents4pharma/talk2cells/tools/scp_agent/search_studies.py +78 -0
  96. aiagents4pharma/talk2knowledgegraphs/.dockerignore +13 -0
  97. aiagents4pharma/talk2knowledgegraphs/Dockerfile +131 -0
  98. aiagents4pharma/talk2knowledgegraphs/README.md +1 -0
  99. aiagents4pharma/talk2knowledgegraphs/__init__.py +5 -0
  100. aiagents4pharma/talk2knowledgegraphs/agents/__init__.py +5 -0
  101. aiagents4pharma/talk2knowledgegraphs/agents/t2kg_agent.py +99 -0
  102. aiagents4pharma/talk2knowledgegraphs/configs/__init__.py +5 -0
  103. aiagents4pharma/talk2knowledgegraphs/configs/agents/t2kg_agent/__init__.py +3 -0
  104. aiagents4pharma/talk2knowledgegraphs/configs/agents/t2kg_agent/default.yaml +62 -0
  105. aiagents4pharma/talk2knowledgegraphs/configs/app/__init__.py +5 -0
  106. aiagents4pharma/talk2knowledgegraphs/configs/app/frontend/__init__.py +3 -0
  107. aiagents4pharma/talk2knowledgegraphs/configs/app/frontend/default.yaml +79 -0
  108. aiagents4pharma/talk2knowledgegraphs/configs/config.yaml +13 -0
  109. aiagents4pharma/talk2knowledgegraphs/configs/tools/__init__.py +5 -0
  110. aiagents4pharma/talk2knowledgegraphs/configs/tools/graphrag_reasoning/__init__.py +3 -0
  111. aiagents4pharma/talk2knowledgegraphs/configs/tools/graphrag_reasoning/default.yaml +24 -0
  112. aiagents4pharma/talk2knowledgegraphs/configs/tools/multimodal_subgraph_extraction/__init__.py +0 -0
  113. aiagents4pharma/talk2knowledgegraphs/configs/tools/multimodal_subgraph_extraction/default.yaml +33 -0
  114. aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_extraction/__init__.py +3 -0
  115. aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_extraction/default.yaml +43 -0
  116. aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_summarization/__init__.py +3 -0
  117. aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_summarization/default.yaml +9 -0
  118. aiagents4pharma/talk2knowledgegraphs/configs/utils/database/milvus/__init__.py +3 -0
  119. aiagents4pharma/talk2knowledgegraphs/configs/utils/database/milvus/default.yaml +61 -0
  120. aiagents4pharma/talk2knowledgegraphs/configs/utils/enrichments/ols_terms/default.yaml +3 -0
  121. aiagents4pharma/talk2knowledgegraphs/configs/utils/enrichments/reactome_pathways/default.yaml +3 -0
  122. aiagents4pharma/talk2knowledgegraphs/configs/utils/enrichments/uniprot_proteins/default.yaml +6 -0
  123. aiagents4pharma/talk2knowledgegraphs/configs/utils/pubchem_utils/default.yaml +5 -0
  124. aiagents4pharma/talk2knowledgegraphs/datasets/__init__.py +5 -0
  125. aiagents4pharma/talk2knowledgegraphs/datasets/biobridge_primekg.py +607 -0
  126. aiagents4pharma/talk2knowledgegraphs/datasets/dataset.py +25 -0
  127. aiagents4pharma/talk2knowledgegraphs/datasets/primekg.py +212 -0
  128. aiagents4pharma/talk2knowledgegraphs/datasets/starkqa_primekg.py +210 -0
  129. aiagents4pharma/talk2knowledgegraphs/docker-compose/cpu/.env.example +23 -0
  130. aiagents4pharma/talk2knowledgegraphs/docker-compose/cpu/docker-compose.yml +93 -0
  131. aiagents4pharma/talk2knowledgegraphs/docker-compose/gpu/.env.example +23 -0
  132. aiagents4pharma/talk2knowledgegraphs/docker-compose/gpu/docker-compose.yml +108 -0
  133. aiagents4pharma/talk2knowledgegraphs/entrypoint.sh +180 -0
  134. aiagents4pharma/talk2knowledgegraphs/install.md +165 -0
  135. aiagents4pharma/talk2knowledgegraphs/milvus_data_dump.py +886 -0
  136. aiagents4pharma/talk2knowledgegraphs/states/__init__.py +5 -0
  137. aiagents4pharma/talk2knowledgegraphs/states/state_talk2knowledgegraphs.py +40 -0
  138. aiagents4pharma/talk2knowledgegraphs/tests/__init__.py +0 -0
  139. aiagents4pharma/talk2knowledgegraphs/tests/test_agents_t2kg_agent.py +318 -0
  140. aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_biobridge_primekg.py +248 -0
  141. aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_dataset.py +33 -0
  142. aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_primekg.py +86 -0
  143. aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_starkqa_primekg.py +125 -0
  144. aiagents4pharma/talk2knowledgegraphs/tests/test_tools_graphrag_reasoning.py +257 -0
  145. aiagents4pharma/talk2knowledgegraphs/tests/test_tools_milvus_multimodal_subgraph_extraction.py +1444 -0
  146. aiagents4pharma/talk2knowledgegraphs/tests/test_tools_multimodal_subgraph_extraction.py +159 -0
  147. aiagents4pharma/talk2knowledgegraphs/tests/test_tools_subgraph_extraction.py +152 -0
  148. aiagents4pharma/talk2knowledgegraphs/tests/test_tools_subgraph_summarization.py +201 -0
  149. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_database_milvus_connection_manager.py +812 -0
  150. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_embeddings.py +51 -0
  151. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_huggingface.py +49 -0
  152. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_nim_molmim.py +59 -0
  153. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_ollama.py +63 -0
  154. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_sentencetransformer.py +47 -0
  155. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_enrichments.py +40 -0
  156. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_ollama.py +94 -0
  157. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_ols.py +70 -0
  158. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_pubchem.py +45 -0
  159. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_reactome.py +44 -0
  160. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_uniprot.py +48 -0
  161. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_extractions_milvus_multimodal_pcst.py +759 -0
  162. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_kg_utils.py +78 -0
  163. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_pubchem_utils.py +123 -0
  164. aiagents4pharma/talk2knowledgegraphs/tools/__init__.py +11 -0
  165. aiagents4pharma/talk2knowledgegraphs/tools/graphrag_reasoning.py +138 -0
  166. aiagents4pharma/talk2knowledgegraphs/tools/load_arguments.py +22 -0
  167. aiagents4pharma/talk2knowledgegraphs/tools/milvus_multimodal_subgraph_extraction.py +965 -0
  168. aiagents4pharma/talk2knowledgegraphs/tools/multimodal_subgraph_extraction.py +374 -0
  169. aiagents4pharma/talk2knowledgegraphs/tools/subgraph_extraction.py +291 -0
  170. aiagents4pharma/talk2knowledgegraphs/tools/subgraph_summarization.py +123 -0
  171. aiagents4pharma/talk2knowledgegraphs/utils/__init__.py +5 -0
  172. aiagents4pharma/talk2knowledgegraphs/utils/database/__init__.py +5 -0
  173. aiagents4pharma/talk2knowledgegraphs/utils/database/milvus_connection_manager.py +586 -0
  174. aiagents4pharma/talk2knowledgegraphs/utils/embeddings/__init__.py +5 -0
  175. aiagents4pharma/talk2knowledgegraphs/utils/embeddings/embeddings.py +81 -0
  176. aiagents4pharma/talk2knowledgegraphs/utils/embeddings/huggingface.py +111 -0
  177. aiagents4pharma/talk2knowledgegraphs/utils/embeddings/nim_molmim.py +54 -0
  178. aiagents4pharma/talk2knowledgegraphs/utils/embeddings/ollama.py +87 -0
  179. aiagents4pharma/talk2knowledgegraphs/utils/embeddings/sentence_transformer.py +73 -0
  180. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/__init__.py +12 -0
  181. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/enrichments.py +37 -0
  182. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/ollama.py +129 -0
  183. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/ols_terms.py +89 -0
  184. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/pubchem_strings.py +78 -0
  185. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/reactome_pathways.py +71 -0
  186. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/uniprot_proteins.py +98 -0
  187. aiagents4pharma/talk2knowledgegraphs/utils/extractions/__init__.py +5 -0
  188. aiagents4pharma/talk2knowledgegraphs/utils/extractions/milvus_multimodal_pcst.py +762 -0
  189. aiagents4pharma/talk2knowledgegraphs/utils/extractions/multimodal_pcst.py +298 -0
  190. aiagents4pharma/talk2knowledgegraphs/utils/extractions/pcst.py +229 -0
  191. aiagents4pharma/talk2knowledgegraphs/utils/kg_utils.py +67 -0
  192. aiagents4pharma/talk2knowledgegraphs/utils/pubchem_utils.py +104 -0
  193. aiagents4pharma/talk2scholars/.dockerignore +13 -0
  194. aiagents4pharma/talk2scholars/Dockerfile +104 -0
  195. aiagents4pharma/talk2scholars/README.md +1 -0
  196. aiagents4pharma/talk2scholars/__init__.py +7 -0
  197. aiagents4pharma/talk2scholars/agents/__init__.py +13 -0
  198. aiagents4pharma/talk2scholars/agents/main_agent.py +89 -0
  199. aiagents4pharma/talk2scholars/agents/paper_download_agent.py +96 -0
  200. aiagents4pharma/talk2scholars/agents/pdf_agent.py +101 -0
  201. aiagents4pharma/talk2scholars/agents/s2_agent.py +135 -0
  202. aiagents4pharma/talk2scholars/agents/zotero_agent.py +127 -0
  203. aiagents4pharma/talk2scholars/configs/__init__.py +7 -0
  204. aiagents4pharma/talk2scholars/configs/agents/__init__.py +7 -0
  205. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/__init__.py +7 -0
  206. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/__init__.py +3 -0
  207. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/default.yaml +52 -0
  208. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/paper_download_agent/__init__.py +3 -0
  209. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/paper_download_agent/default.yaml +19 -0
  210. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/pdf_agent/__init__.py +3 -0
  211. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/pdf_agent/default.yaml +19 -0
  212. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/s2_agent/__init__.py +3 -0
  213. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/s2_agent/default.yaml +44 -0
  214. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/zotero_agent/__init__.py +3 -0
  215. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/zotero_agent/default.yaml +19 -0
  216. aiagents4pharma/talk2scholars/configs/app/__init__.py +7 -0
  217. aiagents4pharma/talk2scholars/configs/app/frontend/__init__.py +3 -0
  218. aiagents4pharma/talk2scholars/configs/app/frontend/default.yaml +72 -0
  219. aiagents4pharma/talk2scholars/configs/config.yaml +16 -0
  220. aiagents4pharma/talk2scholars/configs/tools/__init__.py +21 -0
  221. aiagents4pharma/talk2scholars/configs/tools/multi_paper_recommendation/__init__.py +3 -0
  222. aiagents4pharma/talk2scholars/configs/tools/multi_paper_recommendation/default.yaml +26 -0
  223. aiagents4pharma/talk2scholars/configs/tools/paper_download/__init__.py +3 -0
  224. aiagents4pharma/talk2scholars/configs/tools/paper_download/default.yaml +124 -0
  225. aiagents4pharma/talk2scholars/configs/tools/question_and_answer/__init__.py +3 -0
  226. aiagents4pharma/talk2scholars/configs/tools/question_and_answer/default.yaml +62 -0
  227. aiagents4pharma/talk2scholars/configs/tools/retrieve_semantic_scholar_paper_id/__init__.py +3 -0
  228. aiagents4pharma/talk2scholars/configs/tools/retrieve_semantic_scholar_paper_id/default.yaml +12 -0
  229. aiagents4pharma/talk2scholars/configs/tools/search/__init__.py +3 -0
  230. aiagents4pharma/talk2scholars/configs/tools/search/default.yaml +26 -0
  231. aiagents4pharma/talk2scholars/configs/tools/single_paper_recommendation/__init__.py +3 -0
  232. aiagents4pharma/talk2scholars/configs/tools/single_paper_recommendation/default.yaml +26 -0
  233. aiagents4pharma/talk2scholars/configs/tools/zotero_read/__init__.py +3 -0
  234. aiagents4pharma/talk2scholars/configs/tools/zotero_read/default.yaml +57 -0
  235. aiagents4pharma/talk2scholars/configs/tools/zotero_write/__inti__.py +3 -0
  236. aiagents4pharma/talk2scholars/configs/tools/zotero_write/default.yaml +55 -0
  237. aiagents4pharma/talk2scholars/docker-compose/cpu/.env.example +21 -0
  238. aiagents4pharma/talk2scholars/docker-compose/cpu/docker-compose.yml +90 -0
  239. aiagents4pharma/talk2scholars/docker-compose/gpu/.env.example +21 -0
  240. aiagents4pharma/talk2scholars/docker-compose/gpu/docker-compose.yml +105 -0
  241. aiagents4pharma/talk2scholars/install.md +122 -0
  242. aiagents4pharma/talk2scholars/state/__init__.py +7 -0
  243. aiagents4pharma/talk2scholars/state/state_talk2scholars.py +98 -0
  244. aiagents4pharma/talk2scholars/tests/__init__.py +3 -0
  245. aiagents4pharma/talk2scholars/tests/test_agents_main_agent.py +256 -0
  246. aiagents4pharma/talk2scholars/tests/test_agents_paper_agents_download_agent.py +139 -0
  247. aiagents4pharma/talk2scholars/tests/test_agents_pdf_agent.py +114 -0
  248. aiagents4pharma/talk2scholars/tests/test_agents_s2_agent.py +198 -0
  249. aiagents4pharma/talk2scholars/tests/test_agents_zotero_agent.py +160 -0
  250. aiagents4pharma/talk2scholars/tests/test_s2_tools_display_dataframe.py +91 -0
  251. aiagents4pharma/talk2scholars/tests/test_s2_tools_query_dataframe.py +191 -0
  252. aiagents4pharma/talk2scholars/tests/test_states_state.py +38 -0
  253. aiagents4pharma/talk2scholars/tests/test_tools_paper_downloader.py +507 -0
  254. aiagents4pharma/talk2scholars/tests/test_tools_question_and_answer_tool.py +105 -0
  255. aiagents4pharma/talk2scholars/tests/test_tools_s2_multi.py +307 -0
  256. aiagents4pharma/talk2scholars/tests/test_tools_s2_retrieve.py +67 -0
  257. aiagents4pharma/talk2scholars/tests/test_tools_s2_search.py +286 -0
  258. aiagents4pharma/talk2scholars/tests/test_tools_s2_single.py +298 -0
  259. aiagents4pharma/talk2scholars/tests/test_utils_arxiv_downloader.py +469 -0
  260. aiagents4pharma/talk2scholars/tests/test_utils_base_paper_downloader.py +598 -0
  261. aiagents4pharma/talk2scholars/tests/test_utils_biorxiv_downloader.py +669 -0
  262. aiagents4pharma/talk2scholars/tests/test_utils_medrxiv_downloader.py +500 -0
  263. aiagents4pharma/talk2scholars/tests/test_utils_nvidia_nim_reranker.py +117 -0
  264. aiagents4pharma/talk2scholars/tests/test_utils_pdf_answer_formatter.py +67 -0
  265. aiagents4pharma/talk2scholars/tests/test_utils_pdf_batch_processor.py +92 -0
  266. aiagents4pharma/talk2scholars/tests/test_utils_pdf_collection_manager.py +173 -0
  267. aiagents4pharma/talk2scholars/tests/test_utils_pdf_document_processor.py +68 -0
  268. aiagents4pharma/talk2scholars/tests/test_utils_pdf_generate_answer.py +72 -0
  269. aiagents4pharma/talk2scholars/tests/test_utils_pdf_gpu_detection.py +129 -0
  270. aiagents4pharma/talk2scholars/tests/test_utils_pdf_paper_loader.py +116 -0
  271. aiagents4pharma/talk2scholars/tests/test_utils_pdf_rag_pipeline.py +88 -0
  272. aiagents4pharma/talk2scholars/tests/test_utils_pdf_retrieve_chunks.py +190 -0
  273. aiagents4pharma/talk2scholars/tests/test_utils_pdf_singleton_manager.py +159 -0
  274. aiagents4pharma/talk2scholars/tests/test_utils_pdf_vector_normalization.py +121 -0
  275. aiagents4pharma/talk2scholars/tests/test_utils_pdf_vector_store.py +406 -0
  276. aiagents4pharma/talk2scholars/tests/test_utils_pubmed_downloader.py +1007 -0
  277. aiagents4pharma/talk2scholars/tests/test_utils_read_helper_utils.py +106 -0
  278. aiagents4pharma/talk2scholars/tests/test_utils_s2_utils_ext_ids.py +403 -0
  279. aiagents4pharma/talk2scholars/tests/test_utils_tool_helper_utils.py +85 -0
  280. aiagents4pharma/talk2scholars/tests/test_utils_zotero_human_in_the_loop.py +266 -0
  281. aiagents4pharma/talk2scholars/tests/test_utils_zotero_path.py +496 -0
  282. aiagents4pharma/talk2scholars/tests/test_utils_zotero_pdf_downloader_utils.py +46 -0
  283. aiagents4pharma/talk2scholars/tests/test_utils_zotero_read.py +743 -0
  284. aiagents4pharma/talk2scholars/tests/test_utils_zotero_write.py +151 -0
  285. aiagents4pharma/talk2scholars/tools/__init__.py +9 -0
  286. aiagents4pharma/talk2scholars/tools/paper_download/__init__.py +12 -0
  287. aiagents4pharma/talk2scholars/tools/paper_download/paper_downloader.py +442 -0
  288. aiagents4pharma/talk2scholars/tools/paper_download/utils/__init__.py +22 -0
  289. aiagents4pharma/talk2scholars/tools/paper_download/utils/arxiv_downloader.py +207 -0
  290. aiagents4pharma/talk2scholars/tools/paper_download/utils/base_paper_downloader.py +336 -0
  291. aiagents4pharma/talk2scholars/tools/paper_download/utils/biorxiv_downloader.py +313 -0
  292. aiagents4pharma/talk2scholars/tools/paper_download/utils/medrxiv_downloader.py +196 -0
  293. aiagents4pharma/talk2scholars/tools/paper_download/utils/pubmed_downloader.py +323 -0
  294. aiagents4pharma/talk2scholars/tools/pdf/__init__.py +7 -0
  295. aiagents4pharma/talk2scholars/tools/pdf/question_and_answer.py +170 -0
  296. aiagents4pharma/talk2scholars/tools/pdf/utils/__init__.py +37 -0
  297. aiagents4pharma/talk2scholars/tools/pdf/utils/answer_formatter.py +62 -0
  298. aiagents4pharma/talk2scholars/tools/pdf/utils/batch_processor.py +198 -0
  299. aiagents4pharma/talk2scholars/tools/pdf/utils/collection_manager.py +172 -0
  300. aiagents4pharma/talk2scholars/tools/pdf/utils/document_processor.py +76 -0
  301. aiagents4pharma/talk2scholars/tools/pdf/utils/generate_answer.py +97 -0
  302. aiagents4pharma/talk2scholars/tools/pdf/utils/get_vectorstore.py +59 -0
  303. aiagents4pharma/talk2scholars/tools/pdf/utils/gpu_detection.py +150 -0
  304. aiagents4pharma/talk2scholars/tools/pdf/utils/nvidia_nim_reranker.py +97 -0
  305. aiagents4pharma/talk2scholars/tools/pdf/utils/paper_loader.py +123 -0
  306. aiagents4pharma/talk2scholars/tools/pdf/utils/rag_pipeline.py +113 -0
  307. aiagents4pharma/talk2scholars/tools/pdf/utils/retrieve_chunks.py +197 -0
  308. aiagents4pharma/talk2scholars/tools/pdf/utils/singleton_manager.py +140 -0
  309. aiagents4pharma/talk2scholars/tools/pdf/utils/tool_helper.py +86 -0
  310. aiagents4pharma/talk2scholars/tools/pdf/utils/vector_normalization.py +150 -0
  311. aiagents4pharma/talk2scholars/tools/pdf/utils/vector_store.py +327 -0
  312. aiagents4pharma/talk2scholars/tools/s2/__init__.py +21 -0
  313. aiagents4pharma/talk2scholars/tools/s2/display_dataframe.py +110 -0
  314. aiagents4pharma/talk2scholars/tools/s2/multi_paper_rec.py +111 -0
  315. aiagents4pharma/talk2scholars/tools/s2/query_dataframe.py +233 -0
  316. aiagents4pharma/talk2scholars/tools/s2/retrieve_semantic_scholar_paper_id.py +128 -0
  317. aiagents4pharma/talk2scholars/tools/s2/search.py +101 -0
  318. aiagents4pharma/talk2scholars/tools/s2/single_paper_rec.py +102 -0
  319. aiagents4pharma/talk2scholars/tools/s2/utils/__init__.py +5 -0
  320. aiagents4pharma/talk2scholars/tools/s2/utils/multi_helper.py +223 -0
  321. aiagents4pharma/talk2scholars/tools/s2/utils/search_helper.py +205 -0
  322. aiagents4pharma/talk2scholars/tools/s2/utils/single_helper.py +216 -0
  323. aiagents4pharma/talk2scholars/tools/zotero/__init__.py +7 -0
  324. aiagents4pharma/talk2scholars/tools/zotero/utils/__init__.py +7 -0
  325. aiagents4pharma/talk2scholars/tools/zotero/utils/read_helper.py +270 -0
  326. aiagents4pharma/talk2scholars/tools/zotero/utils/review_helper.py +74 -0
  327. aiagents4pharma/talk2scholars/tools/zotero/utils/write_helper.py +194 -0
  328. aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_path.py +180 -0
  329. aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_pdf_downloader.py +133 -0
  330. aiagents4pharma/talk2scholars/tools/zotero/zotero_read.py +105 -0
  331. aiagents4pharma/talk2scholars/tools/zotero/zotero_review.py +162 -0
  332. aiagents4pharma/talk2scholars/tools/zotero/zotero_write.py +91 -0
  333. aiagents4pharma-0.0.0.dist-info/METADATA +335 -0
  334. aiagents4pharma-0.0.0.dist-info/RECORD +336 -0
  335. aiagents4pharma-0.0.0.dist-info/WHEEL +4 -0
  336. aiagents4pharma-0.0.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env python3
2
+
3
+ """
4
+ Agent for interacting with Zotero with human-in-the-loop features
5
+ """
6
+
7
+ import logging
8
+ from typing import Any
9
+
10
+ import hydra
11
+ from langchain_core.language_models.chat_models import BaseChatModel
12
+ from langgraph.checkpoint.memory import MemorySaver
13
+ from langgraph.graph import START, StateGraph
14
+ from langgraph.prebuilt import ToolNode, create_react_agent
15
+
16
+ from ..state.state_talk2scholars import Talk2Scholars
17
+ from ..tools.s2.display_dataframe import display_dataframe
18
+ from ..tools.s2.query_dataframe import query_dataframe
19
+ from ..tools.s2.retrieve_semantic_scholar_paper_id import (
20
+ retrieve_semantic_scholar_paper_id,
21
+ )
22
+ from ..tools.zotero.zotero_read import zotero_read
23
+ from ..tools.zotero.zotero_review import zotero_review
24
+ from ..tools.zotero.zotero_write import zotero_write
25
+
26
+ # Initialize logger
27
+ logging.basicConfig(level=logging.INFO)
28
+ logger = logging.getLogger(__name__)
29
+
30
+
31
+ def get_app(uniq_id, llm_model: BaseChatModel):
32
+ """
33
+ Initializes and returns the LangGraph application for the Zotero agent.
34
+
35
+ This function sets up the Zotero agent, which integrates various tools to search,
36
+ retrieve, and display research papers from Zotero. The agent follows the ReAct
37
+ pattern for structured interaction and includes human-in-the-loop features.
38
+
39
+ Args:
40
+ uniq_id (str): Unique identifier for the current conversation session.
41
+ llm_model (BaseChatModel, optional): The language model to be used by the agent.
42
+ Defaults to `ChatOpenAI(model="gpt-4o-mini", temperature=0)`.
43
+
44
+ Returns:
45
+ StateGraph: A compiled LangGraph application that enables the Zotero agent to
46
+ process user queries and retrieve research papers.
47
+
48
+ Example:
49
+ >>> app = get_app("thread_123")
50
+ >>> result = app.invoke(initial_state)
51
+ """
52
+
53
+ def zotero_agent_node(state: Talk2Scholars) -> dict[str, Any]:
54
+ """
55
+ Processes the user query and retrieves relevant research papers from Zotero.
56
+
57
+ This function calls the language model using the configured `ReAct` agent to
58
+ analyze the state and generate an appropriate response. The function then
59
+ returns control to the main supervisor.
60
+
61
+ Args:
62
+ state (Talk2Scholars): The current conversation state, including messages exchanged
63
+ and any previously retrieved research papers.
64
+
65
+ Returns:
66
+ Dict[str, Any]: A dictionary containing the updated conversation state.
67
+
68
+ Example:
69
+ >>> result = zotero_agent_node(current_state)
70
+ >>> papers = result.get("papers", [])
71
+ """
72
+ logger.log(logging.INFO, "Creating Agent_Zotero node with thread_id %s", uniq_id)
73
+ result = model.invoke(state, {"configurable": {"thread_id": uniq_id}})
74
+
75
+ return result
76
+
77
+ # Load hydra configuration
78
+ logger.log(logging.INFO, "Load Hydra configuration for Talk2Scholars Zotero agent.")
79
+ with hydra.initialize(version_base=None, config_path="../configs"):
80
+ cfg = hydra.compose(
81
+ config_name="config",
82
+ overrides=["agents/talk2scholars/zotero_agent=default"],
83
+ )
84
+ cfg = cfg.agents.talk2scholars.zotero_agent
85
+ logger.log(logging.INFO, "Loaded configuration for Zotero agent")
86
+
87
+ # Define the tools
88
+ tools = ToolNode(
89
+ [
90
+ zotero_read,
91
+ display_dataframe,
92
+ query_dataframe,
93
+ retrieve_semantic_scholar_paper_id,
94
+ zotero_review,
95
+ zotero_write,
96
+ ]
97
+ )
98
+
99
+ # Define the model
100
+ logger.log(logging.INFO, "Using model %s", llm_model)
101
+
102
+ # Create the agent
103
+ model = create_react_agent(
104
+ llm_model,
105
+ tools=tools,
106
+ state_schema=Talk2Scholars,
107
+ prompt=cfg.zotero_agent,
108
+ checkpointer=MemorySaver(), # Required for interrupts to work
109
+ )
110
+
111
+ workflow = StateGraph(Talk2Scholars)
112
+ workflow.add_node("zotero_agent", zotero_agent_node)
113
+ workflow.add_edge(START, "zotero_agent")
114
+
115
+ # Initialize memory to persist state between graph runs
116
+ checkpointer = MemorySaver()
117
+
118
+ # Compile the graph
119
+ app = workflow.compile(checkpointer=checkpointer, name="zotero_agent")
120
+ logger.log(
121
+ logging.INFO,
122
+ "Compiled the graph with thread_id %s and llm_model %s",
123
+ uniq_id,
124
+ llm_model,
125
+ )
126
+
127
+ return app
@@ -0,0 +1,7 @@
1
+ """
2
+ This package contains configuration settings and prompts used by various AI agents
3
+ """
4
+
5
+ from . import agents, app, tools
6
+
7
+ __all__ = ["agents", "tools", "app"]
@@ -0,0 +1,7 @@
1
+ """
2
+ Import all the modules in the package
3
+ """
4
+
5
+ from . import talk2scholars
6
+
7
+ __all__ = ["talk2scholars"]
@@ -0,0 +1,7 @@
1
+ """
2
+ Import all the modules in the package
3
+ """
4
+
5
+ from . import main_agent, pdf_agent, s2_agent, zotero_agent
6
+
7
+ __all__ = ["s2_agent", "main_agent", "pdf_agent", "zotero_agent"]
@@ -0,0 +1,3 @@
1
+ """
2
+ Import all the modules in the package
3
+ """
@@ -0,0 +1,52 @@
1
+ _target_: agents.main_agent.get_app
2
+ temperature: 0
3
+ system_prompt: |
4
+ You are the **Main Supervisor Agent**.
5
+
6
+ You coordinate and delegate tasks to four specialized sub-agents:
7
+
8
+ 1. **s2_agent** – Use this to search for or recommend academic papers.
9
+ 2. **zotero_agent** – Use this to read from or write to the user's Zotero account.
10
+ - This agent can also save papers to the Zotero library, but only with the user's explicit approval.
11
+ 3. **pdf_agent** – Use this to answer questions or perform tasks on downloaded, uploaded, or Zotero-based papers or PDFs.
12
+ - This includes summarization, explanation, and answering content-based questions.
13
+ 4. **paper_download_agent** – Use this to download PDFs.
14
+
15
+ **IMPORTANT – Paper Download Rules:**
16
+ - Before downloading any paper, **always** ask the user whether they want to:
17
+ - Download from the **last displayed table**, or
18
+ - Provide a specific paper ID or a list of paper IDs (e.g., PMID, PMCID, DOI, arXiv ID).
19
+ - If the user provides a paper ID:
20
+ - Call the `paper_download_agent` directly with that ID.
21
+ - If the user does **not** provide a paper ID:
22
+ - Inform them that no ID was provided.
23
+ - Use the `query_dataframe` tool from the `s2_agent` to extract paper IDs from the last displayed table.
24
+ - Pass the extracted IDs to the `paper_download_agent` to download the papers.
25
+ - Notify the user once the download process starts or completes.
26
+
27
+ **IMPORTANT – Q&A Disambiguation (Pause Before Acting):**
28
+ - When the user asks a question like “Tell me more about X”, “What does the first article say?”, or similar:
29
+ 1) **Pause and ask**:
30
+ “Do you want me to answer using the **PDF content** (full text), or using the **last displayed table** (metadata only)?”
31
+ - Accept synonyms: *PDF, full text, paper text* → **PDF content**.
32
+ - Accept synonyms: *last displayed table, table above, results table, search results* → **metadata/table**.
33
+ 2) **If user chooses PDF content**:
34
+ - If the PDF is already available (downloaded or in Zotero), call `pdf_agent` with the user’s question and the target paper(s).
35
+ - If the PDF is **not** available:
36
+ - Ask whether to download it now.
37
+ - If yes: follow the **Paper Download Rules** (extract IDs via `s2_agent.query_dataframe` when needed) and then call `pdf_agent`.
38
+ 3) **If user chooses metadata/table**:
39
+ - Use `s2_agent`’s `query_dataframe` tool to answer from the last displayed table (e.g., authors, venue, year, abstract snippet if present in metadata).
40
+ - Do **not** call `pdf_agent` in this path.
41
+ 4) **If the user’s choice is unclear**:
42
+ - Ask the disambiguation question again **once**. If still unclear, default to **metadata/table** and state that you can switch to PDF-level analysis on request.
43
+ 5) **If no last displayed table exists** and the user chooses metadata/table:
44
+ - Inform the user that no results table is available and offer to run a search with `s2_agent`.
45
+ 6) **Targeting a specific row (e.g., “first article”)**:
46
+ - When using metadata/table, map ordinals to rows (1-based). For example, “first article” → `row_number=1` with `query_dataframe` where applicable.
47
+
48
+ **Scope Reminders:**
49
+ - Use `s2_agent` for search/recommendations and for `query_dataframe` over the last displayed table (metadata-level only).
50
+ - Use `pdf_agent` strictly for PDF-level questions (summaries, methods, results, quotes).
51
+ - Use `paper_download_agent` only for downloading PDFs.
52
+ - Use `zotero_agent` only for reading/writing the user’s Zotero library (saving requires explicit user approval).
@@ -0,0 +1,3 @@
1
+ """
2
+ Import all the modules in the package
3
+ """
@@ -0,0 +1,19 @@
1
+ _target_: agents.paper_download_agent.get_app
2
+ paper_download_agent: |
3
+ You are the Paper Download Agent.
4
+
5
+ You are responsible for downloading PDFs of papers using their IDs. You will be provided with IDs from another agent.
6
+ If no IDs are provided, you may ask the user to supply them. You have four different tools available for downloading.
7
+ If one tool fails, try the remaining tools in sequence. If all four attempts fail, inform the user that the download
8
+ could not be completed.
9
+
10
+ **Cross-Service Download Policy:**
11
+ - Preferred service order (unless the user specifies otherwise): arxiv → biorxiv → medrxiv → pubmed.
12
+ - If a download returns no PDFs or fails for the chosen service:
13
+ 1) Try the next service in order with the same identifiers (converted as needed).
14
+ 2) Continue until one succeeds or all four fail.
15
+ - Infer service from identifier patterns when possible:
16
+ - arXiv ID: matches /^\d{4}\.\d{4,5}(v\d+)?$/ → arxiv
17
+ - DOI (starts with “10.”) → biorxiv/medrxiv (decide by metadata or try both)
18
+ - PMID (digits only, usually 7–9+) → pubmed
19
+ - Report a concise per-service outcome summary (successes/failures).
@@ -0,0 +1,3 @@
1
+ """
2
+ Import all the modules in the package
3
+ """
@@ -0,0 +1,19 @@
1
+ _target_: agents.pdf_agent.get_app
2
+ pdf_agent: |
3
+ You are the **PDF Agent**.
4
+
5
+ **Primary Role:**
6
+ Perform question-and-answer tasks on the **full text** of papers, articles, or PDFs that are already available
7
+ (downloaded locally, uploaded by the user, or stored in the user's Zotero library).
8
+
9
+ **Capabilities:**
10
+ - Answer questions based on the PDF’s content.
11
+ - Summarize entire papers or specific sections (e.g., abstract, methods, results).
12
+ - Explain complex concepts or findings from the paper.
13
+ - Extract specific information (e.g., datasets used, key results, limitations).
14
+ - Compare multiple PDFs if more than one is provided.
15
+
16
+ **Examples:**
17
+ - “Summarize the introduction of this paper.”
18
+ - “What methods did they use in the third article?”
19
+ - “Compare the results of paper A and paper B.”
@@ -0,0 +1,3 @@
1
+ """
2
+ Import all the modules in the package
3
+ """
@@ -0,0 +1,44 @@
1
+ _target_: agents.s2_agent.get_app
2
+ s2_agent: |
3
+ You are the **S2 Agent**.
4
+
5
+ **Primary Role:**
6
+ - Search for academic papers.
7
+ - Provide recommendations **only when explicitly requested** by the user.
8
+ - Display results using the `display_dataframe` tool.
9
+
10
+ **Additional Capability – Metadata Queries:**
11
+ - You can query the last displayed results table using the `query_dataframe` tool to filter, sort, or extract metadata (including paper IDs).
12
+ - Use this tool only for **metadata-level** questions (not full PDF content).
13
+
14
+ **One-Shot ID Extraction Mode (contract):**
15
+ - Trigger: The supervisor’s message starts with `[ONE-SHOT-ID-EXTRACTION]`.
16
+ - Behavior in this mode:
17
+ 1) Call **only** `query_dataframe` (e.g., with `{"extract_ids": true, "row_number": <n>}` if a specific row is requested).
18
+ 2) Reply in the **strict schema** below and then **STOP** (no further tool calls, no recommendations):
19
+ ---
20
+ IDS: <comma-separated-ids>
21
+ SOURCE: last_displayed_table
22
+ END
23
+ ---
24
+ 3) Do **not** call any other S2 tools (e.g., `retrieve_semantic_scholar_paper_id`, `get_single_paper_recommendations`, `get_multi_paper_recommendations`) in this mode.
25
+ 4) If no last displayed table exists, reply:
26
+ `IDS: NONE`
27
+ `SOURCE: none (no results table available)`
28
+ `END`
29
+ and stop.
30
+
31
+ **Tool-Selection Policy (default mode):**
32
+ - **Search**: When the user asks to find papers by title/keywords, call `search_tool`, then `display_dataframe`, then **stop**.
33
+ - **Metadata Q&A**: For questions about the last displayed table (e.g., “details for the first article”, “list all paper IDs”, “which papers mention X”), call `query_dataframe` and **stop**.
34
+ - **Recommendations**:
35
+ - Call `get_multi_paper_recommendations` only if the user explicitly asks for recommendations/similar/related papers across multiple seeds.
36
+ - Call `get_single_paper_recommendations` only if the user explicitly asks for recommendations based on a single seed paper.
37
+ - Do not infer a recommendation request from generic queries or the mere presence of paper IDs.
38
+ - At most **one** recommendation-tool call per user request.
39
+ - **Title→ID lookup**: Only call `retrieve_semantic_scholar_paper_id` when the user provides a paper title string and asks for its identifier.
40
+
41
+ **Turn Completion Rules:**
42
+ - After `search_tool` + `display_dataframe`, **end your turn** unless the user immediately requests another action.
43
+ - After any `query_dataframe` response (IDs or other metadata), **end your turn** unless the user explicitly requests recommendations next.
44
+ - Never initiate downloads or PDF Q&A; those are handled by other agents.
@@ -0,0 +1,3 @@
1
+ """
2
+ Import all the modules in the package
3
+ """
@@ -0,0 +1,19 @@
1
+ _target_: agents.zotero_agent.get_app
2
+ zotero_agent: |
3
+ You are the **Zotero Agent**.
4
+
5
+ **Primary Role:**
6
+ - Read from the user's Zotero library (list items, retrieve metadata, check existing entries).
7
+ - Write to the user's Zotero library (save new papers, update existing records) — only with explicit user approval.
8
+ - Display Zotero query results using "display_dataframe" tool.
9
+
10
+ **Rules & Boundaries:**
11
+ - Never save papers to Zotero without **explicit human approval**. If approval is denied, do not retry unless the user changes their decision.
12
+ - Do not search for papers on the web — that is the `s2_agent`’s role.
13
+ - Do not perform PDF content analysis — that is the `pdf_agent`’s role.
14
+ - Do not download PDFs directly — that is the `paper_download_agent`’s role.
15
+
16
+ **Examples:**
17
+ - “Show me all papers I saved last month.”
18
+ - “Check if I already have this paper in Zotero.”
19
+ - “Save this paper to Zotero” → Ask for explicit approval before saving.
@@ -0,0 +1,7 @@
1
+ """
2
+ Import all the modules in the package
3
+ """
4
+
5
+ from . import frontend
6
+
7
+ __all__ = ["frontend"]
@@ -0,0 +1,3 @@
1
+ """
2
+ Import all the modules in the package
3
+ """
@@ -0,0 +1,72 @@
1
+ _target_: app.frontend.streamlit_app_talk2scholars
2
+ default_user: "talk2scholars_user"
3
+
4
+ # File upload configuration
5
+ upload_data_dir: "../files"
6
+ pdf_allowed_file_types:
7
+ - "pdf"
8
+
9
+ # OpenAI configuration - can use custom base_url for enterprise/Azure deployments
10
+ openai_api_key: ${oc.env:OPENAI_API_KEY}
11
+ openai_base_url: ${oc.env:OPENAI_BASE_URL,null} # Optional: custom OpenAI endpoint
12
+ openai_llms:
13
+ - "OpenAI/gpt-4o-mini"
14
+ openai_embeddings:
15
+ - "text-embedding-ada-002"
16
+ - "text-embedding-3-small"
17
+ # Rate limiting and retry configuration
18
+ llm_max_retries: 5 # Number of retries on rate limit or transient errors
19
+ llm_timeout: 60 # Timeout in seconds for LLM requests
20
+ embedding_max_retries: 3 # Number of retries for embedding requests
21
+ embedding_timeout: 30 # Timeout in seconds for embedding requests
22
+
23
+ # NVIDIA configuration
24
+ nvidia_api_key: ${oc.env:NVIDIA_API_KEY}
25
+ nvidia_llms:
26
+ - "NVIDIA/llama-3.3-70b-instruct"
27
+ - "NVIDIA/llama-3.1-405b-instruct"
28
+ - "NVIDIA/llama-3.1-70b-instruct"
29
+ nvidia_embeddings:
30
+ - "NVIDIA/llama-3.2-nv-embedqa-1b-v2"
31
+
32
+ # Azure OpenAI configuration
33
+ azure_openai_endpoint: ${oc.env:AZURE_OPENAI_ENDPOINT,null} # Azure OpenAI endpoint
34
+ azure_openai_deployment: ${oc.env:AZURE_OPENAI_DEPLOYMENT,null} # Azure deployment name
35
+ azure_openai_api_version: ${oc.env:AZURE_OPENAI_API_VERSION,"2024-02-01"} # Azure API version
36
+ azure_openai_model_name: ${oc.env:AZURE_OPENAI_MODEL_NAME,null} # Model name for analytics
37
+ azure_openai_model_version: ${oc.env:AZURE_OPENAI_MODEL_VERSION,null} # Model version
38
+ # Azure AD authentication (uses AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET)
39
+ azure_client_id: ${oc.env:AZURE_CLIENT_ID,null}
40
+ azure_tenant_id: ${oc.env:AZURE_TENANT_ID,null}
41
+ azure_client_secret: ${oc.env:AZURE_CLIENT_SECRET,null}
42
+ azure_openai_llms:
43
+ - "Azure/gpt-4o-mini" # Will map to Azure deployment
44
+ azure_openai_embeddings:
45
+ - "Azure/text-embedding-ada-002"
46
+
47
+ # Ollama configuration (for local deployment)
48
+ ollama_llms:
49
+ - "Ollama/llama3.1:8b"
50
+ ollama_embeddings:
51
+ - "nomic-embed-text"
52
+
53
+ # Default models
54
+ default_llm_provider: "openai"
55
+ default_embedding_model: "openai"
56
+
57
+ # App settings
58
+ temperature: 0.1
59
+ streaming: False
60
+
61
+ # Logo configuration
62
+ logo_paths:
63
+ container: "/app/docs/assets/VPE.png"
64
+ local: "docs/assets/VPE.png"
65
+ relative: "../../docs/assets/VPE.png"
66
+ logo_link: "https://github.com/VirtualPatientEngine"
67
+
68
+ # Page configuration
69
+ page:
70
+ title: "Talk2Scholars"
71
+ icon: "🤖"
72
+ layout: "wide"
@@ -0,0 +1,16 @@
1
+ defaults:
2
+ - _self_
3
+ - agents/talk2scholars/main_agent: default
4
+ - agents/talk2scholars/s2_agent: default
5
+ - agents/talk2scholars/paper_download_agent: default
6
+ - agents/talk2scholars/zotero_agent: default
7
+ - app/frontend: default
8
+ - agents/talk2scholars/pdf_agent: default
9
+ - tools/search: default
10
+ - tools/paper_download: default
11
+ - tools/single_paper_recommendation: default
12
+ - tools/multi_paper_recommendation: default
13
+ - tools/retrieve_semantic_scholar_paper_id: default
14
+ - tools/question_and_answer: default
15
+ - tools/zotero_read: default
16
+ - tools/zotero_write: default
@@ -0,0 +1,21 @@
1
+ """
2
+ Import all the modules in the package
3
+ """
4
+
5
+ from . import (
6
+ multi_paper_recommendation,
7
+ question_and_answer,
8
+ search,
9
+ single_paper_recommendation,
10
+ zotero_read,
11
+ zotero_write,
12
+ )
13
+
14
+ __all__ = [
15
+ "search",
16
+ "single_paper_recommendation",
17
+ "multi_paper_recommendation",
18
+ "question_and_answer",
19
+ "zotero_read",
20
+ "zotero_write",
21
+ ]
@@ -0,0 +1,3 @@
1
+ """
2
+ Import all the modules in the package
3
+ """
@@ -0,0 +1,26 @@
1
+ api_endpoint: "https://api.semanticscholar.org/recommendations/v1/papers"
2
+ default_limit: 2
3
+ request_timeout: 10
4
+ api_fields:
5
+ - "paperId"
6
+ - "title"
7
+ - "abstract"
8
+ - "year"
9
+ - "authors.name"
10
+ - "authors.authorId"
11
+ - "citationCount"
12
+ - "url"
13
+ - "externalIds"
14
+ - "venue"
15
+ - "publicationVenue" # Full object, instead of specific subfields
16
+ - "journal" # Full object, instead of specific subfields
17
+ - "publicationDate"
18
+ # Commented fields that could be added later if needed
19
+
20
+ # Default headers and params
21
+ headers:
22
+ Content-Type: "application/json"
23
+
24
+ recommendation_params:
25
+ limit: ${.default_limit}
26
+ fields: ${.api_fields}
@@ -0,0 +1,3 @@
1
+ """
2
+ Import all the modules in the package
3
+ """
@@ -0,0 +1,124 @@
1
+ # Unified Paper Download Configuration
2
+ # Single configuration file for all paper download services
3
+
4
+ # Common settings shared across all services
5
+ defaults:
6
+ - _self_
7
+
8
+ common:
9
+ # Request Configuration
10
+ request_timeout: 15
11
+ chunk_size: 8192
12
+
13
+ # Web Request Configuration
14
+ user_agent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
15
+
16
+ # Retry and Rate Limiting (for future use)
17
+ max_retries: 3
18
+ retry_delay: 2 # seconds
19
+ batch_size: 10 # number of papers to process before delay
20
+ batch_delay: 5 # seconds between batches
21
+
22
+ # Debug Configuration
23
+ enable_detailed_logging: true
24
+
25
+ # Service-specific configurations
26
+ services:
27
+ arxiv:
28
+ # Primary API
29
+ api_url: "http://export.arxiv.org/api/query"
30
+
31
+ # PDF Download
32
+ pdf_base_url: "https://arxiv.org/pdf"
33
+
34
+ # XML namespace configuration
35
+ xml_namespace:
36
+ atom: "http://www.w3.org/2005/Atom"
37
+
38
+ # Service-specific settings (inherit common settings)
39
+ service_name: "arXiv"
40
+ identifier_type: "arXiv ID"
41
+ supports_batch: true
42
+
43
+ medrxiv:
44
+ # Primary API
45
+ api_url: "https://api.medrxiv.org/details"
46
+
47
+ # PDF Download configuration
48
+ pdf_base_url: "https://www.medrxiv.org/content/10.1101/"
49
+ pdf_url_template: "https://www.medrxiv.org/content/{identifier}v{version}.full.pdf"
50
+
51
+ # Default values
52
+ default_version: "1"
53
+
54
+ # Service-specific settings
55
+ service_name: "medRxiv"
56
+ identifier_type: "DOI"
57
+ supports_batch: true
58
+
59
+ biorxiv:
60
+ # Primary API
61
+ api_url: "https://api.biorxiv.org/details"
62
+
63
+ # PDF Download configuration
64
+ pdf_base_url: "https://www.biorxiv.org/content/10.1101/"
65
+ landing_url_template: "https://www.biorxiv.org/content/{doi}v{version}"
66
+ pdf_url_template: "https://www.biorxiv.org/content/{doi}v{version}.full.pdf"
67
+
68
+ # Default values
69
+ default_version: "1"
70
+
71
+ # Cloudflare-bypass settings
72
+ cf_clearance_timeout: 30
73
+ session_reuse: true
74
+ browser_config:
75
+ type: "custom" # Used for cloudscraper browser configuration
76
+
77
+ # Service-specific settings
78
+ service_name: "bioRxiv"
79
+ identifier_type: "DOI"
80
+ supports_batch: true
81
+
82
+ pubmed:
83
+ # Primary APIs
84
+ id_converter_url: "https://pmc.ncbi.nlm.nih.gov/tools/idconv/api/v1/articles"
85
+ oa_api_url: "https://www.ncbi.nlm.nih.gov/pmc/utils/oa/oa.fcgi"
86
+
87
+ # Alternative PDF Sources
88
+ europe_pmc_base_url: "https://europepmc.org/backend/ptpmcrender.fcgi"
89
+ pmc_page_base_url: "https://www.ncbi.nlm.nih.gov/pmc/articles"
90
+ direct_pmc_pdf_base_url: "https://pmc.ncbi.nlm.nih.gov/articles"
91
+
92
+ # URL Conversion for NCBI FTP links
93
+ ftp_base_url: "ftp://ftp.ncbi.nlm.nih.gov"
94
+ https_base_url: "https://ftp.ncbi.nlm.nih.gov"
95
+
96
+ # API configuration
97
+ id_converter_format: "json"
98
+
99
+ # Page scraping configuration
100
+ pdf_meta_name: "citation_pdf_url"
101
+
102
+ # Error handling
103
+ default_error_code: "unknown"
104
+
105
+ # PubMed-specific settings
106
+ service_name: "PubMed"
107
+ identifier_type: "PMID"
108
+ supports_batch: true
109
+ log_response_preview_chars: 500 # chars to log from API responses
110
+
111
+ # Global configuration for all services
112
+ supported_services: ["arxiv", "medrxiv", "biorxiv", "pubmed"]
113
+
114
+ # Tool configuration
115
+ tool:
116
+ name: "download_papers"
117
+ description: "Universal paper download tool supporting arXiv, medRxiv, bioRxiv, and PubMed"
118
+ supported_services: ["arxiv", "medrxiv", "biorxiv", "pubmed"]
119
+ default_service: "pubmed"
120
+
121
+ # Output configuration
122
+ max_summary_papers: 3
123
+ include_abstracts_in_summary: true
124
+ temp_file_cleanup: false # Set to true to auto-cleanup temp files
@@ -0,0 +1,3 @@
1
+ """
2
+ Import all the modules in the package
3
+ """