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,159 @@
1
+ """
2
+ Test cases for tools/subgraph_extraction.py
3
+ """
4
+
5
+ import pytest
6
+
7
+ # from langchain_openai import ChatOpenAI, OpenAIEmbeddings
8
+ from ..tools.multimodal_subgraph_extraction import MultimodalSubgraphExtractionTool
9
+
10
+ # Define the data path
11
+ DATA_PATH = "aiagents4pharma/talk2knowledgegraphs/tests/files"
12
+
13
+
14
+ @pytest.fixture(name="agent_state")
15
+ def agent_state_fixture():
16
+ """
17
+ Agent state fixture.
18
+ """
19
+ agent_state = {
20
+ # "llm_model": ChatOpenAI(model="gpt-4o-mini", temperature=0.0),
21
+ # "embedding_model": OpenAIEmbeddings(model="text-embedding-3-small"),
22
+ "selections": {
23
+ "gene/protein": [],
24
+ "molecular_function": [],
25
+ "cellular_component": [],
26
+ "biological_process": [],
27
+ "drug": [],
28
+ "disease": [],
29
+ },
30
+ "uploaded_files": [],
31
+ "topk_nodes": 3,
32
+ "topk_edges": 3,
33
+ "dic_source_graph": [
34
+ {
35
+ "name": "BioBridge",
36
+ "kg_pyg_path": f"{DATA_PATH}/biobridge_multimodal_pyg_graph.pkl",
37
+ "kg_text_path": f"{DATA_PATH}/biobridge_multimodal_text_graph.pkl",
38
+ }
39
+ ],
40
+ }
41
+
42
+ return agent_state
43
+
44
+
45
+ def test_extract_multimodal_subgraph_wo_doc(agent_state):
46
+ """
47
+ Test the multimodal subgraph extraction tool for only text as modality.
48
+
49
+ Args:
50
+ agent_state: Agent state in the form of a dictionary.
51
+ """
52
+ prompt = """
53
+ Extract all relevant information related to nodes of genes related to inflammatory bowel disease
54
+ (IBD) that existed in the knowledge graph.
55
+ Please set the extraction name for this process as `subkg_12345`.
56
+ """
57
+
58
+ # Instantiate the MultimodalSubgraphExtractionTool
59
+ subgraph_extraction_tool = MultimodalSubgraphExtractionTool()
60
+
61
+ # Invoking the subgraph_extraction_tool
62
+ response = subgraph_extraction_tool.invoke(
63
+ input={
64
+ "prompt": prompt,
65
+ "tool_call_id": "subgraph_extraction_tool",
66
+ "state": agent_state,
67
+ "arg_data": {"extraction_name": "subkg_12345"},
68
+ }
69
+ )
70
+
71
+ # Check tool message
72
+ assert response.update["messages"][-1].tool_call_id == "subgraph_extraction_tool"
73
+
74
+ # Check extracted subgraph dictionary
75
+ dic_extracted_graph = response.update["dic_extracted_graph"][0]
76
+ assert isinstance(dic_extracted_graph, dict)
77
+ assert dic_extracted_graph["name"] == "subkg_12345"
78
+ assert dic_extracted_graph["graph_source"] == "BioBridge"
79
+ assert dic_extracted_graph["topk_nodes"] == 3
80
+ assert dic_extracted_graph["topk_edges"] == 3
81
+ assert isinstance(dic_extracted_graph["graph_dict"], dict)
82
+ assert len(dic_extracted_graph["graph_dict"]["nodes"]) > 0
83
+ assert len(dic_extracted_graph["graph_dict"]["edges"]) > 0
84
+ assert isinstance(dic_extracted_graph["graph_text"], str)
85
+ # Check if the nodes are in the graph_text
86
+ assert all(
87
+ n[0] in dic_extracted_graph["graph_text"].replace('"', "")
88
+ for n in dic_extracted_graph["graph_dict"]["nodes"]
89
+ )
90
+ # Check if the edges are in the graph_text
91
+ assert all(
92
+ ",".join([e[0], str(tuple(e[2]["relation"])), e[1]])
93
+ in dic_extracted_graph["graph_text"].replace('"', "")
94
+ for e in dic_extracted_graph["graph_dict"]["edges"]
95
+ )
96
+
97
+
98
+ def test_extract_multimodal_subgraph_w_doc(agent_state):
99
+ """
100
+ Test the multimodal subgraph extraction tool for text as modality, plus genes.
101
+
102
+ Args:
103
+ agent_state: Agent state in the form of a dictionary.
104
+ """
105
+ # Update state
106
+ agent_state["uploaded_files"] = [
107
+ {
108
+ "file_name": "multimodal-analysis.xlsx",
109
+ "file_path": f"{DATA_PATH}/multimodal-analysis.xlsx",
110
+ "file_type": "multimodal",
111
+ "uploaded_by": "VPEUser",
112
+ "uploaded_timestamp": "2025-05-12 00:00:00",
113
+ }
114
+ ]
115
+
116
+ prompt = """
117
+ Extract all relevant information related to nodes of genes related to inflammatory bowel disease
118
+ (IBD) that existed in the knowledge graph.
119
+ Please set the extraction name for this process as `subkg_12345`.
120
+ """
121
+
122
+ # Instantiate the SubgraphExtractionTool
123
+ subgraph_extraction_tool = MultimodalSubgraphExtractionTool()
124
+
125
+ # Invoking the subgraph_extraction_tool
126
+ response = subgraph_extraction_tool.invoke(
127
+ input={
128
+ "prompt": prompt,
129
+ "tool_call_id": "subgraph_extraction_tool",
130
+ "state": agent_state,
131
+ "arg_data": {"extraction_name": "subkg_12345"},
132
+ }
133
+ )
134
+
135
+ # Check tool message
136
+ assert response.update["messages"][-1].tool_call_id == "subgraph_extraction_tool"
137
+
138
+ # Check extracted subgraph dictionary
139
+ dic_extracted_graph = response.update["dic_extracted_graph"][0]
140
+ assert isinstance(dic_extracted_graph, dict)
141
+ assert dic_extracted_graph["name"] == "subkg_12345"
142
+ assert dic_extracted_graph["graph_source"] == "BioBridge"
143
+ assert dic_extracted_graph["topk_nodes"] == 3
144
+ assert dic_extracted_graph["topk_edges"] == 3
145
+ assert isinstance(dic_extracted_graph["graph_dict"], dict)
146
+ assert len(dic_extracted_graph["graph_dict"]["nodes"]) > 0
147
+ assert len(dic_extracted_graph["graph_dict"]["edges"]) > 0
148
+ assert isinstance(dic_extracted_graph["graph_text"], str)
149
+ # Check if the nodes are in the graph_text
150
+ assert all(
151
+ n[0] in dic_extracted_graph["graph_text"].replace('"', "")
152
+ for n in dic_extracted_graph["graph_dict"]["nodes"]
153
+ )
154
+ # Check if the edges are in the graph_text
155
+ assert all(
156
+ ",".join([e[0], str(tuple(e[2]["relation"])), e[1]])
157
+ in dic_extracted_graph["graph_text"].replace('"', "")
158
+ for e in dic_extracted_graph["graph_dict"]["edges"]
159
+ )
@@ -0,0 +1,152 @@
1
+ """
2
+ Test cases for tools/subgraph_extraction.py
3
+ """
4
+
5
+ import pytest
6
+ from langchain_openai import ChatOpenAI, OpenAIEmbeddings
7
+
8
+ from ..tools.subgraph_extraction import SubgraphExtractionTool
9
+
10
+ # Define the data path
11
+ DATA_PATH = "aiagents4pharma/talk2knowledgegraphs/tests/files"
12
+
13
+
14
+ @pytest.fixture(name="agent_state")
15
+ def agent_state_fixture():
16
+ """
17
+ Agent state fixture.
18
+ """
19
+ agent_state = {
20
+ "llm_model": ChatOpenAI(model="gpt-4o-mini", temperature=0.0),
21
+ "embedding_model": OpenAIEmbeddings(model="text-embedding-3-small"),
22
+ "uploaded_files": [],
23
+ "topk_nodes": 3,
24
+ "topk_edges": 3,
25
+ "dic_source_graph": [
26
+ {
27
+ "name": "PrimeKG",
28
+ "kg_pyg_path": f"{DATA_PATH}/primekg_ibd_pyg_graph.pkl",
29
+ "kg_text_path": f"{DATA_PATH}/primekg_ibd_text_graph.pkl",
30
+ }
31
+ ],
32
+ }
33
+
34
+ return agent_state
35
+
36
+
37
+ def test_extract_subgraph_wo_docs(agent_state):
38
+ """
39
+ Test the subgraph extraction tool without any documents using OpenAI model.
40
+
41
+ Args:
42
+ agent_state: Agent state in the form of a dictionary.
43
+ """
44
+ prompt = """
45
+ Extract all relevant information related to nodes of genes related to inflammatory bowel disease
46
+ (IBD) that existed in the knowledge graph.
47
+ Please set the extraction name for this process as `subkg_12345`.
48
+ """
49
+
50
+ # Instantiate the SubgraphExtractionTool
51
+ subgraph_extraction_tool = SubgraphExtractionTool()
52
+
53
+ # Invoking the subgraph_extraction_tool
54
+ response = subgraph_extraction_tool.invoke(
55
+ input={
56
+ "prompt": prompt,
57
+ "tool_call_id": "subgraph_extraction_tool",
58
+ "state": agent_state,
59
+ "arg_data": {"extraction_name": "subkg_12345"},
60
+ }
61
+ )
62
+
63
+ # Check tool message
64
+ assert response.update["messages"][-1].tool_call_id == "subgraph_extraction_tool"
65
+
66
+ # Check extracted subgraph dictionary
67
+ dic_extracted_graph = response.update["dic_extracted_graph"][0]
68
+ assert isinstance(dic_extracted_graph, dict)
69
+ assert dic_extracted_graph["name"] == "subkg_12345"
70
+ assert dic_extracted_graph["graph_source"] == "PrimeKG"
71
+ assert dic_extracted_graph["topk_nodes"] == 3
72
+ assert dic_extracted_graph["topk_edges"] == 3
73
+ assert isinstance(dic_extracted_graph["graph_dict"], dict)
74
+ assert len(dic_extracted_graph["graph_dict"]["nodes"]) > 0
75
+ assert len(dic_extracted_graph["graph_dict"]["edges"]) > 0
76
+ assert isinstance(dic_extracted_graph["graph_text"], str)
77
+ # Check if the nodes are in the graph_text
78
+ assert all(
79
+ n[0] in dic_extracted_graph["graph_text"]
80
+ for n in dic_extracted_graph["graph_dict"]["nodes"]
81
+ )
82
+ # Check if the edges are in the graph_text
83
+ assert all(
84
+ ",".join([e[0], '"' + str(tuple(e[2]["relation"])) + '"', e[1]])
85
+ in dic_extracted_graph["graph_text"]
86
+ for e in dic_extracted_graph["graph_dict"]["edges"]
87
+ )
88
+
89
+
90
+ def test_extract_subgraph_w_docs(agent_state):
91
+ """
92
+ As a knowledge graph agent, I would like you to call a tool called `subgraph_extraction`.
93
+ After calling the tool, restrain yourself to call any other tool.
94
+
95
+ Args:
96
+ agent_state: Agent state in the form of a dictionary.
97
+ """
98
+ # Update state
99
+ agent_state["uploaded_files"] = [
100
+ {
101
+ "file_name": "DGE_human_Colon_UC-vs-Colon_Control.pdf",
102
+ "file_path": f"{DATA_PATH}/DGE_human_Colon_UC-vs-Colon_Control.pdf",
103
+ "file_type": "endotype",
104
+ "uploaded_by": "VPEUser",
105
+ "uploaded_timestamp": "2024-11-05 00:00:00",
106
+ }
107
+ ]
108
+
109
+ prompt = """
110
+ Extract all relevant information related to nodes of genes related to inflammatory bowel disease
111
+ (IBD) that existed in the knowledge graph.
112
+ Please set the extraction name for this process as `subkg_12345`.
113
+ """
114
+
115
+ # Instantiate the SubgraphExtractionTool
116
+ subgraph_extraction_tool = SubgraphExtractionTool()
117
+
118
+ # Invoking the subgraph_extraction_tool
119
+ response = subgraph_extraction_tool.invoke(
120
+ input={
121
+ "prompt": prompt,
122
+ "tool_call_id": "subgraph_extraction_tool",
123
+ "state": agent_state,
124
+ "arg_data": {"extraction_name": "subkg_12345"},
125
+ }
126
+ )
127
+
128
+ # Check tool message
129
+ assert response.update["messages"][-1].tool_call_id == "subgraph_extraction_tool"
130
+
131
+ # Check extracted subgraph dictionary
132
+ dic_extracted_graph = response.update["dic_extracted_graph"][0]
133
+ assert isinstance(dic_extracted_graph, dict)
134
+ assert dic_extracted_graph["name"] == "subkg_12345"
135
+ assert dic_extracted_graph["graph_source"] == "PrimeKG"
136
+ assert dic_extracted_graph["topk_nodes"] == 3
137
+ assert dic_extracted_graph["topk_edges"] == 3
138
+ assert isinstance(dic_extracted_graph["graph_dict"], dict)
139
+ assert len(dic_extracted_graph["graph_dict"]["nodes"]) > 0
140
+ assert len(dic_extracted_graph["graph_dict"]["edges"]) > 0
141
+ assert isinstance(dic_extracted_graph["graph_text"], str)
142
+ # Check if the nodes are in the graph_text
143
+ assert all(
144
+ n[0] in dic_extracted_graph["graph_text"]
145
+ for n in dic_extracted_graph["graph_dict"]["nodes"]
146
+ )
147
+ # Check if the edges are in the graph_text
148
+ assert all(
149
+ ",".join([e[0], '"' + str(tuple(e[2]["relation"])) + '"', e[1]])
150
+ in dic_extracted_graph["graph_text"]
151
+ for e in dic_extracted_graph["graph_dict"]["edges"]
152
+ )
@@ -0,0 +1,201 @@
1
+ """
2
+ Test cases for tools/subgraph_summarization.py
3
+ """
4
+
5
+ import pytest
6
+ from langchain_core.messages import HumanMessage
7
+ from langchain_openai import ChatOpenAI, OpenAIEmbeddings
8
+
9
+ from ..agents.t2kg_agent import get_app
10
+
11
+ # Define the data path
12
+ DATA_PATH = "aiagents4pharma/talk2knowledgegraphs/tests/files"
13
+
14
+
15
+ @pytest.fixture(name="input_dict")
16
+ def input_dict_fixture():
17
+ """
18
+ Input dictionary fixture.
19
+ """
20
+ input_dict = {
21
+ "llm_model": None, # TBA for each test case
22
+ "embedding_model": None, # TBA for each test case
23
+ "uploaded_files": [],
24
+ "topk_nodes": 3,
25
+ "topk_edges": 3,
26
+ "dic_source_graph": [
27
+ {
28
+ "name": "PrimeKG",
29
+ "kg_pyg_path": f"{DATA_PATH}/primekg_ibd_pyg_graph.pkl",
30
+ "kg_text_path": f"{DATA_PATH}/primekg_ibd_text_graph.pkl",
31
+ }
32
+ ],
33
+ "dic_extracted_graph": [
34
+ {
35
+ "name": "subkg_12345",
36
+ "tool_call_id": "tool_12345",
37
+ "graph_source": "PrimeKG",
38
+ "topk_nodes": 3,
39
+ "topk_edges": 3,
40
+ "graph_dict": {
41
+ "nodes": [
42
+ ("IFNG_(3495)", {}),
43
+ ("IKBKG_(3672)", {}),
44
+ ("ATG16L1_(6661)", {}),
45
+ ("inflammatory bowel disease_(28158)", {}),
46
+ ("Crohn ileitis and jejunitis_(35814)", {}),
47
+ ("Crohn's colitis_(83770)", {}),
48
+ ],
49
+ "edges": [
50
+ (
51
+ "IFNG_(3495)",
52
+ "inflammatory bowel disease_(28158)",
53
+ {
54
+ "relation": [
55
+ "gene/protein",
56
+ "associated with",
57
+ "disease",
58
+ ],
59
+ "label": ["gene/protein", "associated with", "disease"],
60
+ },
61
+ ),
62
+ (
63
+ "IFNG_(3495)",
64
+ "Crohn's colitis_(83770)",
65
+ {
66
+ "relation": [
67
+ "gene/protein",
68
+ "associated with",
69
+ "disease",
70
+ ],
71
+ "label": ["gene/protein", "associated with", "disease"],
72
+ },
73
+ ),
74
+ (
75
+ "IFNG_(3495)",
76
+ "Crohn ileitis and jejunitis_(35814)",
77
+ {
78
+ "relation": [
79
+ "gene/protein",
80
+ "associated with",
81
+ "disease",
82
+ ],
83
+ "label": ["gene/protein", "associated with", "disease"],
84
+ },
85
+ ),
86
+ (
87
+ "ATG16L1_(6661)",
88
+ "IKBKG_(3672)",
89
+ {
90
+ "relation": ["gene/protein", "ppi", "gene/protein"],
91
+ "label": ["gene/protein", "ppi", "gene/protein"],
92
+ },
93
+ ),
94
+ (
95
+ "Crohn's colitis_(83770)",
96
+ "ATG16L1_(6661)",
97
+ {
98
+ "relation": [
99
+ "disease",
100
+ "associated with",
101
+ "gene/protein",
102
+ ],
103
+ "label": ["disease", "associated with", "gene/protein"],
104
+ },
105
+ ),
106
+ ],
107
+ },
108
+ "graph_text": """
109
+ node_id,node_attr
110
+ IFNG_(3495),"IFNG belongs to gene/protein category.
111
+ This gene encodes a soluble cytokine that is a member of the type II interferon class.
112
+ The encoded protein is secreted by cells of both the innate and adaptive immune systems.
113
+ The active protein is a homodimer that binds to the interferon gamma receptor
114
+ which triggers a cellular response to viral and microbial infections.
115
+ Mutations in this gene are associated with an increased susceptibility to viral,
116
+ bacterial and parasitic infections and to several autoimmune diseases.
117
+ [provided by RefSeq, Dec 2015]."
118
+ IKBKG_(3672),"IKBKG belongs to gene/protein category. This gene encodes the regulatory
119
+ subunit of the inhibitor of kappaB kinase (IKK) complex, which activates NF-kappaB
120
+ resulting in activation of genes involved in inflammation, immunity, cell survival,
121
+ and other pathways. Mutations in this gene result in incontinentia pigmenti,
122
+ hypohidrotic ectodermal dysplasia, and several other types of immunodeficiencies.
123
+ A pseudogene highly similar to this locus is located in an adjacent region of the
124
+ X chromosome. [provided by RefSeq, Mar 2016]."
125
+ ATG16L1_(6661),"ATG16L1 belongs to gene/protein category. The protein encoded
126
+ by this gene is part of a large protein complex that is necessary for autophagy,
127
+ the major process by which intracellular components are targeted to lysosomes
128
+ for degradation. Defects in this gene are a cause of susceptibility to inflammatory
129
+ bowel disease type 10 (IBD10). Several transcript variants encoding different
130
+ isoforms have been found for this gene.[provided by RefSeq, Jun 2010]."
131
+ inflammatory bowel disease_(28158),inflammatory bowel disease belongs to disease
132
+ category. Any inflammatory bowel disease in which the cause of the disease
133
+ is a mutation in the NOD2 gene.
134
+ Crohn ileitis and jejunitis_(35814),Crohn ileitis and jejunitis belongs to
135
+ disease category. An Crohn disease involving a pathogenic inflammatory
136
+ response in the ileum.
137
+ Crohn's colitis_(83770),Crohn's colitis belongs to disease category.
138
+ Crohn's disease affecting the colon.
139
+
140
+ head_id,edge_type,tail_id
141
+ Crohn's colitis_(83770),"('disease', 'associated with', 'gene/protein')",
142
+ ATG16L1_(6661)
143
+ ATG16L1_(6661),"('gene/protein', 'ppi', 'gene/protein')",IKBKG_(3672)
144
+ IFNG_(3495),"('gene/protein', 'associated with', 'disease')",
145
+ inflammatory bowel disease_(28158)
146
+ IFNG_(3495),"('gene/protein', 'associated with', 'disease')",Crohn's colitis_(83770)
147
+ IFNG_(3495),"('gene/protein', 'associated with', 'disease')",
148
+ Crohn ileitis and jejunitis_(35814)
149
+ """,
150
+ "graph_summary": None,
151
+ }
152
+ ],
153
+ }
154
+
155
+ return input_dict
156
+
157
+
158
+ def test_summarize_subgraph(input_dict):
159
+ """
160
+ Test the subgraph summarization tool without any documents using Ollama model.
161
+
162
+ Args:
163
+ input_dict: Input dictionary fixture.
164
+ """
165
+ # Prepare LLM and embedding model
166
+ input_dict["llm_model"] = ChatOpenAI(model="gpt-4o-mini", temperature=0.0)
167
+ input_dict["embedding_model"] = OpenAIEmbeddings(model="text-embedding-3-small")
168
+
169
+ # Setup the app
170
+ unique_id = 12345
171
+ app = get_app(unique_id, llm_model=input_dict["llm_model"])
172
+ config = {"configurable": {"thread_id": unique_id}}
173
+ # Update state
174
+ app.update_state(
175
+ config,
176
+ input_dict,
177
+ )
178
+ prompt = """
179
+ Please directly invoke `subgraph_summarization` tool without calling any other tools
180
+ to respond to the following prompt:
181
+
182
+ You are given a subgraph in the forms of textualized subgraph representing
183
+ nodes and edges (triples) obtained from extraction_name `subkg_12345`.
184
+ Summarize the given subgraph and higlight the importance nodes and edges.
185
+ """
186
+
187
+ # Test the tool subgraph_summarization
188
+ response = app.invoke({"messages": [HumanMessage(content=prompt)]}, config=config)
189
+
190
+ # Check assistant message
191
+ assistant_msg = response["messages"][-1].content
192
+ assert isinstance(assistant_msg, str)
193
+
194
+ # Check tool message
195
+ tool_msg = response["messages"][-2]
196
+ assert tool_msg.name == "subgraph_summarization"
197
+
198
+ # Check summarized subgraph
199
+ current_state = app.get_state(config)
200
+ dic_extracted_graph = current_state.values["dic_extracted_graph"][0]
201
+ assert isinstance(dic_extracted_graph["graph_summary"], str)