aiagents4pharma 1.43.0__py3-none-any.whl → 1.45.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 (290) hide show
  1. aiagents4pharma/__init__.py +2 -2
  2. aiagents4pharma/talk2aiagents4pharma/.dockerignore +13 -0
  3. aiagents4pharma/talk2aiagents4pharma/Dockerfile +105 -0
  4. aiagents4pharma/talk2aiagents4pharma/README.md +1 -0
  5. aiagents4pharma/talk2aiagents4pharma/__init__.py +4 -5
  6. aiagents4pharma/talk2aiagents4pharma/agents/__init__.py +3 -2
  7. aiagents4pharma/talk2aiagents4pharma/agents/main_agent.py +24 -23
  8. aiagents4pharma/talk2aiagents4pharma/configs/__init__.py +2 -2
  9. aiagents4pharma/talk2aiagents4pharma/configs/agents/__init__.py +2 -2
  10. aiagents4pharma/talk2aiagents4pharma/configs/agents/main_agent/default.yaml +2 -2
  11. aiagents4pharma/talk2aiagents4pharma/configs/config.yaml +1 -1
  12. aiagents4pharma/talk2aiagents4pharma/docker-compose/cpu/.env.example +23 -0
  13. aiagents4pharma/talk2aiagents4pharma/docker-compose/cpu/docker-compose.yml +93 -0
  14. aiagents4pharma/talk2aiagents4pharma/docker-compose/gpu/.env.example +23 -0
  15. aiagents4pharma/talk2aiagents4pharma/docker-compose/gpu/docker-compose.yml +108 -0
  16. aiagents4pharma/talk2aiagents4pharma/install.md +127 -0
  17. aiagents4pharma/talk2aiagents4pharma/states/__init__.py +3 -2
  18. aiagents4pharma/talk2aiagents4pharma/states/state_talk2aiagents4pharma.py +5 -3
  19. aiagents4pharma/talk2aiagents4pharma/tests/__init__.py +2 -2
  20. aiagents4pharma/talk2aiagents4pharma/tests/test_main_agent.py +72 -50
  21. aiagents4pharma/talk2biomodels/.dockerignore +13 -0
  22. aiagents4pharma/talk2biomodels/Dockerfile +104 -0
  23. aiagents4pharma/talk2biomodels/README.md +1 -0
  24. aiagents4pharma/talk2biomodels/__init__.py +4 -8
  25. aiagents4pharma/talk2biomodels/agents/__init__.py +3 -2
  26. aiagents4pharma/talk2biomodels/agents/t2b_agent.py +47 -42
  27. aiagents4pharma/talk2biomodels/api/__init__.py +4 -5
  28. aiagents4pharma/talk2biomodels/api/kegg.py +14 -10
  29. aiagents4pharma/talk2biomodels/api/ols.py +13 -10
  30. aiagents4pharma/talk2biomodels/api/uniprot.py +7 -6
  31. aiagents4pharma/talk2biomodels/configs/__init__.py +3 -4
  32. aiagents4pharma/talk2biomodels/configs/agents/__init__.py +2 -2
  33. aiagents4pharma/talk2biomodels/configs/agents/t2b_agent/__init__.py +2 -2
  34. aiagents4pharma/talk2biomodels/configs/agents/t2b_agent/default.yaml +1 -1
  35. aiagents4pharma/talk2biomodels/configs/config.yaml +1 -1
  36. aiagents4pharma/talk2biomodels/configs/tools/__init__.py +4 -5
  37. aiagents4pharma/talk2biomodels/configs/tools/ask_question/__init__.py +2 -2
  38. aiagents4pharma/talk2biomodels/configs/tools/ask_question/default.yaml +1 -2
  39. aiagents4pharma/talk2biomodels/configs/tools/custom_plotter/__init__.py +2 -2
  40. aiagents4pharma/talk2biomodels/configs/tools/custom_plotter/default.yaml +1 -1
  41. aiagents4pharma/talk2biomodels/configs/tools/get_annotation/__init__.py +2 -2
  42. aiagents4pharma/talk2biomodels/configs/tools/get_annotation/default.yaml +1 -1
  43. aiagents4pharma/talk2biomodels/install.md +63 -0
  44. aiagents4pharma/talk2biomodels/models/__init__.py +4 -4
  45. aiagents4pharma/talk2biomodels/models/basico_model.py +36 -28
  46. aiagents4pharma/talk2biomodels/models/sys_bio_model.py +13 -10
  47. aiagents4pharma/talk2biomodels/states/__init__.py +3 -2
  48. aiagents4pharma/talk2biomodels/states/state_talk2biomodels.py +12 -8
  49. aiagents4pharma/talk2biomodels/tests/BIOMD0000000449_url.xml +1585 -0
  50. aiagents4pharma/talk2biomodels/tests/__init__.py +2 -2
  51. aiagents4pharma/talk2biomodels/tests/article_on_model_537.pdf +0 -0
  52. aiagents4pharma/talk2biomodels/tests/test_api.py +18 -14
  53. aiagents4pharma/talk2biomodels/tests/test_ask_question.py +8 -9
  54. aiagents4pharma/talk2biomodels/tests/test_basico_model.py +15 -9
  55. aiagents4pharma/talk2biomodels/tests/test_get_annotation.py +54 -55
  56. aiagents4pharma/talk2biomodels/tests/test_getmodelinfo.py +28 -27
  57. aiagents4pharma/talk2biomodels/tests/test_integration.py +21 -33
  58. aiagents4pharma/talk2biomodels/tests/test_load_biomodel.py +14 -11
  59. aiagents4pharma/talk2biomodels/tests/test_param_scan.py +21 -20
  60. aiagents4pharma/talk2biomodels/tests/test_query_article.py +129 -29
  61. aiagents4pharma/talk2biomodels/tests/test_search_models.py +9 -13
  62. aiagents4pharma/talk2biomodels/tests/test_simulate_model.py +16 -15
  63. aiagents4pharma/talk2biomodels/tests/test_steady_state.py +12 -22
  64. aiagents4pharma/talk2biomodels/tests/test_sys_bio_model.py +33 -29
  65. aiagents4pharma/talk2biomodels/tools/__init__.py +15 -12
  66. aiagents4pharma/talk2biomodels/tools/ask_question.py +42 -32
  67. aiagents4pharma/talk2biomodels/tools/custom_plotter.py +51 -43
  68. aiagents4pharma/talk2biomodels/tools/get_annotation.py +99 -75
  69. aiagents4pharma/talk2biomodels/tools/get_modelinfo.py +57 -51
  70. aiagents4pharma/talk2biomodels/tools/load_arguments.py +52 -32
  71. aiagents4pharma/talk2biomodels/tools/load_biomodel.py +8 -2
  72. aiagents4pharma/talk2biomodels/tools/parameter_scan.py +107 -90
  73. aiagents4pharma/talk2biomodels/tools/query_article.py +14 -13
  74. aiagents4pharma/talk2biomodels/tools/search_models.py +37 -26
  75. aiagents4pharma/talk2biomodels/tools/simulate_model.py +47 -37
  76. aiagents4pharma/talk2biomodels/tools/steady_state.py +76 -58
  77. aiagents4pharma/talk2biomodels/tools/utils.py +4 -3
  78. aiagents4pharma/talk2cells/README.md +1 -0
  79. aiagents4pharma/talk2cells/__init__.py +4 -5
  80. aiagents4pharma/talk2cells/agents/__init__.py +3 -2
  81. aiagents4pharma/talk2cells/agents/scp_agent.py +21 -19
  82. aiagents4pharma/talk2cells/states/__init__.py +3 -2
  83. aiagents4pharma/talk2cells/states/state_talk2cells.py +4 -2
  84. aiagents4pharma/talk2cells/tests/scp_agent/test_scp_agent.py +8 -9
  85. aiagents4pharma/talk2cells/tools/__init__.py +3 -2
  86. aiagents4pharma/talk2cells/tools/scp_agent/__init__.py +4 -4
  87. aiagents4pharma/talk2cells/tools/scp_agent/display_studies.py +5 -3
  88. aiagents4pharma/talk2cells/tools/scp_agent/search_studies.py +21 -22
  89. aiagents4pharma/talk2knowledgegraphs/.dockerignore +13 -0
  90. aiagents4pharma/talk2knowledgegraphs/Dockerfile +103 -0
  91. aiagents4pharma/talk2knowledgegraphs/README.md +1 -0
  92. aiagents4pharma/talk2knowledgegraphs/__init__.py +4 -7
  93. aiagents4pharma/talk2knowledgegraphs/agents/__init__.py +3 -2
  94. aiagents4pharma/talk2knowledgegraphs/agents/t2kg_agent.py +40 -30
  95. aiagents4pharma/talk2knowledgegraphs/configs/__init__.py +3 -6
  96. aiagents4pharma/talk2knowledgegraphs/configs/agents/t2kg_agent/__init__.py +2 -2
  97. aiagents4pharma/talk2knowledgegraphs/configs/agents/t2kg_agent/default.yaml +8 -8
  98. aiagents4pharma/talk2knowledgegraphs/configs/app/__init__.py +3 -2
  99. aiagents4pharma/talk2knowledgegraphs/configs/app/frontend/__init__.py +2 -2
  100. aiagents4pharma/talk2knowledgegraphs/configs/app/frontend/default.yaml +1 -1
  101. aiagents4pharma/talk2knowledgegraphs/configs/config.yaml +1 -1
  102. aiagents4pharma/talk2knowledgegraphs/configs/tools/__init__.py +4 -5
  103. aiagents4pharma/talk2knowledgegraphs/configs/tools/graphrag_reasoning/__init__.py +2 -2
  104. aiagents4pharma/talk2knowledgegraphs/configs/tools/graphrag_reasoning/default.yaml +1 -1
  105. aiagents4pharma/talk2knowledgegraphs/configs/tools/multimodal_subgraph_extraction/default.yaml +17 -2
  106. aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_extraction/__init__.py +2 -2
  107. aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_extraction/default.yaml +1 -1
  108. aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_summarization/__init__.py +2 -2
  109. aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_summarization/default.yaml +1 -1
  110. aiagents4pharma/talk2knowledgegraphs/configs/utils/enrichments/ols_terms/default.yaml +1 -1
  111. aiagents4pharma/talk2knowledgegraphs/configs/utils/enrichments/reactome_pathways/default.yaml +1 -1
  112. aiagents4pharma/talk2knowledgegraphs/configs/utils/enrichments/uniprot_proteins/default.yaml +1 -1
  113. aiagents4pharma/talk2knowledgegraphs/configs/utils/pubchem_utils/default.yaml +1 -1
  114. aiagents4pharma/talk2knowledgegraphs/datasets/__init__.py +4 -6
  115. aiagents4pharma/talk2knowledgegraphs/datasets/biobridge_primekg.py +115 -67
  116. aiagents4pharma/talk2knowledgegraphs/datasets/dataset.py +2 -0
  117. aiagents4pharma/talk2knowledgegraphs/datasets/primekg.py +35 -24
  118. aiagents4pharma/talk2knowledgegraphs/datasets/starkqa_primekg.py +29 -21
  119. aiagents4pharma/talk2knowledgegraphs/docker-compose/cpu/.env.example +23 -0
  120. aiagents4pharma/talk2knowledgegraphs/docker-compose/cpu/docker-compose.yml +93 -0
  121. aiagents4pharma/talk2knowledgegraphs/docker-compose/gpu/.env.example +23 -0
  122. aiagents4pharma/talk2knowledgegraphs/docker-compose/gpu/docker-compose.yml +108 -0
  123. aiagents4pharma/talk2knowledgegraphs/entrypoint.sh +190 -0
  124. aiagents4pharma/talk2knowledgegraphs/install.md +140 -0
  125. aiagents4pharma/talk2knowledgegraphs/milvus_data_dump.py +31 -65
  126. aiagents4pharma/talk2knowledgegraphs/states/__init__.py +3 -2
  127. aiagents4pharma/talk2knowledgegraphs/states/state_talk2knowledgegraphs.py +1 -0
  128. aiagents4pharma/talk2knowledgegraphs/tests/test_agents_t2kg_agent.py +65 -40
  129. aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_biobridge_primekg.py +54 -48
  130. aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_dataset.py +4 -0
  131. aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_primekg.py +17 -4
  132. aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_starkqa_primekg.py +33 -24
  133. aiagents4pharma/talk2knowledgegraphs/tests/test_tools_graphrag_reasoning.py +116 -69
  134. aiagents4pharma/talk2knowledgegraphs/tests/test_tools_milvus_multimodal_subgraph_extraction.py +736 -413
  135. aiagents4pharma/talk2knowledgegraphs/tests/test_tools_multimodal_subgraph_extraction.py +22 -15
  136. aiagents4pharma/talk2knowledgegraphs/tests/test_tools_subgraph_extraction.py +19 -12
  137. aiagents4pharma/talk2knowledgegraphs/tests/test_tools_subgraph_summarization.py +95 -48
  138. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_embeddings.py +4 -0
  139. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_huggingface.py +5 -0
  140. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_nim_molmim.py +13 -18
  141. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_ollama.py +10 -3
  142. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_enrichments.py +4 -3
  143. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_ollama.py +3 -2
  144. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_ols.py +1 -0
  145. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_pubchem.py +9 -4
  146. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_reactome.py +6 -6
  147. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_uniprot.py +4 -0
  148. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_extractions_milvus_multimodal_pcst.py +442 -42
  149. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_kg_utils.py +3 -4
  150. aiagents4pharma/talk2knowledgegraphs/tests/test_utils_pubchem_utils.py +10 -6
  151. aiagents4pharma/talk2knowledgegraphs/tools/__init__.py +10 -7
  152. aiagents4pharma/talk2knowledgegraphs/tools/graphrag_reasoning.py +15 -20
  153. aiagents4pharma/talk2knowledgegraphs/tools/milvus_multimodal_subgraph_extraction.py +245 -205
  154. aiagents4pharma/talk2knowledgegraphs/tools/multimodal_subgraph_extraction.py +92 -90
  155. aiagents4pharma/talk2knowledgegraphs/tools/subgraph_extraction.py +25 -37
  156. aiagents4pharma/talk2knowledgegraphs/tools/subgraph_summarization.py +10 -13
  157. aiagents4pharma/talk2knowledgegraphs/utils/__init__.py +4 -7
  158. aiagents4pharma/talk2knowledgegraphs/utils/embeddings/__init__.py +4 -7
  159. aiagents4pharma/talk2knowledgegraphs/utils/embeddings/embeddings.py +4 -0
  160. aiagents4pharma/talk2knowledgegraphs/utils/embeddings/huggingface.py +11 -14
  161. aiagents4pharma/talk2knowledgegraphs/utils/embeddings/nim_molmim.py +7 -7
  162. aiagents4pharma/talk2knowledgegraphs/utils/embeddings/ollama.py +12 -6
  163. aiagents4pharma/talk2knowledgegraphs/utils/embeddings/sentence_transformer.py +8 -6
  164. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/__init__.py +9 -6
  165. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/enrichments.py +1 -0
  166. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/ollama.py +15 -9
  167. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/ols_terms.py +23 -20
  168. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/pubchem_strings.py +12 -10
  169. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/reactome_pathways.py +16 -10
  170. aiagents4pharma/talk2knowledgegraphs/utils/enrichments/uniprot_proteins.py +26 -18
  171. aiagents4pharma/talk2knowledgegraphs/utils/extractions/__init__.py +4 -5
  172. aiagents4pharma/talk2knowledgegraphs/utils/extractions/milvus_multimodal_pcst.py +218 -81
  173. aiagents4pharma/talk2knowledgegraphs/utils/extractions/multimodal_pcst.py +53 -47
  174. aiagents4pharma/talk2knowledgegraphs/utils/extractions/pcst.py +18 -14
  175. aiagents4pharma/talk2knowledgegraphs/utils/kg_utils.py +22 -23
  176. aiagents4pharma/talk2knowledgegraphs/utils/pubchem_utils.py +11 -10
  177. aiagents4pharma/talk2scholars/.dockerignore +13 -0
  178. aiagents4pharma/talk2scholars/Dockerfile +104 -0
  179. aiagents4pharma/talk2scholars/README.md +1 -0
  180. aiagents4pharma/talk2scholars/agents/__init__.py +1 -5
  181. aiagents4pharma/talk2scholars/agents/main_agent.py +6 -4
  182. aiagents4pharma/talk2scholars/agents/paper_download_agent.py +5 -4
  183. aiagents4pharma/talk2scholars/agents/pdf_agent.py +4 -2
  184. aiagents4pharma/talk2scholars/agents/s2_agent.py +2 -2
  185. aiagents4pharma/talk2scholars/agents/zotero_agent.py +10 -11
  186. aiagents4pharma/talk2scholars/configs/__init__.py +1 -3
  187. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/__init__.py +1 -4
  188. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/default.yaml +1 -1
  189. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/pdf_agent/default.yaml +1 -1
  190. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/s2_agent/default.yaml +8 -8
  191. aiagents4pharma/talk2scholars/configs/agents/talk2scholars/zotero_agent/default.yaml +7 -7
  192. aiagents4pharma/talk2scholars/configs/tools/__init__.py +8 -6
  193. aiagents4pharma/talk2scholars/docker-compose/cpu/.env.example +21 -0
  194. aiagents4pharma/talk2scholars/docker-compose/cpu/docker-compose.yml +90 -0
  195. aiagents4pharma/talk2scholars/docker-compose/gpu/.env.example +21 -0
  196. aiagents4pharma/talk2scholars/docker-compose/gpu/docker-compose.yml +105 -0
  197. aiagents4pharma/talk2scholars/install.md +122 -0
  198. aiagents4pharma/talk2scholars/state/state_talk2scholars.py +8 -8
  199. aiagents4pharma/talk2scholars/tests/{test_main_agent.py → test_agents_main_agent.py} +41 -23
  200. aiagents4pharma/talk2scholars/tests/{test_paper_download_agent.py → test_agents_paper_agents_download_agent.py} +10 -16
  201. aiagents4pharma/talk2scholars/tests/{test_pdf_agent.py → test_agents_pdf_agent.py} +6 -10
  202. aiagents4pharma/talk2scholars/tests/{test_s2_agent.py → test_agents_s2_agent.py} +8 -16
  203. aiagents4pharma/talk2scholars/tests/{test_zotero_agent.py → test_agents_zotero_agent.py} +5 -7
  204. aiagents4pharma/talk2scholars/tests/{test_s2_display_dataframe.py → test_s2_tools_display_dataframe.py} +6 -7
  205. aiagents4pharma/talk2scholars/tests/{test_s2_query_dataframe.py → test_s2_tools_query_dataframe.py} +5 -15
  206. aiagents4pharma/talk2scholars/tests/{test_paper_downloader.py → test_tools_paper_downloader.py} +25 -63
  207. aiagents4pharma/talk2scholars/tests/{test_question_and_answer_tool.py → test_tools_question_and_answer_tool.py} +2 -6
  208. aiagents4pharma/talk2scholars/tests/{test_s2_multi.py → test_tools_s2_multi.py} +5 -5
  209. aiagents4pharma/talk2scholars/tests/{test_s2_retrieve.py → test_tools_s2_retrieve.py} +2 -1
  210. aiagents4pharma/talk2scholars/tests/{test_s2_search.py → test_tools_s2_search.py} +5 -5
  211. aiagents4pharma/talk2scholars/tests/{test_s2_single.py → test_tools_s2_single.py} +5 -5
  212. aiagents4pharma/talk2scholars/tests/{test_arxiv_downloader.py → test_utils_arxiv_downloader.py} +16 -25
  213. aiagents4pharma/talk2scholars/tests/{test_base_paper_downloader.py → test_utils_base_paper_downloader.py} +25 -47
  214. aiagents4pharma/talk2scholars/tests/{test_biorxiv_downloader.py → test_utils_biorxiv_downloader.py} +14 -42
  215. aiagents4pharma/talk2scholars/tests/{test_medrxiv_downloader.py → test_utils_medrxiv_downloader.py} +15 -49
  216. aiagents4pharma/talk2scholars/tests/{test_nvidia_nim_reranker.py → test_utils_nvidia_nim_reranker.py} +6 -16
  217. aiagents4pharma/talk2scholars/tests/{test_pdf_answer_formatter.py → test_utils_pdf_answer_formatter.py} +1 -0
  218. aiagents4pharma/talk2scholars/tests/{test_pdf_batch_processor.py → test_utils_pdf_batch_processor.py} +6 -15
  219. aiagents4pharma/talk2scholars/tests/{test_pdf_collection_manager.py → test_utils_pdf_collection_manager.py} +34 -11
  220. aiagents4pharma/talk2scholars/tests/{test_pdf_document_processor.py → test_utils_pdf_document_processor.py} +2 -3
  221. aiagents4pharma/talk2scholars/tests/{test_pdf_generate_answer.py → test_utils_pdf_generate_answer.py} +3 -6
  222. aiagents4pharma/talk2scholars/tests/{test_pdf_gpu_detection.py → test_utils_pdf_gpu_detection.py} +5 -16
  223. aiagents4pharma/talk2scholars/tests/{test_pdf_rag_pipeline.py → test_utils_pdf_rag_pipeline.py} +7 -17
  224. aiagents4pharma/talk2scholars/tests/{test_pdf_retrieve_chunks.py → test_utils_pdf_retrieve_chunks.py} +4 -11
  225. aiagents4pharma/talk2scholars/tests/{test_pdf_singleton_manager.py → test_utils_pdf_singleton_manager.py} +26 -23
  226. aiagents4pharma/talk2scholars/tests/{test_pdf_vector_normalization.py → test_utils_pdf_vector_normalization.py} +1 -1
  227. aiagents4pharma/talk2scholars/tests/{test_pdf_vector_store.py → test_utils_pdf_vector_store.py} +27 -55
  228. aiagents4pharma/talk2scholars/tests/{test_pubmed_downloader.py → test_utils_pubmed_downloader.py} +31 -91
  229. aiagents4pharma/talk2scholars/tests/{test_read_helper_utils.py → test_utils_read_helper_utils.py} +2 -6
  230. aiagents4pharma/talk2scholars/tests/{test_s2_utils_ext_ids.py → test_utils_s2_utils_ext_ids.py} +5 -15
  231. aiagents4pharma/talk2scholars/tests/{test_zotero_human_in_the_loop.py → test_utils_zotero_human_in_the_loop.py} +6 -13
  232. aiagents4pharma/talk2scholars/tests/{test_zotero_path.py → test_utils_zotero_path.py} +53 -45
  233. aiagents4pharma/talk2scholars/tests/{test_zotero_read.py → test_utils_zotero_read.py} +30 -91
  234. aiagents4pharma/talk2scholars/tests/{test_zotero_write.py → test_utils_zotero_write.py} +6 -16
  235. aiagents4pharma/talk2scholars/tools/__init__.py +1 -4
  236. aiagents4pharma/talk2scholars/tools/paper_download/paper_downloader.py +20 -35
  237. aiagents4pharma/talk2scholars/tools/paper_download/utils/__init__.py +7 -5
  238. aiagents4pharma/talk2scholars/tools/paper_download/utils/arxiv_downloader.py +9 -11
  239. aiagents4pharma/talk2scholars/tools/paper_download/utils/base_paper_downloader.py +14 -21
  240. aiagents4pharma/talk2scholars/tools/paper_download/utils/biorxiv_downloader.py +14 -22
  241. aiagents4pharma/talk2scholars/tools/paper_download/utils/medrxiv_downloader.py +11 -13
  242. aiagents4pharma/talk2scholars/tools/paper_download/utils/pubmed_downloader.py +14 -28
  243. aiagents4pharma/talk2scholars/tools/pdf/question_and_answer.py +4 -8
  244. aiagents4pharma/talk2scholars/tools/pdf/utils/__init__.py +16 -14
  245. aiagents4pharma/talk2scholars/tools/pdf/utils/answer_formatter.py +4 -4
  246. aiagents4pharma/talk2scholars/tools/pdf/utils/batch_processor.py +15 -17
  247. aiagents4pharma/talk2scholars/tools/pdf/utils/collection_manager.py +2 -2
  248. aiagents4pharma/talk2scholars/tools/pdf/utils/document_processor.py +5 -5
  249. aiagents4pharma/talk2scholars/tools/pdf/utils/generate_answer.py +4 -4
  250. aiagents4pharma/talk2scholars/tools/pdf/utils/get_vectorstore.py +2 -6
  251. aiagents4pharma/talk2scholars/tools/pdf/utils/gpu_detection.py +5 -9
  252. aiagents4pharma/talk2scholars/tools/pdf/utils/nvidia_nim_reranker.py +4 -4
  253. aiagents4pharma/talk2scholars/tools/pdf/utils/paper_loader.py +2 -2
  254. aiagents4pharma/talk2scholars/tools/pdf/utils/rag_pipeline.py +6 -15
  255. aiagents4pharma/talk2scholars/tools/pdf/utils/retrieve_chunks.py +7 -15
  256. aiagents4pharma/talk2scholars/tools/pdf/utils/singleton_manager.py +2 -2
  257. aiagents4pharma/talk2scholars/tools/pdf/utils/tool_helper.py +3 -4
  258. aiagents4pharma/talk2scholars/tools/pdf/utils/vector_normalization.py +8 -17
  259. aiagents4pharma/talk2scholars/tools/pdf/utils/vector_store.py +17 -33
  260. aiagents4pharma/talk2scholars/tools/s2/__init__.py +8 -6
  261. aiagents4pharma/talk2scholars/tools/s2/display_dataframe.py +3 -7
  262. aiagents4pharma/talk2scholars/tools/s2/multi_paper_rec.py +7 -6
  263. aiagents4pharma/talk2scholars/tools/s2/query_dataframe.py +5 -12
  264. aiagents4pharma/talk2scholars/tools/s2/retrieve_semantic_scholar_paper_id.py +2 -4
  265. aiagents4pharma/talk2scholars/tools/s2/search.py +6 -6
  266. aiagents4pharma/talk2scholars/tools/s2/single_paper_rec.py +5 -3
  267. aiagents4pharma/talk2scholars/tools/s2/utils/__init__.py +1 -3
  268. aiagents4pharma/talk2scholars/tools/s2/utils/multi_helper.py +12 -18
  269. aiagents4pharma/talk2scholars/tools/s2/utils/search_helper.py +11 -18
  270. aiagents4pharma/talk2scholars/tools/s2/utils/single_helper.py +11 -16
  271. aiagents4pharma/talk2scholars/tools/zotero/__init__.py +1 -4
  272. aiagents4pharma/talk2scholars/tools/zotero/utils/__init__.py +1 -4
  273. aiagents4pharma/talk2scholars/tools/zotero/utils/read_helper.py +21 -39
  274. aiagents4pharma/talk2scholars/tools/zotero/utils/review_helper.py +2 -6
  275. aiagents4pharma/talk2scholars/tools/zotero/utils/write_helper.py +8 -11
  276. aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_path.py +4 -12
  277. aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_pdf_downloader.py +13 -27
  278. aiagents4pharma/talk2scholars/tools/zotero/zotero_read.py +4 -7
  279. aiagents4pharma/talk2scholars/tools/zotero/zotero_review.py +8 -10
  280. aiagents4pharma/talk2scholars/tools/zotero/zotero_write.py +3 -2
  281. {aiagents4pharma-1.43.0.dist-info → aiagents4pharma-1.45.0.dist-info}/METADATA +115 -50
  282. aiagents4pharma-1.45.0.dist-info/RECORD +324 -0
  283. {aiagents4pharma-1.43.0.dist-info → aiagents4pharma-1.45.0.dist-info}/WHEEL +1 -2
  284. aiagents4pharma-1.43.0.dist-info/RECORD +0 -293
  285. aiagents4pharma-1.43.0.dist-info/top_level.txt +0 -1
  286. /aiagents4pharma/talk2scholars/tests/{test_state.py → test_states_state.py} +0 -0
  287. /aiagents4pharma/talk2scholars/tests/{test_pdf_paper_loader.py → test_utils_pdf_paper_loader.py} +0 -0
  288. /aiagents4pharma/talk2scholars/tests/{test_tool_helper_utils.py → test_utils_tool_helper_utils.py} +0 -0
  289. /aiagents4pharma/talk2scholars/tests/{test_zotero_pdf_downloader_utils.py → test_utils_zotero_pdf_downloader_utils.py} +0 -0
  290. {aiagents4pharma-1.43.0.dist-info → aiagents4pharma-1.45.0.dist-info}/licenses/LICENSE +0 -0
@@ -4,46 +4,51 @@
4
4
  Tool for searching models based on search query.
5
5
  """
6
6
 
7
- from typing import Type, Annotated
8
7
  import logging
9
- from pydantic import BaseModel, Field
8
+ from typing import Annotated
9
+
10
10
  import pandas as pd
11
11
  from basico import biomodels
12
- from langgraph.types import Command
13
- from langchain_core.tools import BaseTool
14
12
  from langchain_core.messages import ToolMessage
13
+ from langchain_core.tools import BaseTool
15
14
  from langchain_core.tools.base import InjectedToolCallId
15
+ from langgraph.types import Command
16
+ from pydantic import BaseModel, Field
16
17
 
17
18
  # Initialize logger
18
19
  logging.basicConfig(level=logging.INFO)
19
20
  logger = logging.getLogger(__name__)
20
21
 
22
+
21
23
  class SearchModelsInput(BaseModel):
22
24
  """
23
25
  Input schema for the search models tool.
24
26
  """
27
+
25
28
  query: str = Field(description="Search models query", default=None)
26
- num_query: int = Field(description="Top number of models to search",
27
- default=10,
28
- le=100)
29
+ num_query: int = Field(description="Top number of models to search", default=10, le=100)
29
30
  tool_call_id: Annotated[str, InjectedToolCallId]
30
31
 
32
+
31
33
  # Note: It's important that every field has type hints. BaseTool is a
32
34
  # Pydantic class and not having type hints can lead to unexpected behavior.
33
35
  class SearchModelsTool(BaseTool):
34
36
  """
35
37
  Tool for returning the search results based on the search query.
36
38
  """
39
+
37
40
  name: str = "search_models"
38
41
  description: str = "Search for only manually curated models in "
39
42
  "the BioMmodels database based on keywords."
40
- args_schema: Type[BaseModel] = SearchModelsInput
43
+ args_schema: type[BaseModel] = SearchModelsInput
41
44
  return_direct: bool = False
42
45
 
43
- def _run(self,
44
- tool_call_id: Annotated[str, InjectedToolCallId],
45
- query: str = None,
46
- num_query: int = 10) -> dict:
46
+ def _run(
47
+ self,
48
+ tool_call_id: Annotated[str, InjectedToolCallId],
49
+ query: str = None,
50
+ num_query: int = 10,
51
+ ) -> dict:
47
52
  """
48
53
  Run the tool.
49
54
 
@@ -55,8 +60,12 @@ class SearchModelsTool(BaseTool):
55
60
  Returns:
56
61
  dict: The answer to the question in the form of a dictionary.
57
62
  """
58
- logger.log(logging.INFO, "Searching models with the query and number %s, %s",
59
- query, num_query)
63
+ logger.log(
64
+ logging.INFO,
65
+ "Searching models with the query and number %s, %s",
66
+ query,
67
+ num_query,
68
+ )
60
69
  # Search for models based on the query
61
70
  search_results = biomodels.search_for_model(query, num_results=num_query)
62
71
  # Convert the search results to a pandas DataFrame
@@ -69,17 +78,19 @@ class SearchModelsTool(BaseTool):
69
78
  # to avoid hallucinations
70
79
  content += f" Here is the summary of the first {first_n} models:"
71
80
  for i in range(first_n):
72
- content += f"\nModel {i+1}: {search_results[i]['name']} (ID: {search_results[i]['id']})"
81
+ content += (
82
+ f"\nModel {i + 1}: {search_results[i]['name']} (ID: {search_results[i]['id']})"
83
+ )
73
84
  # Return the updated state of the tool
74
85
  return Command(
75
- update={
76
- # update the message history
77
- "messages": [
78
- ToolMessage(
79
- content=content,
80
- tool_call_id=tool_call_id,
81
- artifact={'dic_data': df.to_dict(orient='records')}
82
- )
83
- ],
84
- }
85
- )
86
+ update={
87
+ # update the message history
88
+ "messages": [
89
+ ToolMessage(
90
+ content=content,
91
+ tool_call_id=tool_call_id,
92
+ artifact={"dic_data": df.to_dict(orient="records")},
93
+ )
94
+ ],
95
+ }
96
+ )
@@ -5,49 +5,56 @@ Tool for simulating a model.
5
5
  """
6
6
 
7
7
  import logging
8
- from typing import Type, Annotated
9
- from pydantic import BaseModel, Field
10
- from langgraph.types import Command
11
- from langgraph.prebuilt import InjectedState
12
- from langchain_core.tools import BaseTool
8
+ from typing import Annotated
9
+
13
10
  from langchain_core.messages import ToolMessage
11
+ from langchain_core.tools import BaseTool
14
12
  from langchain_core.tools.base import InjectedToolCallId
15
- from .load_biomodel import ModelData, load_biomodel
13
+ from langgraph.prebuilt import InjectedState
14
+ from langgraph.types import Command
15
+ from pydantic import BaseModel, Field
16
+
16
17
  from .load_arguments import ArgumentData, add_rec_events
18
+ from .load_biomodel import ModelData, load_biomodel
17
19
  from .utils import get_model_units
18
20
 
19
21
  # Initialize logger
20
22
  logging.basicConfig(level=logging.INFO)
21
23
  logger = logging.getLogger(__name__)
22
24
 
25
+
23
26
  class SimulateModelInput(BaseModel):
24
27
  """
25
28
  Input schema for the SimulateModel tool.
26
29
  """
27
- sys_bio_model: ModelData = Field(description="model data",
28
- default=None)
29
- arg_data: ArgumentData = Field(description=
30
- """time, species, and reocurring data
30
+
31
+ sys_bio_model: ModelData = Field(description="model data", default=None)
32
+ arg_data: ArgumentData = Field(
33
+ description="""time, species, and reocurring data
31
34
  as well as the simulation name""",
32
- default=None)
35
+ default=None,
36
+ )
33
37
  tool_call_id: Annotated[str, InjectedToolCallId]
34
38
  state: Annotated[dict, InjectedState]
35
39
 
40
+
36
41
  # Note: It's important that every field has type hints. BaseTool is a
37
42
  # Pydantic class and not having type hints can lead to unexpected behavior.
38
43
  class SimulateModelTool(BaseTool):
39
44
  """
40
45
  Tool for simulating a model.
41
46
  """
47
+
42
48
  name: str = "simulate_model"
43
49
  description: str = "A tool to simulate a biomodel"
44
- args_schema: Type[BaseModel] = SimulateModelInput
50
+ args_schema: type[BaseModel] = SimulateModelInput
45
51
 
46
- def _run(self,
52
+ def _run(
53
+ self,
47
54
  tool_call_id: Annotated[str, InjectedToolCallId],
48
55
  state: Annotated[dict, InjectedState],
49
56
  sys_bio_model: ModelData = None,
50
- arg_data: ArgumentData = None
57
+ arg_data: ArgumentData = None,
51
58
  ) -> Command:
52
59
  """
53
60
  Run the tool.
@@ -61,13 +68,9 @@ class SimulateModelTool(BaseTool):
61
68
  Returns:
62
69
  str: The result of the simulation.
63
70
  """
64
- logger.log(logging.INFO,
65
- "Calling simulate_model tool %s, %s",
66
- sys_bio_model,
67
- arg_data)
68
- sbml_file_path = state['sbml_file_path'][-1] if len(state['sbml_file_path']) > 0 else None
69
- model_object = load_biomodel(sys_bio_model,
70
- sbml_file_path=sbml_file_path)
71
+ logger.log(logging.INFO, "Calling simulate_model tool %s, %s", sys_bio_model, arg_data)
72
+ sbml_file_path = state["sbml_file_path"][-1] if len(state["sbml_file_path"]) > 0 else None
73
+ model_object = load_biomodel(sys_bio_model, sbml_file_path=sbml_file_path)
71
74
  # Prepare the dictionary of species data
72
75
  # that will be passed to the simulate method
73
76
  # of the BasicoModel class
@@ -78,8 +81,12 @@ class SimulateModelTool(BaseTool):
78
81
  # Prepare the dictionary of species data
79
82
  if arg_data.species_to_be_analyzed_before_experiment is not None:
80
83
  dic_species_to_be_analyzed_before_experiment = dict(
81
- zip(arg_data.species_to_be_analyzed_before_experiment.species_name,
82
- arg_data.species_to_be_analyzed_before_experiment.species_concentration))
84
+ zip(
85
+ arg_data.species_to_be_analyzed_before_experiment.species_name,
86
+ arg_data.species_to_be_analyzed_before_experiment.species_concentration,
87
+ strict=False,
88
+ )
89
+ )
83
90
  # Add reocurring events (if any) to the model
84
91
  if arg_data.reocurring_data is not None:
85
92
  add_rec_events(model_object, arg_data.reocurring_data)
@@ -89,17 +96,19 @@ class SimulateModelTool(BaseTool):
89
96
  interval = arg_data.time_data.interval
90
97
  # Update the model parameters
91
98
  model_object.update_parameters(dic_species_to_be_analyzed_before_experiment)
92
- logger.log(logging.INFO,
93
- "Following species/parameters updated in the model %s",
94
- dic_species_to_be_analyzed_before_experiment)
99
+ logger.log(
100
+ logging.INFO,
101
+ "Following species/parameters updated in the model %s",
102
+ dic_species_to_be_analyzed_before_experiment,
103
+ )
95
104
  # Simulate the model
96
105
  df = model_object.simulate(duration=duration, interval=interval)
97
106
  logger.log(logging.INFO, "Simulation results ready with shape %s", df.shape)
98
107
  dic_simulated_data = {
99
- 'name': arg_data.experiment_name,
100
- 'source': sys_bio_model.biomodel_id if sys_bio_model.biomodel_id else 'upload',
101
- 'tool_call_id': tool_call_id,
102
- 'data': df.to_dict()
108
+ "name": arg_data.experiment_name,
109
+ "source": (sys_bio_model.biomodel_id if sys_bio_model.biomodel_id else "upload"),
110
+ "tool_call_id": tool_call_id,
111
+ "data": df.to_dict(),
103
112
  }
104
113
  # Prepare the dictionary of updated state
105
114
  dic_updated_state_for_model = {}
@@ -107,19 +116,20 @@ class SimulateModelTool(BaseTool):
107
116
  "model_id": [sys_bio_model.biomodel_id],
108
117
  "sbml_file_path": [sbml_file_path],
109
118
  "dic_simulated_data": [dic_simulated_data],
110
- }.items():
119
+ }.items():
111
120
  if value:
112
121
  dic_updated_state_for_model[key] = value
113
122
  # Return the updated state of the tool
114
123
  return Command(
115
- update=dic_updated_state_for_model|{
124
+ update=dic_updated_state_for_model
125
+ | {
116
126
  # update the message history
117
127
  "messages": [
118
128
  ToolMessage(
119
129
  content=f"Simulation results of {arg_data.experiment_name}",
120
130
  tool_call_id=tool_call_id,
121
- artifact=get_model_units(model_object)
122
- )
123
- ],
124
- }
125
- )
131
+ artifact=get_model_units(model_object),
132
+ )
133
+ ],
134
+ }
135
+ )
@@ -5,23 +5,25 @@ Tool for parameter scan.
5
5
  """
6
6
 
7
7
  import logging
8
- from typing import Type, Annotated
8
+ from typing import Annotated
9
+
9
10
  import basico
10
- from pydantic import BaseModel, Field
11
- from langgraph.types import Command
12
- from langgraph.prebuilt import InjectedState
13
- from langchain_core.tools import BaseTool
14
11
  from langchain_core.messages import ToolMessage
12
+ from langchain_core.tools import BaseTool
15
13
  from langchain_core.tools.base import InjectedToolCallId
16
- from .load_biomodel import ModelData, load_biomodel
14
+ from langgraph.prebuilt import InjectedState
15
+ from langgraph.types import Command
16
+ from pydantic import BaseModel, Field
17
+
17
18
  from .load_arguments import ArgumentData, add_rec_events
19
+ from .load_biomodel import ModelData, load_biomodel
18
20
 
19
21
  # Initialize logger
20
22
  logging.basicConfig(level=logging.INFO)
21
23
  logger = logging.getLogger(__name__)
22
24
 
23
- def run_steady_state(model_object,
24
- dic_species_to_be_analyzed_before_experiment):
25
+
26
+ def run_steady_state(model_object, dic_species_to_be_analyzed_before_experiment):
25
27
  """
26
28
  Run the steady state analysis.
27
29
 
@@ -47,58 +49,65 @@ def run_steady_state(model_object,
47
49
  df_steady_state = basico.model_info.get_species(model=model_object.copasi_model).reset_index()
48
50
  # print (df_steady_state)
49
51
  # Rename the column name to species_name
50
- df_steady_state.rename(columns={'name': 'species_name'},
51
- inplace=True)
52
+ df_steady_state.rename(columns={"name": "species_name"}, inplace=True)
52
53
  # Rename the column concentration to steady_state_concentration
53
- df_steady_state.rename(columns={'concentration': 'steady_state_concentration'},
54
- inplace=True)
54
+ df_steady_state.rename(columns={"concentration": "steady_state_concentration"}, inplace=True)
55
55
  # Rename the column transition_time to steady_state_transition_time
56
- df_steady_state.rename(columns={'transition_time': 'steady_state_transition_time'},
57
- inplace=True)
56
+ df_steady_state.rename(
57
+ columns={"transition_time": "steady_state_transition_time"}, inplace=True
58
+ )
58
59
  # Drop some columns
59
- df_steady_state.drop(columns=
60
- [
61
- 'initial_particle_number',
62
- 'initial_expression',
63
- 'expression',
64
- 'particle_number',
65
- 'type',
66
- 'particle_number_rate',
67
- 'key',
68
- 'sbml_id',
69
- 'display_name'],
70
- inplace=True)
60
+ df_steady_state.drop(
61
+ columns=[
62
+ "initial_particle_number",
63
+ "initial_expression",
64
+ "expression",
65
+ "particle_number",
66
+ "type",
67
+ "particle_number_rate",
68
+ "key",
69
+ "sbml_id",
70
+ "display_name",
71
+ ],
72
+ inplace=True,
73
+ )
71
74
  logger.log(logging.INFO, "Steady state results with shape %s", df_steady_state.shape)
72
75
  return df_steady_state
73
76
 
77
+
74
78
  class SteadyStateInput(BaseModel):
75
79
  """
76
80
  Input schema for the steady state tool.
77
81
  """
78
- sys_bio_model: ModelData = Field(description="model data",
79
- default=None)
82
+
83
+ sys_bio_model: ModelData = Field(description="model data", default=None)
80
84
  arg_data: ArgumentData = Field(
81
85
  description="time, species, and reocurring data"
82
- " that must be set before the steady state analysis"
83
- " as well as the experiment name", default=None)
86
+ " that must be set before the steady state analysis"
87
+ " as well as the experiment name",
88
+ default=None,
89
+ )
84
90
  tool_call_id: Annotated[str, InjectedToolCallId]
85
91
  state: Annotated[dict, InjectedState]
86
92
 
93
+
87
94
  # Note: It's important that every field has type hints. BaseTool is a
88
95
  # Pydantic class and not having type hints can lead to unexpected behavior.
89
96
  class SteadyStateTool(BaseTool):
90
97
  """
91
98
  Tool to bring a model to steady state.
92
99
  """
100
+
93
101
  name: str = "steady_state"
94
102
  description: str = "A tool to bring a model to steady state."
95
- args_schema: Type[BaseModel] = SteadyStateInput
103
+ args_schema: type[BaseModel] = SteadyStateInput
96
104
 
97
- def _run(self,
105
+ def _run(
106
+ self,
98
107
  tool_call_id: Annotated[str, InjectedToolCallId],
99
108
  state: Annotated[dict, InjectedState],
100
109
  sys_bio_model: ModelData = None,
101
- arg_data: ArgumentData = None
110
+ arg_data: ArgumentData = None,
102
111
  ) -> Command:
103
112
  """
104
113
  Run the tool.
@@ -112,12 +121,15 @@ class SteadyStateTool(BaseTool):
112
121
  Returns:
113
122
  Command: The updated state of the tool.
114
123
  """
115
- logger.log(logging.INFO, "Calling the steady_state tool %s, %s",
116
- sys_bio_model, arg_data)
124
+ logger.log(
125
+ logging.INFO,
126
+ "Calling the steady_state tool %s, %s",
127
+ sys_bio_model,
128
+ arg_data,
129
+ )
117
130
  # print (f'Calling steady_state tool {sys_bio_model}, {arg_data}, {tool_call_id}')
118
- sbml_file_path = state['sbml_file_path'][-1] if len(state['sbml_file_path']) > 0 else None
119
- model_object = load_biomodel(sys_bio_model,
120
- sbml_file_path=sbml_file_path)
131
+ sbml_file_path = state["sbml_file_path"][-1] if len(state["sbml_file_path"]) > 0 else None
132
+ model_object = load_biomodel(sys_bio_model, sbml_file_path=sbml_file_path)
121
133
  # Prepare the dictionary of species data
122
134
  # that will be passed to the simulate method
123
135
  # of the BasicoModel class
@@ -126,44 +138,50 @@ class SteadyStateTool(BaseTool):
126
138
  # Prepare the dictionary of species data
127
139
  if arg_data.species_to_be_analyzed_before_experiment is not None:
128
140
  dic_species_to_be_analyzed_before_experiment = dict(
129
- zip(arg_data.species_to_be_analyzed_before_experiment.species_name,
130
- arg_data.species_to_be_analyzed_before_experiment.species_concentration))
141
+ zip(
142
+ arg_data.species_to_be_analyzed_before_experiment.species_name,
143
+ arg_data.species_to_be_analyzed_before_experiment.species_concentration,
144
+ strict=False,
145
+ )
146
+ )
131
147
  # Add reocurring events (if any) to the model
132
148
  if arg_data.reocurring_data is not None:
133
149
  add_rec_events(model_object, arg_data.reocurring_data)
134
150
  # Run the parameter scan
135
- df_steady_state = run_steady_state(model_object,
136
- dic_species_to_be_analyzed_before_experiment)
137
- print (df_steady_state)
151
+ df_steady_state = run_steady_state(
152
+ model_object, dic_species_to_be_analyzed_before_experiment
153
+ )
154
+ print(df_steady_state)
138
155
  # Prepare the dictionary of scanned data
139
156
  # that will be passed to the state of the graph
140
157
  dic_steady_state_data = {
141
- 'name': arg_data.experiment_name,
142
- 'source': sys_bio_model.biomodel_id if sys_bio_model.biomodel_id else 'upload',
143
- 'tool_call_id': tool_call_id,
144
- 'data': df_steady_state.to_dict(orient='records')
158
+ "name": arg_data.experiment_name,
159
+ "source": (sys_bio_model.biomodel_id if sys_bio_model.biomodel_id else "upload"),
160
+ "tool_call_id": tool_call_id,
161
+ "data": df_steady_state.to_dict(orient="records"),
145
162
  }
146
163
  # Prepare the dictionary of updated state for the model
147
164
  dic_updated_state_for_model = {}
148
165
  for key, value in {
149
166
  "model_id": [sys_bio_model.biomodel_id],
150
167
  "sbml_file_path": [sbml_file_path],
151
- "dic_steady_state_data": [dic_steady_state_data]
152
- }.items():
168
+ "dic_steady_state_data": [dic_steady_state_data],
169
+ }.items():
153
170
  if value:
154
171
  dic_updated_state_for_model[key] = value
155
172
  # Return the updated state
156
173
  return Command(
157
- update=dic_updated_state_for_model|{
174
+ update=dic_updated_state_for_model
175
+ | {
158
176
  # Update the message history
159
177
  "messages": [
160
- ToolMessage(
178
+ ToolMessage(
161
179
  content=f"Steady state analysis of"
162
- f" {arg_data.experiment_name}"
163
- " was successful.",
180
+ f" {arg_data.experiment_name}"
181
+ " was successful.",
164
182
  tool_call_id=tool_call_id,
165
- artifact={'dic_data': df_steady_state.to_dict(orient='records')}
166
- )
167
- ],
168
- }
169
- )
183
+ artifact={"dic_data": df_steady_state.to_dict(orient="records")},
184
+ )
185
+ ],
186
+ }
187
+ )
@@ -6,6 +6,7 @@ Utility functions for T2B tools.
6
6
 
7
7
  import basico
8
8
 
9
+
9
10
  def get_model_units(model_object):
10
11
  """
11
12
  Get the units of the model.
@@ -17,6 +18,6 @@ def get_model_units(model_object):
17
18
  dict: The units of the model.
18
19
  """
19
20
  model_units = basico.model_info.get_model_units(model=model_object.copasi_model)
20
- model_units_y = model_units['quantity_unit']
21
- model_units_x = model_units['time_unit']
22
- return {'y_axis_label': model_units_y, 'x_axis_label': model_units_x}
21
+ model_units_y = model_units["quantity_unit"]
22
+ model_units_x = model_units["time_unit"]
23
+ return {"y_axis_label": model_units_y, "x_axis_label": model_units_x}
@@ -0,0 +1 @@
1
+ Please check out the README file in the root folder for more information.
@@ -1,6 +1,5 @@
1
- '''
1
+ """
2
2
  This file is used to import the models and tools.
3
- '''
4
- from . import agents
5
- from . import states
6
- from . import tools
3
+ """
4
+
5
+ from . import agents, states, tools
@@ -1,5 +1,6 @@
1
- '''
1
+ """
2
2
  This file is used to import all the modules in the package.
3
- '''
3
+ """
4
+
4
5
  # import everything from the module
5
6
  from . import scp_agent
@@ -1,31 +1,35 @@
1
- #/usr/bin/env python3
1
+ # /usr/bin/env python3
2
2
 
3
- '''
3
+ """
4
4
  This is the agent file for the Talk2Cells graph.
5
- '''
5
+ """
6
6
 
7
7
  import logging
8
8
  import os
9
+
9
10
  from langchain_openai import ChatOpenAI
10
11
  from langgraph.checkpoint.memory import MemorySaver
11
12
  from langgraph.graph import START, StateGraph
12
- from langgraph.prebuilt import create_react_agent, ToolNode
13
- from ..tools.scp_agent.search_studies import search_studies
14
- from ..tools.scp_agent.display_studies import display_studies
13
+ from langgraph.prebuilt import ToolNode, create_react_agent
14
+
15
15
  from ..states.state_talk2cells import Talk2Cells
16
+ from ..tools.scp_agent.display_studies import display_studies
17
+ from ..tools.scp_agent.search_studies import search_studies
16
18
 
17
19
  # Initialize logger
18
20
  logging.basicConfig(level=logging.INFO)
19
21
  logger = logging.getLogger(__name__)
20
22
 
23
+
21
24
  def get_app(uniq_id):
22
- '''
25
+ """
23
26
  This function returns the langraph app.
24
- '''
27
+ """
28
+
25
29
  def agent_scp_node(state: Talk2Cells):
26
- '''
30
+ """
27
31
  This function calls the model.
28
- '''
32
+ """
29
33
  logger.log(logging.INFO, "Creating SCP_Agent node with thread_id %s", uniq_id)
30
34
  # Get the messages from the state
31
35
  # messages = state['messages']
@@ -48,19 +52,17 @@ def get_app(uniq_id):
48
52
  # Create an environment variable to store the LLM model
49
53
  # Check if the environment variable AIAGENTS4PHARMA_LLM_MODEL is set
50
54
  # If not, set it to 'gpt-4o-mini'
51
- llm_model = os.getenv('AIAGENTS4PHARMA_LLM_MODEL', 'gpt-4o-mini')
55
+ llm_model = os.getenv("AIAGENTS4PHARMA_LLM_MODEL", "gpt-4o-mini")
52
56
  # print (f'LLM model: {llm_model}')
53
57
  # llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
54
58
  llm = ChatOpenAI(model=llm_model, temperature=0)
55
59
  model = create_react_agent(
56
- llm,
57
- tools=tools,
58
- state_schema=Talk2Cells,
59
- state_modifier=(
60
- "You are Talk2Cells agent."
61
- ),
62
- checkpointer=MemorySaver()
63
- )
60
+ llm,
61
+ tools=tools,
62
+ state_schema=Talk2Cells,
63
+ state_modifier=("You are Talk2Cells agent."),
64
+ checkpointer=MemorySaver(),
65
+ )
64
66
 
65
67
  # Define a new graph
66
68
  workflow = StateGraph(Talk2Cells)
@@ -1,5 +1,6 @@
1
- '''
1
+ """
2
2
  This file is used to import all the modules in the package.
3
- '''
3
+ """
4
+
4
5
  # import everything from the module
5
6
  from . import state_talk2cells
@@ -1,13 +1,15 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
- '''
3
+ """
4
4
  This is the state file for the Talk2Cells agent.
5
- '''
5
+ """
6
6
 
7
7
  from langgraph.prebuilt.chat_agent_executor import AgentState
8
8
 
9
+
9
10
  class Talk2Cells(AgentState):
10
11
  """
11
12
  The state for the Talk2Cells agent.
12
13
  """
14
+
13
15
  search_table: str
@@ -1,23 +1,22 @@
1
- '''
1
+ """
2
2
  Test cases for the search_studies
3
- '''
3
+ """
4
4
 
5
5
  # from ..tools.search_studies import search_studies
6
- from aiagents4pharma.talk2cells.agents.scp_agent import get_app
7
6
  from langchain_core.messages import HumanMessage
8
7
 
8
+ from aiagents4pharma.talk2cells.agents.scp_agent import get_app
9
+
10
+
9
11
  def test_agent_scp():
10
- '''
12
+ """
11
13
  Test the agent_scp.
12
- '''
14
+ """
13
15
  unique_id = 12345
14
16
  app = get_app(unique_id)
15
17
  config = {"configurable": {"thread_id": unique_id}}
16
18
  prompt = "Search for studies on Crohns Disease."
17
- response = app.invoke(
18
- {"messages": [HumanMessage(content=prompt)]},
19
- config=config
20
- )
19
+ response = app.invoke({"messages": [HumanMessage(content=prompt)]}, config=config)
21
20
  assistant_msg = response["messages"][-1].content
22
21
  # Check if the assistant message is a string
23
22
  assert isinstance(assistant_msg, str)