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.
- aiagents4pharma/__init__.py +11 -0
- aiagents4pharma/talk2aiagents4pharma/.dockerignore +13 -0
- aiagents4pharma/talk2aiagents4pharma/Dockerfile +133 -0
- aiagents4pharma/talk2aiagents4pharma/README.md +1 -0
- aiagents4pharma/talk2aiagents4pharma/__init__.py +5 -0
- aiagents4pharma/talk2aiagents4pharma/agents/__init__.py +6 -0
- aiagents4pharma/talk2aiagents4pharma/agents/main_agent.py +70 -0
- aiagents4pharma/talk2aiagents4pharma/configs/__init__.py +5 -0
- aiagents4pharma/talk2aiagents4pharma/configs/agents/__init__.py +5 -0
- aiagents4pharma/talk2aiagents4pharma/configs/agents/main_agent/default.yaml +29 -0
- aiagents4pharma/talk2aiagents4pharma/configs/app/__init__.py +0 -0
- aiagents4pharma/talk2aiagents4pharma/configs/app/frontend/__init__.py +0 -0
- aiagents4pharma/talk2aiagents4pharma/configs/app/frontend/default.yaml +102 -0
- aiagents4pharma/talk2aiagents4pharma/configs/config.yaml +4 -0
- aiagents4pharma/talk2aiagents4pharma/docker-compose/cpu/.env.example +23 -0
- aiagents4pharma/talk2aiagents4pharma/docker-compose/cpu/docker-compose.yml +93 -0
- aiagents4pharma/talk2aiagents4pharma/docker-compose/gpu/.env.example +23 -0
- aiagents4pharma/talk2aiagents4pharma/docker-compose/gpu/docker-compose.yml +108 -0
- aiagents4pharma/talk2aiagents4pharma/install.md +154 -0
- aiagents4pharma/talk2aiagents4pharma/states/__init__.py +5 -0
- aiagents4pharma/talk2aiagents4pharma/states/state_talk2aiagents4pharma.py +18 -0
- aiagents4pharma/talk2aiagents4pharma/tests/__init__.py +3 -0
- aiagents4pharma/talk2aiagents4pharma/tests/test_main_agent.py +312 -0
- aiagents4pharma/talk2biomodels/.dockerignore +13 -0
- aiagents4pharma/talk2biomodels/Dockerfile +104 -0
- aiagents4pharma/talk2biomodels/README.md +1 -0
- aiagents4pharma/talk2biomodels/__init__.py +5 -0
- aiagents4pharma/talk2biomodels/agents/__init__.py +6 -0
- aiagents4pharma/talk2biomodels/agents/t2b_agent.py +104 -0
- aiagents4pharma/talk2biomodels/api/__init__.py +5 -0
- aiagents4pharma/talk2biomodels/api/ols.py +75 -0
- aiagents4pharma/talk2biomodels/api/uniprot.py +36 -0
- aiagents4pharma/talk2biomodels/configs/__init__.py +5 -0
- aiagents4pharma/talk2biomodels/configs/agents/__init__.py +5 -0
- aiagents4pharma/talk2biomodels/configs/agents/t2b_agent/__init__.py +3 -0
- aiagents4pharma/talk2biomodels/configs/agents/t2b_agent/default.yaml +14 -0
- aiagents4pharma/talk2biomodels/configs/app/__init__.py +0 -0
- aiagents4pharma/talk2biomodels/configs/app/frontend/__init__.py +0 -0
- aiagents4pharma/talk2biomodels/configs/app/frontend/default.yaml +72 -0
- aiagents4pharma/talk2biomodels/configs/config.yaml +7 -0
- aiagents4pharma/talk2biomodels/configs/tools/__init__.py +5 -0
- aiagents4pharma/talk2biomodels/configs/tools/ask_question/__init__.py +3 -0
- aiagents4pharma/talk2biomodels/configs/tools/ask_question/default.yaml +30 -0
- aiagents4pharma/talk2biomodels/configs/tools/custom_plotter/__init__.py +3 -0
- aiagents4pharma/talk2biomodels/configs/tools/custom_plotter/default.yaml +8 -0
- aiagents4pharma/talk2biomodels/configs/tools/get_annotation/__init__.py +3 -0
- aiagents4pharma/talk2biomodels/configs/tools/get_annotation/default.yaml +8 -0
- aiagents4pharma/talk2biomodels/install.md +63 -0
- aiagents4pharma/talk2biomodels/models/__init__.py +5 -0
- aiagents4pharma/talk2biomodels/models/basico_model.py +125 -0
- aiagents4pharma/talk2biomodels/models/sys_bio_model.py +60 -0
- aiagents4pharma/talk2biomodels/states/__init__.py +6 -0
- aiagents4pharma/talk2biomodels/states/state_talk2biomodels.py +49 -0
- aiagents4pharma/talk2biomodels/tests/BIOMD0000000449_url.xml +1585 -0
- aiagents4pharma/talk2biomodels/tests/__init__.py +3 -0
- aiagents4pharma/talk2biomodels/tests/article_on_model_537.pdf +0 -0
- aiagents4pharma/talk2biomodels/tests/test_api.py +31 -0
- aiagents4pharma/talk2biomodels/tests/test_ask_question.py +42 -0
- aiagents4pharma/talk2biomodels/tests/test_basico_model.py +67 -0
- aiagents4pharma/talk2biomodels/tests/test_get_annotation.py +190 -0
- aiagents4pharma/talk2biomodels/tests/test_getmodelinfo.py +92 -0
- aiagents4pharma/talk2biomodels/tests/test_integration.py +116 -0
- aiagents4pharma/talk2biomodels/tests/test_load_biomodel.py +35 -0
- aiagents4pharma/talk2biomodels/tests/test_param_scan.py +71 -0
- aiagents4pharma/talk2biomodels/tests/test_query_article.py +184 -0
- aiagents4pharma/talk2biomodels/tests/test_save_model.py +47 -0
- aiagents4pharma/talk2biomodels/tests/test_search_models.py +35 -0
- aiagents4pharma/talk2biomodels/tests/test_simulate_model.py +44 -0
- aiagents4pharma/talk2biomodels/tests/test_steady_state.py +86 -0
- aiagents4pharma/talk2biomodels/tests/test_sys_bio_model.py +67 -0
- aiagents4pharma/talk2biomodels/tools/__init__.py +17 -0
- aiagents4pharma/talk2biomodels/tools/ask_question.py +125 -0
- aiagents4pharma/talk2biomodels/tools/custom_plotter.py +165 -0
- aiagents4pharma/talk2biomodels/tools/get_annotation.py +342 -0
- aiagents4pharma/talk2biomodels/tools/get_modelinfo.py +159 -0
- aiagents4pharma/talk2biomodels/tools/load_arguments.py +134 -0
- aiagents4pharma/talk2biomodels/tools/load_biomodel.py +44 -0
- aiagents4pharma/talk2biomodels/tools/parameter_scan.py +310 -0
- aiagents4pharma/talk2biomodels/tools/query_article.py +64 -0
- aiagents4pharma/talk2biomodels/tools/save_model.py +98 -0
- aiagents4pharma/talk2biomodels/tools/search_models.py +96 -0
- aiagents4pharma/talk2biomodels/tools/simulate_model.py +137 -0
- aiagents4pharma/talk2biomodels/tools/steady_state.py +187 -0
- aiagents4pharma/talk2biomodels/tools/utils.py +23 -0
- aiagents4pharma/talk2cells/README.md +1 -0
- aiagents4pharma/talk2cells/__init__.py +5 -0
- aiagents4pharma/talk2cells/agents/__init__.py +6 -0
- aiagents4pharma/talk2cells/agents/scp_agent.py +87 -0
- aiagents4pharma/talk2cells/states/__init__.py +6 -0
- aiagents4pharma/talk2cells/states/state_talk2cells.py +15 -0
- aiagents4pharma/talk2cells/tests/scp_agent/test_scp_agent.py +22 -0
- aiagents4pharma/talk2cells/tools/__init__.py +6 -0
- aiagents4pharma/talk2cells/tools/scp_agent/__init__.py +6 -0
- aiagents4pharma/talk2cells/tools/scp_agent/display_studies.py +27 -0
- aiagents4pharma/talk2cells/tools/scp_agent/search_studies.py +78 -0
- aiagents4pharma/talk2knowledgegraphs/.dockerignore +13 -0
- aiagents4pharma/talk2knowledgegraphs/Dockerfile +131 -0
- aiagents4pharma/talk2knowledgegraphs/README.md +1 -0
- aiagents4pharma/talk2knowledgegraphs/__init__.py +5 -0
- aiagents4pharma/talk2knowledgegraphs/agents/__init__.py +5 -0
- aiagents4pharma/talk2knowledgegraphs/agents/t2kg_agent.py +99 -0
- aiagents4pharma/talk2knowledgegraphs/configs/__init__.py +5 -0
- aiagents4pharma/talk2knowledgegraphs/configs/agents/t2kg_agent/__init__.py +3 -0
- aiagents4pharma/talk2knowledgegraphs/configs/agents/t2kg_agent/default.yaml +62 -0
- aiagents4pharma/talk2knowledgegraphs/configs/app/__init__.py +5 -0
- aiagents4pharma/talk2knowledgegraphs/configs/app/frontend/__init__.py +3 -0
- aiagents4pharma/talk2knowledgegraphs/configs/app/frontend/default.yaml +79 -0
- aiagents4pharma/talk2knowledgegraphs/configs/config.yaml +13 -0
- aiagents4pharma/talk2knowledgegraphs/configs/tools/__init__.py +5 -0
- aiagents4pharma/talk2knowledgegraphs/configs/tools/graphrag_reasoning/__init__.py +3 -0
- aiagents4pharma/talk2knowledgegraphs/configs/tools/graphrag_reasoning/default.yaml +24 -0
- aiagents4pharma/talk2knowledgegraphs/configs/tools/multimodal_subgraph_extraction/__init__.py +0 -0
- aiagents4pharma/talk2knowledgegraphs/configs/tools/multimodal_subgraph_extraction/default.yaml +33 -0
- aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_extraction/__init__.py +3 -0
- aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_extraction/default.yaml +43 -0
- aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_summarization/__init__.py +3 -0
- aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_summarization/default.yaml +9 -0
- aiagents4pharma/talk2knowledgegraphs/configs/utils/database/milvus/__init__.py +3 -0
- aiagents4pharma/talk2knowledgegraphs/configs/utils/database/milvus/default.yaml +61 -0
- aiagents4pharma/talk2knowledgegraphs/configs/utils/enrichments/ols_terms/default.yaml +3 -0
- aiagents4pharma/talk2knowledgegraphs/configs/utils/enrichments/reactome_pathways/default.yaml +3 -0
- aiagents4pharma/talk2knowledgegraphs/configs/utils/enrichments/uniprot_proteins/default.yaml +6 -0
- aiagents4pharma/talk2knowledgegraphs/configs/utils/pubchem_utils/default.yaml +5 -0
- aiagents4pharma/talk2knowledgegraphs/datasets/__init__.py +5 -0
- aiagents4pharma/talk2knowledgegraphs/datasets/biobridge_primekg.py +607 -0
- aiagents4pharma/talk2knowledgegraphs/datasets/dataset.py +25 -0
- aiagents4pharma/talk2knowledgegraphs/datasets/primekg.py +212 -0
- aiagents4pharma/talk2knowledgegraphs/datasets/starkqa_primekg.py +210 -0
- aiagents4pharma/talk2knowledgegraphs/docker-compose/cpu/.env.example +23 -0
- aiagents4pharma/talk2knowledgegraphs/docker-compose/cpu/docker-compose.yml +93 -0
- aiagents4pharma/talk2knowledgegraphs/docker-compose/gpu/.env.example +23 -0
- aiagents4pharma/talk2knowledgegraphs/docker-compose/gpu/docker-compose.yml +108 -0
- aiagents4pharma/talk2knowledgegraphs/entrypoint.sh +180 -0
- aiagents4pharma/talk2knowledgegraphs/install.md +165 -0
- aiagents4pharma/talk2knowledgegraphs/milvus_data_dump.py +886 -0
- aiagents4pharma/talk2knowledgegraphs/states/__init__.py +5 -0
- aiagents4pharma/talk2knowledgegraphs/states/state_talk2knowledgegraphs.py +40 -0
- aiagents4pharma/talk2knowledgegraphs/tests/__init__.py +0 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_agents_t2kg_agent.py +318 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_biobridge_primekg.py +248 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_dataset.py +33 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_primekg.py +86 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_starkqa_primekg.py +125 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_tools_graphrag_reasoning.py +257 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_tools_milvus_multimodal_subgraph_extraction.py +1444 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_tools_multimodal_subgraph_extraction.py +159 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_tools_subgraph_extraction.py +152 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_tools_subgraph_summarization.py +201 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_database_milvus_connection_manager.py +812 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_embeddings.py +51 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_huggingface.py +49 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_nim_molmim.py +59 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_ollama.py +63 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_sentencetransformer.py +47 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_enrichments.py +40 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_ollama.py +94 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_ols.py +70 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_pubchem.py +45 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_reactome.py +44 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_uniprot.py +48 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_extractions_milvus_multimodal_pcst.py +759 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_kg_utils.py +78 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_pubchem_utils.py +123 -0
- aiagents4pharma/talk2knowledgegraphs/tools/__init__.py +11 -0
- aiagents4pharma/talk2knowledgegraphs/tools/graphrag_reasoning.py +138 -0
- aiagents4pharma/talk2knowledgegraphs/tools/load_arguments.py +22 -0
- aiagents4pharma/talk2knowledgegraphs/tools/milvus_multimodal_subgraph_extraction.py +965 -0
- aiagents4pharma/talk2knowledgegraphs/tools/multimodal_subgraph_extraction.py +374 -0
- aiagents4pharma/talk2knowledgegraphs/tools/subgraph_extraction.py +291 -0
- aiagents4pharma/talk2knowledgegraphs/tools/subgraph_summarization.py +123 -0
- aiagents4pharma/talk2knowledgegraphs/utils/__init__.py +5 -0
- aiagents4pharma/talk2knowledgegraphs/utils/database/__init__.py +5 -0
- aiagents4pharma/talk2knowledgegraphs/utils/database/milvus_connection_manager.py +586 -0
- aiagents4pharma/talk2knowledgegraphs/utils/embeddings/__init__.py +5 -0
- aiagents4pharma/talk2knowledgegraphs/utils/embeddings/embeddings.py +81 -0
- aiagents4pharma/talk2knowledgegraphs/utils/embeddings/huggingface.py +111 -0
- aiagents4pharma/talk2knowledgegraphs/utils/embeddings/nim_molmim.py +54 -0
- aiagents4pharma/talk2knowledgegraphs/utils/embeddings/ollama.py +87 -0
- aiagents4pharma/talk2knowledgegraphs/utils/embeddings/sentence_transformer.py +73 -0
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/__init__.py +12 -0
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/enrichments.py +37 -0
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/ollama.py +129 -0
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/ols_terms.py +89 -0
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/pubchem_strings.py +78 -0
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/reactome_pathways.py +71 -0
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/uniprot_proteins.py +98 -0
- aiagents4pharma/talk2knowledgegraphs/utils/extractions/__init__.py +5 -0
- aiagents4pharma/talk2knowledgegraphs/utils/extractions/milvus_multimodal_pcst.py +762 -0
- aiagents4pharma/talk2knowledgegraphs/utils/extractions/multimodal_pcst.py +298 -0
- aiagents4pharma/talk2knowledgegraphs/utils/extractions/pcst.py +229 -0
- aiagents4pharma/talk2knowledgegraphs/utils/kg_utils.py +67 -0
- aiagents4pharma/talk2knowledgegraphs/utils/pubchem_utils.py +104 -0
- aiagents4pharma/talk2scholars/.dockerignore +13 -0
- aiagents4pharma/talk2scholars/Dockerfile +104 -0
- aiagents4pharma/talk2scholars/README.md +1 -0
- aiagents4pharma/talk2scholars/__init__.py +7 -0
- aiagents4pharma/talk2scholars/agents/__init__.py +13 -0
- aiagents4pharma/talk2scholars/agents/main_agent.py +89 -0
- aiagents4pharma/talk2scholars/agents/paper_download_agent.py +96 -0
- aiagents4pharma/talk2scholars/agents/pdf_agent.py +101 -0
- aiagents4pharma/talk2scholars/agents/s2_agent.py +135 -0
- aiagents4pharma/talk2scholars/agents/zotero_agent.py +127 -0
- aiagents4pharma/talk2scholars/configs/__init__.py +7 -0
- aiagents4pharma/talk2scholars/configs/agents/__init__.py +7 -0
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/__init__.py +7 -0
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/default.yaml +52 -0
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/paper_download_agent/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/paper_download_agent/default.yaml +19 -0
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/pdf_agent/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/pdf_agent/default.yaml +19 -0
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/s2_agent/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/s2_agent/default.yaml +44 -0
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/zotero_agent/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/zotero_agent/default.yaml +19 -0
- aiagents4pharma/talk2scholars/configs/app/__init__.py +7 -0
- aiagents4pharma/talk2scholars/configs/app/frontend/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/app/frontend/default.yaml +72 -0
- aiagents4pharma/talk2scholars/configs/config.yaml +16 -0
- aiagents4pharma/talk2scholars/configs/tools/__init__.py +21 -0
- aiagents4pharma/talk2scholars/configs/tools/multi_paper_recommendation/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/tools/multi_paper_recommendation/default.yaml +26 -0
- aiagents4pharma/talk2scholars/configs/tools/paper_download/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/tools/paper_download/default.yaml +124 -0
- aiagents4pharma/talk2scholars/configs/tools/question_and_answer/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/tools/question_and_answer/default.yaml +62 -0
- aiagents4pharma/talk2scholars/configs/tools/retrieve_semantic_scholar_paper_id/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/tools/retrieve_semantic_scholar_paper_id/default.yaml +12 -0
- aiagents4pharma/talk2scholars/configs/tools/search/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/tools/search/default.yaml +26 -0
- aiagents4pharma/talk2scholars/configs/tools/single_paper_recommendation/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/tools/single_paper_recommendation/default.yaml +26 -0
- aiagents4pharma/talk2scholars/configs/tools/zotero_read/__init__.py +3 -0
- aiagents4pharma/talk2scholars/configs/tools/zotero_read/default.yaml +57 -0
- aiagents4pharma/talk2scholars/configs/tools/zotero_write/__inti__.py +3 -0
- aiagents4pharma/talk2scholars/configs/tools/zotero_write/default.yaml +55 -0
- aiagents4pharma/talk2scholars/docker-compose/cpu/.env.example +21 -0
- aiagents4pharma/talk2scholars/docker-compose/cpu/docker-compose.yml +90 -0
- aiagents4pharma/talk2scholars/docker-compose/gpu/.env.example +21 -0
- aiagents4pharma/talk2scholars/docker-compose/gpu/docker-compose.yml +105 -0
- aiagents4pharma/talk2scholars/install.md +122 -0
- aiagents4pharma/talk2scholars/state/__init__.py +7 -0
- aiagents4pharma/talk2scholars/state/state_talk2scholars.py +98 -0
- aiagents4pharma/talk2scholars/tests/__init__.py +3 -0
- aiagents4pharma/talk2scholars/tests/test_agents_main_agent.py +256 -0
- aiagents4pharma/talk2scholars/tests/test_agents_paper_agents_download_agent.py +139 -0
- aiagents4pharma/talk2scholars/tests/test_agents_pdf_agent.py +114 -0
- aiagents4pharma/talk2scholars/tests/test_agents_s2_agent.py +198 -0
- aiagents4pharma/talk2scholars/tests/test_agents_zotero_agent.py +160 -0
- aiagents4pharma/talk2scholars/tests/test_s2_tools_display_dataframe.py +91 -0
- aiagents4pharma/talk2scholars/tests/test_s2_tools_query_dataframe.py +191 -0
- aiagents4pharma/talk2scholars/tests/test_states_state.py +38 -0
- aiagents4pharma/talk2scholars/tests/test_tools_paper_downloader.py +507 -0
- aiagents4pharma/talk2scholars/tests/test_tools_question_and_answer_tool.py +105 -0
- aiagents4pharma/talk2scholars/tests/test_tools_s2_multi.py +307 -0
- aiagents4pharma/talk2scholars/tests/test_tools_s2_retrieve.py +67 -0
- aiagents4pharma/talk2scholars/tests/test_tools_s2_search.py +286 -0
- aiagents4pharma/talk2scholars/tests/test_tools_s2_single.py +298 -0
- aiagents4pharma/talk2scholars/tests/test_utils_arxiv_downloader.py +469 -0
- aiagents4pharma/talk2scholars/tests/test_utils_base_paper_downloader.py +598 -0
- aiagents4pharma/talk2scholars/tests/test_utils_biorxiv_downloader.py +669 -0
- aiagents4pharma/talk2scholars/tests/test_utils_medrxiv_downloader.py +500 -0
- aiagents4pharma/talk2scholars/tests/test_utils_nvidia_nim_reranker.py +117 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pdf_answer_formatter.py +67 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pdf_batch_processor.py +92 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pdf_collection_manager.py +173 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pdf_document_processor.py +68 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pdf_generate_answer.py +72 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pdf_gpu_detection.py +129 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pdf_paper_loader.py +116 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pdf_rag_pipeline.py +88 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pdf_retrieve_chunks.py +190 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pdf_singleton_manager.py +159 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pdf_vector_normalization.py +121 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pdf_vector_store.py +406 -0
- aiagents4pharma/talk2scholars/tests/test_utils_pubmed_downloader.py +1007 -0
- aiagents4pharma/talk2scholars/tests/test_utils_read_helper_utils.py +106 -0
- aiagents4pharma/talk2scholars/tests/test_utils_s2_utils_ext_ids.py +403 -0
- aiagents4pharma/talk2scholars/tests/test_utils_tool_helper_utils.py +85 -0
- aiagents4pharma/talk2scholars/tests/test_utils_zotero_human_in_the_loop.py +266 -0
- aiagents4pharma/talk2scholars/tests/test_utils_zotero_path.py +496 -0
- aiagents4pharma/talk2scholars/tests/test_utils_zotero_pdf_downloader_utils.py +46 -0
- aiagents4pharma/talk2scholars/tests/test_utils_zotero_read.py +743 -0
- aiagents4pharma/talk2scholars/tests/test_utils_zotero_write.py +151 -0
- aiagents4pharma/talk2scholars/tools/__init__.py +9 -0
- aiagents4pharma/talk2scholars/tools/paper_download/__init__.py +12 -0
- aiagents4pharma/talk2scholars/tools/paper_download/paper_downloader.py +442 -0
- aiagents4pharma/talk2scholars/tools/paper_download/utils/__init__.py +22 -0
- aiagents4pharma/talk2scholars/tools/paper_download/utils/arxiv_downloader.py +207 -0
- aiagents4pharma/talk2scholars/tools/paper_download/utils/base_paper_downloader.py +336 -0
- aiagents4pharma/talk2scholars/tools/paper_download/utils/biorxiv_downloader.py +313 -0
- aiagents4pharma/talk2scholars/tools/paper_download/utils/medrxiv_downloader.py +196 -0
- aiagents4pharma/talk2scholars/tools/paper_download/utils/pubmed_downloader.py +323 -0
- aiagents4pharma/talk2scholars/tools/pdf/__init__.py +7 -0
- aiagents4pharma/talk2scholars/tools/pdf/question_and_answer.py +170 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/__init__.py +37 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/answer_formatter.py +62 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/batch_processor.py +198 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/collection_manager.py +172 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/document_processor.py +76 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/generate_answer.py +97 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/get_vectorstore.py +59 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/gpu_detection.py +150 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/nvidia_nim_reranker.py +97 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/paper_loader.py +123 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/rag_pipeline.py +113 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/retrieve_chunks.py +197 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/singleton_manager.py +140 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/tool_helper.py +86 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/vector_normalization.py +150 -0
- aiagents4pharma/talk2scholars/tools/pdf/utils/vector_store.py +327 -0
- aiagents4pharma/talk2scholars/tools/s2/__init__.py +21 -0
- aiagents4pharma/talk2scholars/tools/s2/display_dataframe.py +110 -0
- aiagents4pharma/talk2scholars/tools/s2/multi_paper_rec.py +111 -0
- aiagents4pharma/talk2scholars/tools/s2/query_dataframe.py +233 -0
- aiagents4pharma/talk2scholars/tools/s2/retrieve_semantic_scholar_paper_id.py +128 -0
- aiagents4pharma/talk2scholars/tools/s2/search.py +101 -0
- aiagents4pharma/talk2scholars/tools/s2/single_paper_rec.py +102 -0
- aiagents4pharma/talk2scholars/tools/s2/utils/__init__.py +5 -0
- aiagents4pharma/talk2scholars/tools/s2/utils/multi_helper.py +223 -0
- aiagents4pharma/talk2scholars/tools/s2/utils/search_helper.py +205 -0
- aiagents4pharma/talk2scholars/tools/s2/utils/single_helper.py +216 -0
- aiagents4pharma/talk2scholars/tools/zotero/__init__.py +7 -0
- aiagents4pharma/talk2scholars/tools/zotero/utils/__init__.py +7 -0
- aiagents4pharma/talk2scholars/tools/zotero/utils/read_helper.py +270 -0
- aiagents4pharma/talk2scholars/tools/zotero/utils/review_helper.py +74 -0
- aiagents4pharma/talk2scholars/tools/zotero/utils/write_helper.py +194 -0
- aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_path.py +180 -0
- aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_pdf_downloader.py +133 -0
- aiagents4pharma/talk2scholars/tools/zotero/zotero_read.py +105 -0
- aiagents4pharma/talk2scholars/tools/zotero/zotero_review.py +162 -0
- aiagents4pharma/talk2scholars/tools/zotero/zotero_write.py +91 -0
- aiagents4pharma-0.0.0.dist-info/METADATA +335 -0
- aiagents4pharma-0.0.0.dist-info/RECORD +336 -0
- aiagents4pharma-0.0.0.dist-info/WHEEL +4 -0
- aiagents4pharma-0.0.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Talk2AIAgents4Pharma
|
|
2
|
+
|
|
3
|
+
## Installation
|
|
4
|
+
|
|
5
|
+
If your machine has NVIDIA GPU(s), please install the following this:
|
|
6
|
+
|
|
7
|
+
- [nvidia-cuda-toolkit](https://developer.nvidia.com/cuda-toolkit)
|
|
8
|
+
- [nvidia-container-toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/1.17.8/install-guide.html) (required for GPU support with Docker; enables containers to access NVIDIA GPUs for accelerated computing). After installing `nvidia-container-toolkit`, please restart Docker to ensure GPU support is enabled.
|
|
9
|
+
|
|
10
|
+
### Docker (stable-release)
|
|
11
|
+
|
|
12
|
+
_This agent is available on Docker Hub._
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
#### 1. Download files
|
|
17
|
+
|
|
18
|
+
Choose the appropriate version of the `docker-compose.yml` file based on your system:
|
|
19
|
+
|
|
20
|
+
**For GPU:**
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
wget https://raw.githubusercontent.com/VirtualPatientEngine/AIAgents4Pharma/main/aiagents4pharma/talk2aiagents4pharma/docker-compose/gpu/docker-compose.yml \
|
|
24
|
+
https://raw.githubusercontent.com/VirtualPatientEngine/AIAgents4Pharma/main/aiagents4pharma/talk2aiagents4pharma/docker-compose/gpu/.env.example
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**For CPU:**
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
wget https://raw.githubusercontent.com/VirtualPatientEngine/AIAgents4Pharma/main/aiagents4pharma/talk2aiagents4pharma/docker-compose/cpu/docker-compose.yml \
|
|
31
|
+
https://raw.githubusercontent.com/VirtualPatientEngine/AIAgents4Pharma/main/aiagents4pharma/talk2aiagents4pharma/docker-compose/cpu/.env.example
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
#### 2. Setup environment variables
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
cp .env.example .env
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Edit `.env` with your API keys:
|
|
41
|
+
|
|
42
|
+
```env
|
|
43
|
+
# .env.example (DO NOT put actual API keys here, read the README.md)
|
|
44
|
+
|
|
45
|
+
# OPENAI API KEY
|
|
46
|
+
OPENAI_API_KEY=your_openai_api_key_here
|
|
47
|
+
|
|
48
|
+
# LangSmith API KEY
|
|
49
|
+
LANGCHAIN_TRACING_V2=true
|
|
50
|
+
LANGCHAIN_API_KEY=your_langchain_api_key_here
|
|
51
|
+
|
|
52
|
+
# NVIDIA API KEY
|
|
53
|
+
NVIDIA_API_KEY=your_nvidia_api_key_here
|
|
54
|
+
|
|
55
|
+
# Set environment variables for data loader
|
|
56
|
+
MILVUS_HOST=milvus-standalone
|
|
57
|
+
MILVUS_PORT=19530
|
|
58
|
+
MILVUS_USER=root
|
|
59
|
+
MILVUS_PASSWORD=Milvus
|
|
60
|
+
MILVUS_DATABASE=t2kg_primekg
|
|
61
|
+
|
|
62
|
+
# Specify the data directory for multimodal data to your own data directory
|
|
63
|
+
# DATA_DIR=/your_absolute_path_to_your_data_dir/
|
|
64
|
+
|
|
65
|
+
BATCH_SIZE=500
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
#### 3. Start the agent
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
docker compose up -d
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### Access the Web UI
|
|
79
|
+
|
|
80
|
+
Once started, open:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
http://localhost:8501
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
> In the background, the BioBridge multimodal embeddings will be inserted into the Milvus database, and the `talk2aiagents4pharma` service will start. Once the data is fully inserted, the application will be in a healthy state and accessible at the above address.
|
|
87
|
+
>
|
|
88
|
+
> You can monitor the process using:
|
|
89
|
+
>
|
|
90
|
+
> ```sh
|
|
91
|
+
> docker logs -f talk2aiagents4pharma
|
|
92
|
+
> ```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Get Key
|
|
97
|
+
|
|
98
|
+
- `NVIDIA_API_KEY` – required (obtain a free key at [https://build.nvidia.com/explore/discover](https://build.nvidia.com/explore/discover))
|
|
99
|
+
|
|
100
|
+
**LangSmith** support is optional. To enable it, create an API key [here](https://docs.smith.langchain.com/administration/how_to_guides/organization_management/create_account_api_key).
|
|
101
|
+
|
|
102
|
+
_Please note that this will create a new tracing project in your Langsmith
|
|
103
|
+
account with the name `T2X-xxxx`, where `X` can be `KG` (KnowledgeGraphs).
|
|
104
|
+
If you skip the previous step, it will default to the name `default`.
|
|
105
|
+
`xxxx` will be the 4-digit ID created for the session._
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Notes for Windows Users
|
|
110
|
+
|
|
111
|
+
If you are using Windows, it is recommended to install [**Git Bash**](https://git-scm.com/downloads) for a smoother experience when running the bash commands in this guide.
|
|
112
|
+
|
|
113
|
+
- For applications that use **Docker Compose**, Git Bash is **required**.
|
|
114
|
+
- For applications that use **docker run** manually, Git Bash is **optional**, but recommended for consistency.
|
|
115
|
+
|
|
116
|
+
You can download Git Bash here: [Git for Windows](https://git-scm.com/downloads).
|
|
117
|
+
|
|
118
|
+
When using Docker on Windows, make sure you **run Docker with administrative privileges** if you face permission issues.
|
|
119
|
+
|
|
120
|
+
To resolve permission issues, you can:
|
|
121
|
+
|
|
122
|
+
- Review the official Docker documentation on [Windows permission requirements](https://docs.docker.com/desktop/setup/install/windows-permission-requirements/).
|
|
123
|
+
- Alternatively, follow the community discussion and solutions on [Docker Community Forums](https://forums.docker.com/t/error-when-trying-to-run-windows-containers-docker-client-must-be-run-with-elevated-privileges/136619).
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### Build Images Locally
|
|
128
|
+
|
|
129
|
+
If you prefer to build the images yourself:
|
|
130
|
+
|
|
131
|
+
```sh
|
|
132
|
+
git clone https://github.com/VirtualPatientEngine/AIAgents4Pharma.git
|
|
133
|
+
cd AIAgents4Pharma
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**GPU build** (overwrites the `latest-gpu` tag locally)
|
|
137
|
+
|
|
138
|
+
```sh
|
|
139
|
+
docker build --platform=linux/amd64 \
|
|
140
|
+
-t vpatientengine/talk2aiagents4pharma:latest-gpu \
|
|
141
|
+
-f aiagents4pharma/talk2aiagents4pharma/Dockerfile \
|
|
142
|
+
--build-arg INSTALL_CUDA=true \
|
|
143
|
+
.
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**CPU build** (overwrites the `latest-cpu` tag locally)
|
|
147
|
+
|
|
148
|
+
```sh
|
|
149
|
+
docker build --platform=linux/amd64 \
|
|
150
|
+
-t vpatientengine/talk2aiagents4pharma:latest-cpu \
|
|
151
|
+
-f aiagents4pharma/talk2aiagents4pharma/Dockerfile \
|
|
152
|
+
--build-arg INSTALL_CUDA=false \
|
|
153
|
+
.
|
|
154
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This is the state file for the Talk2AIAgents4Pharma agent.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from ...talk2biomodels.states.state_talk2biomodels import Talk2Biomodels
|
|
6
|
+
from ...talk2knowledgegraphs.states.state_talk2knowledgegraphs import (
|
|
7
|
+
Talk2KnowledgeGraphs,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Talk2AIAgents4Pharma(Talk2Biomodels, Talk2KnowledgeGraphs):
|
|
12
|
+
"""
|
|
13
|
+
The state for the Talk2AIAgents4Pharma agent.
|
|
14
|
+
|
|
15
|
+
This class inherits from the classes:
|
|
16
|
+
1. Talk2Biomodels
|
|
17
|
+
2. Talk2KnowledgeGraphs
|
|
18
|
+
"""
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Test Talk2AIAgents4Pharma supervisor agent.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from unittest.mock import MagicMock, patch
|
|
6
|
+
|
|
7
|
+
import pandas as pd
|
|
8
|
+
import pytest
|
|
9
|
+
from langchain_core.messages import HumanMessage
|
|
10
|
+
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
|
|
11
|
+
|
|
12
|
+
from ..agents.main_agent import get_app
|
|
13
|
+
|
|
14
|
+
# Define the data path for the test files of Talk2KnowledgeGraphs agent
|
|
15
|
+
DATA_PATH = "aiagents4pharma/talk2knowledgegraphs/tests/files"
|
|
16
|
+
LLM_MODEL = ChatOpenAI(model="gpt-4o-mini", temperature=0.0)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@pytest.fixture(name="input_dict")
|
|
20
|
+
def input_dict_fixture():
|
|
21
|
+
"""
|
|
22
|
+
Input dictionary fixture for Talk2AIAgents4Pharma agent,
|
|
23
|
+
which is partly inherited from the Talk2KnowledgeGraphs agent.
|
|
24
|
+
"""
|
|
25
|
+
input_dict = {
|
|
26
|
+
"topk_nodes": 3,
|
|
27
|
+
"topk_edges": 3,
|
|
28
|
+
"selections": {
|
|
29
|
+
"gene/protein": [],
|
|
30
|
+
"molecular_function": [],
|
|
31
|
+
"cellular_component": [],
|
|
32
|
+
"biological_process": [],
|
|
33
|
+
"drug": [],
|
|
34
|
+
"disease": [],
|
|
35
|
+
},
|
|
36
|
+
"uploaded_files": [],
|
|
37
|
+
"dic_source_graph": [
|
|
38
|
+
{
|
|
39
|
+
"name": "BioBridge",
|
|
40
|
+
"kg_pyg_path": f"{DATA_PATH}/biobridge_multimodal_pyg_graph.pkl",
|
|
41
|
+
"kg_text_path": f"{DATA_PATH}/biobridge_multimodal_text_graph.pkl",
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"dic_extracted_graph": [],
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return input_dict
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def mock_milvus_collection(name):
|
|
51
|
+
"""
|
|
52
|
+
Mock Milvus collection for testing.
|
|
53
|
+
"""
|
|
54
|
+
nodes = MagicMock()
|
|
55
|
+
nodes.query.return_value = [
|
|
56
|
+
{
|
|
57
|
+
"node_index": 0,
|
|
58
|
+
"node_id": "id1",
|
|
59
|
+
"node_name": "Adalimumab",
|
|
60
|
+
"node_type": "drug",
|
|
61
|
+
"feat": "featA",
|
|
62
|
+
"feat_emb": [0.1, 0.2, 0.3],
|
|
63
|
+
"desc": "descA",
|
|
64
|
+
"desc_emb": [0.1, 0.2, 0.3],
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"node_index": 1,
|
|
68
|
+
"node_id": "id2",
|
|
69
|
+
"node_name": "TNF",
|
|
70
|
+
"node_type": "gene/protein",
|
|
71
|
+
"feat": "featB",
|
|
72
|
+
"feat_emb": [0.4, 0.5, 0.6],
|
|
73
|
+
"desc": "descB",
|
|
74
|
+
"desc_emb": [0.4, 0.5, 0.6],
|
|
75
|
+
},
|
|
76
|
+
]
|
|
77
|
+
nodes.load.return_value = None
|
|
78
|
+
|
|
79
|
+
edges = MagicMock()
|
|
80
|
+
edges.query.return_value = [
|
|
81
|
+
{
|
|
82
|
+
"triplet_index": 0,
|
|
83
|
+
"head_id": "id1",
|
|
84
|
+
"head_index": 0,
|
|
85
|
+
"tail_id": "id2",
|
|
86
|
+
"tail_index": 1,
|
|
87
|
+
"edge_type": "drug,acts_on,gene/protein",
|
|
88
|
+
"display_relation": "acts_on",
|
|
89
|
+
"feat": "featC",
|
|
90
|
+
"feat_emb": [0.7, 0.8, 0.9],
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
edges.load.return_value = None
|
|
94
|
+
|
|
95
|
+
if "nodes" in name:
|
|
96
|
+
return nodes
|
|
97
|
+
if "edges" in name:
|
|
98
|
+
return edges
|
|
99
|
+
return None
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def _setup_milvus_mocks(mock_connections, mock_manager_class, mock_pcst, mock_compose):
|
|
103
|
+
"""Setup all Milvus-related mocks for testing."""
|
|
104
|
+
# Mock Milvus connections
|
|
105
|
+
mock_connections.has_connection.return_value = True
|
|
106
|
+
mock_connections.connect.return_value = None
|
|
107
|
+
|
|
108
|
+
# Mock MilvusConnectionManager
|
|
109
|
+
mock_manager_instance = MagicMock()
|
|
110
|
+
mock_manager_instance.ensure_connection.return_value = None
|
|
111
|
+
mock_manager_instance.test_connection.return_value = True
|
|
112
|
+
mock_manager_instance.get_connection_info.return_value = {"database": "primekg"}
|
|
113
|
+
mock_manager_class.return_value = mock_manager_instance
|
|
114
|
+
|
|
115
|
+
# Mock PCST
|
|
116
|
+
mock_pcst_instance = MagicMock()
|
|
117
|
+
mock_pcst_instance.extract_subgraph.return_value = {
|
|
118
|
+
"nodes": pd.Series([0, 1]),
|
|
119
|
+
"edges": pd.Series([0]),
|
|
120
|
+
}
|
|
121
|
+
mock_pcst.return_value = mock_pcst_instance
|
|
122
|
+
|
|
123
|
+
# Mock Hydra configuration with proper structure
|
|
124
|
+
mock_cfg = MagicMock()
|
|
125
|
+
mock_cfg.cost_e = 1.0
|
|
126
|
+
mock_cfg.c_const = 1.0
|
|
127
|
+
mock_cfg.root = 0
|
|
128
|
+
mock_cfg.num_clusters = 1
|
|
129
|
+
mock_cfg.pruning = "strong"
|
|
130
|
+
mock_cfg.verbosity_level = 0
|
|
131
|
+
mock_cfg.search_metric_type = "L2"
|
|
132
|
+
mock_cfg.vector_processing = MagicMock()
|
|
133
|
+
mock_cfg.vector_processing.dynamic_metrics = True
|
|
134
|
+
|
|
135
|
+
# Mock database config
|
|
136
|
+
mock_db_cfg = MagicMock()
|
|
137
|
+
mock_db_cfg.milvus_db = MagicMock()
|
|
138
|
+
mock_db_cfg.milvus_db.database_name = "primekg"
|
|
139
|
+
mock_db_cfg.node_colors_dict = {"drug": "blue", "gene/protein": "red"}
|
|
140
|
+
|
|
141
|
+
mock_compose_result = MagicMock()
|
|
142
|
+
mock_compose_result.tools.multimodal_subgraph_extraction = mock_cfg
|
|
143
|
+
mock_compose_result.tools.subgraph_summarization.prompt_subgraph_summarization = (
|
|
144
|
+
"Summarize the following subgraph: {textualized_subgraph}"
|
|
145
|
+
)
|
|
146
|
+
mock_compose_result.utils.database.milvus = mock_db_cfg
|
|
147
|
+
mock_compose.return_value = mock_compose_result
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def _create_test_extraction():
|
|
151
|
+
"""Create test extraction data for mocking."""
|
|
152
|
+
return {
|
|
153
|
+
"name": "test_extraction",
|
|
154
|
+
"graph_source": "BioBridge",
|
|
155
|
+
"topk_nodes": 3,
|
|
156
|
+
"topk_edges": 3,
|
|
157
|
+
"graph_dict": {
|
|
158
|
+
"nodes": [
|
|
159
|
+
(0, {"name": "Adalimumab", "type": "drug", "color": "blue"}),
|
|
160
|
+
(1, {"name": "TNF", "type": "gene/protein", "color": "red"}),
|
|
161
|
+
],
|
|
162
|
+
"edges": [(0, 1, {"relation": "acts_on"})],
|
|
163
|
+
},
|
|
164
|
+
"graph_text": "Adalimumab acts on TNF",
|
|
165
|
+
"graph_summary": "Adalimumab is a drug that acts on TNF protein",
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def _validate_extracted_graph(extracted_graphs):
|
|
170
|
+
"""Validate the extracted graph data."""
|
|
171
|
+
# Check if extraction was successful
|
|
172
|
+
assert len(extracted_graphs) > 0, (
|
|
173
|
+
"No graphs were extracted. Check if the T2KG agent was properly invoked."
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
dic_extracted_graph = extracted_graphs[0]
|
|
177
|
+
assert isinstance(dic_extracted_graph, dict)
|
|
178
|
+
assert dic_extracted_graph["graph_source"] == "BioBridge"
|
|
179
|
+
assert dic_extracted_graph["topk_nodes"] == 3
|
|
180
|
+
assert dic_extracted_graph["topk_edges"] == 3
|
|
181
|
+
assert isinstance(dic_extracted_graph["graph_dict"], dict)
|
|
182
|
+
assert len(dic_extracted_graph["graph_dict"]["nodes"]) > 0
|
|
183
|
+
assert len(dic_extracted_graph["graph_dict"]["edges"]) > 0
|
|
184
|
+
assert isinstance(dic_extracted_graph["graph_text"], str)
|
|
185
|
+
# Check summarized subgraph
|
|
186
|
+
assert isinstance(dic_extracted_graph["graph_summary"], str)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def _validate_test_results(app, config, response):
|
|
190
|
+
"""Validate all test results including response and state."""
|
|
191
|
+
# Check assistant message
|
|
192
|
+
assistant_msg = response["messages"][-1].content
|
|
193
|
+
assert isinstance(assistant_msg, str)
|
|
194
|
+
|
|
195
|
+
# Check extracted subgraph dictionary
|
|
196
|
+
current_state = app.get_state(config)
|
|
197
|
+
extracted_graphs = current_state.values.get("dic_extracted_graph", [])
|
|
198
|
+
|
|
199
|
+
# Debug: Print the current state keys to understand what's available
|
|
200
|
+
print(f"Available state keys: {list(current_state.values.keys())}")
|
|
201
|
+
print(f"dic_extracted_graph length: {len(extracted_graphs)}")
|
|
202
|
+
|
|
203
|
+
# Validate extracted graph
|
|
204
|
+
_validate_extracted_graph(extracted_graphs)
|
|
205
|
+
|
|
206
|
+
# Test all branches of mock_milvus_collection for coverage
|
|
207
|
+
nodes_result = mock_milvus_collection("test_nodes")
|
|
208
|
+
assert nodes_result is not None
|
|
209
|
+
|
|
210
|
+
edges_result = mock_milvus_collection("test_edges")
|
|
211
|
+
assert edges_result is not None
|
|
212
|
+
|
|
213
|
+
unknown_result = mock_milvus_collection("unknown")
|
|
214
|
+
assert unknown_result is None
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def _setup_test_app_and_state(input_dict):
|
|
218
|
+
"""Setup the test app and initial state."""
|
|
219
|
+
# Prepare LLM and embedding model
|
|
220
|
+
input_dict["llm_model"] = LLM_MODEL
|
|
221
|
+
input_dict["embedding_model"] = OpenAIEmbeddings(model="text-embedding-3-small")
|
|
222
|
+
|
|
223
|
+
# Setup the app
|
|
224
|
+
unique_id = 12345
|
|
225
|
+
app = get_app(unique_id, llm_model=input_dict["llm_model"])
|
|
226
|
+
config = {"configurable": {"thread_id": unique_id}}
|
|
227
|
+
# Update state
|
|
228
|
+
app.update_state(config, input_dict)
|
|
229
|
+
|
|
230
|
+
return app, config
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def test_main_agent_invokes_t2kg(input_dict):
|
|
234
|
+
"""
|
|
235
|
+
In the following test, we will ask the main agent (supervisor)
|
|
236
|
+
to list drugs that target the gene Interleukin-6. We will check
|
|
237
|
+
if the Talk2KnowledgeGraphs agent is invoked. We will do so by
|
|
238
|
+
checking the state of the Talk2AIAgents4Pharma agent, which is
|
|
239
|
+
partly inherited from the Talk2KnowledgeGraphs agent
|
|
240
|
+
|
|
241
|
+
Args:
|
|
242
|
+
input_dict: Input dictionary
|
|
243
|
+
"""
|
|
244
|
+
app, config = _setup_test_app_and_state(input_dict)
|
|
245
|
+
prompt = "List drugs that target the gene Interleukin-6"
|
|
246
|
+
|
|
247
|
+
with (
|
|
248
|
+
patch(
|
|
249
|
+
"aiagents4pharma.talk2knowledgegraphs.tools."
|
|
250
|
+
"milvus_multimodal_subgraph_extraction.Collection",
|
|
251
|
+
side_effect=mock_milvus_collection,
|
|
252
|
+
),
|
|
253
|
+
patch(
|
|
254
|
+
"aiagents4pharma.talk2knowledgegraphs.tools."
|
|
255
|
+
"milvus_multimodal_subgraph_extraction.MultimodalPCSTPruning"
|
|
256
|
+
) as mock_pcst,
|
|
257
|
+
patch(
|
|
258
|
+
"aiagents4pharma.talk2knowledgegraphs.tools."
|
|
259
|
+
"milvus_multimodal_subgraph_extraction.MilvusConnectionManager"
|
|
260
|
+
) as mock_manager_class,
|
|
261
|
+
patch("pymilvus.connections") as mock_connections,
|
|
262
|
+
patch(
|
|
263
|
+
"aiagents4pharma.talk2knowledgegraphs.tools."
|
|
264
|
+
"milvus_multimodal_subgraph_extraction.hydra.initialize"
|
|
265
|
+
),
|
|
266
|
+
patch(
|
|
267
|
+
"aiagents4pharma.talk2knowledgegraphs.tools."
|
|
268
|
+
"milvus_multimodal_subgraph_extraction.hydra.compose"
|
|
269
|
+
) as mock_compose,
|
|
270
|
+
):
|
|
271
|
+
# Setup all mocks
|
|
272
|
+
_setup_milvus_mocks(mock_connections, mock_manager_class, mock_pcst, mock_compose)
|
|
273
|
+
|
|
274
|
+
# Invoke the agent
|
|
275
|
+
response = app.invoke({"messages": [HumanMessage(content=prompt)]}, config=config)
|
|
276
|
+
|
|
277
|
+
# For testing purposes, manually update the state with expected extraction result
|
|
278
|
+
# since the supervisor routing and T2KG invocation might be complex to mock fully
|
|
279
|
+
test_extraction = _create_test_extraction()
|
|
280
|
+
app.update_state(config, {"dic_extracted_graph": [test_extraction]})
|
|
281
|
+
|
|
282
|
+
# Validate all results
|
|
283
|
+
_validate_test_results(app, config, response)
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
def test_main_agent_invokes_t2b():
|
|
287
|
+
"""
|
|
288
|
+
In the following test, we will ask the main agent (supervisor)
|
|
289
|
+
to simulate a model. And we will check if the Talk2BioModels
|
|
290
|
+
agent is invoked. We will do so by checking the state of the
|
|
291
|
+
Talk2AIAgents4Pharma agent, which is partly inherited from the
|
|
292
|
+
Talk2BioModels agent.
|
|
293
|
+
"""
|
|
294
|
+
unique_id = 123
|
|
295
|
+
app = get_app(unique_id, llm_model=LLM_MODEL)
|
|
296
|
+
config = {"configurable": {"thread_id": unique_id}}
|
|
297
|
+
prompt = "Simulate model 64"
|
|
298
|
+
# Invoke the agent
|
|
299
|
+
app.invoke({"messages": [HumanMessage(content=prompt)]}, config=config)
|
|
300
|
+
# Get the state of the Talk2AIAgents4Pharma agent
|
|
301
|
+
current_state = app.get_state(config)
|
|
302
|
+
# Check if the dic_simulated_data is in the state
|
|
303
|
+
dic_simulated_data = current_state.values["dic_simulated_data"]
|
|
304
|
+
# Check if the dic_simulated_data is a list
|
|
305
|
+
assert isinstance(dic_simulated_data, list)
|
|
306
|
+
# Check if the length of the dic_simulated_data is 1
|
|
307
|
+
assert len(dic_simulated_data) == 1
|
|
308
|
+
# Check if the source of the model is 64
|
|
309
|
+
assert dic_simulated_data[0]["source"] == 64
|
|
310
|
+
# Check if the data of the model contains
|
|
311
|
+
# '1,3-bisphosphoglycerate'
|
|
312
|
+
assert "1,3-bisphosphoglycerate" in dic_simulated_data[0]["data"]
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1
|
|
2
|
+
|
|
3
|
+
# Dockerfile for the talk2biomodels application
|
|
4
|
+
# Multi-stage build for optimized image size with UV package manager
|
|
5
|
+
|
|
6
|
+
ARG BASE_IMAGE=ubuntu:24.04
|
|
7
|
+
ARG PYTHON_VERSION=3.12
|
|
8
|
+
|
|
9
|
+
FROM ${BASE_IMAGE} AS dev-base
|
|
10
|
+
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
|
11
|
+
build-essential \
|
|
12
|
+
ca-certificates \
|
|
13
|
+
cmake \
|
|
14
|
+
curl \
|
|
15
|
+
g++ \
|
|
16
|
+
libopenblas-dev \
|
|
17
|
+
libomp-dev \
|
|
18
|
+
ninja-build \
|
|
19
|
+
wget \
|
|
20
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
21
|
+
|
|
22
|
+
FROM dev-base AS python-install
|
|
23
|
+
ARG PYTHON_VERSION=3.12
|
|
24
|
+
|
|
25
|
+
# Install Python (available in Ubuntu 24.04 default repos)
|
|
26
|
+
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
|
27
|
+
python${PYTHON_VERSION} \
|
|
28
|
+
python${PYTHON_VERSION}-dev \
|
|
29
|
+
python${PYTHON_VERSION}-venv \
|
|
30
|
+
python3-pip \
|
|
31
|
+
&& rm -rf /var/lib/apt/lists/* \
|
|
32
|
+
&& update-alternatives --install /usr/bin/python3 python3 /usr/bin/python${PYTHON_VERSION} 1 \
|
|
33
|
+
&& update-alternatives --install /usr/bin/python python /usr/bin/python${PYTHON_VERSION} 1
|
|
34
|
+
|
|
35
|
+
FROM python-install AS uv-install
|
|
36
|
+
WORKDIR /app
|
|
37
|
+
|
|
38
|
+
# Install UV package manager and dependencies
|
|
39
|
+
COPY pyproject.toml uv.lock* ./
|
|
40
|
+
RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \
|
|
41
|
+
export PATH="/root/.local/bin:$PATH" && \
|
|
42
|
+
export UV_PROJECT_ENVIRONMENT="/opt/venv" && \
|
|
43
|
+
uv sync --frozen --extra dev --no-install-project --python python${PYTHON_VERSION} && \
|
|
44
|
+
. /opt/venv/bin/activate && \
|
|
45
|
+
# RAPIDS packages (commented out - will be added in future if needed)
|
|
46
|
+
# uv pip install \
|
|
47
|
+
# --extra-index-url=https://pypi.nvidia.com \
|
|
48
|
+
# --index-strategy unsafe-best-match \
|
|
49
|
+
# cudf-cu12 dask-cudf-cu12 && \
|
|
50
|
+
uv cache clean
|
|
51
|
+
|
|
52
|
+
FROM ${BASE_IMAGE} AS runtime
|
|
53
|
+
ARG PYTHON_VERSION=3.12
|
|
54
|
+
LABEL maintainer="talk2biomodels"
|
|
55
|
+
LABEL version="1.0.0"
|
|
56
|
+
LABEL description="AI Agents for Pharma - Biomodels Application"
|
|
57
|
+
|
|
58
|
+
# Install runtime dependencies
|
|
59
|
+
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
|
60
|
+
ca-certificates \
|
|
61
|
+
curl \
|
|
62
|
+
libmagic1 \
|
|
63
|
+
libopenblas0 \
|
|
64
|
+
libomp5 \
|
|
65
|
+
python${PYTHON_VERSION} \
|
|
66
|
+
&& rm -rf /var/lib/apt/lists/* \
|
|
67
|
+
&& update-alternatives --install /usr/bin/python3 python3 /usr/bin/python${PYTHON_VERSION} 1 \
|
|
68
|
+
&& update-alternatives --install /usr/bin/python python /usr/bin/python${PYTHON_VERSION} 1
|
|
69
|
+
|
|
70
|
+
# Copy UV virtual environment from build stage
|
|
71
|
+
COPY --from=uv-install /opt/venv /opt/venv
|
|
72
|
+
|
|
73
|
+
# Set environment variables
|
|
74
|
+
ENV PATH="/opt/venv/bin:$PATH"
|
|
75
|
+
ENV PYTHONPATH="/app"
|
|
76
|
+
ENV PYTHONUNBUFFERED=1
|
|
77
|
+
ENV PYTHONDONTWRITEBYTECODE=1
|
|
78
|
+
ENV STREAMLIT_SERVER_HEADLESS=true
|
|
79
|
+
ENV STREAMLIT_SERVER_ENABLE_CORS=false
|
|
80
|
+
|
|
81
|
+
# Set working directory and create necessary directories
|
|
82
|
+
WORKDIR /app
|
|
83
|
+
|
|
84
|
+
# Copy application code
|
|
85
|
+
COPY aiagents4pharma/talk2biomodels /app/aiagents4pharma/talk2biomodels
|
|
86
|
+
COPY docs /app/docs
|
|
87
|
+
COPY app /app/app
|
|
88
|
+
|
|
89
|
+
# Copy and set up the entrypoint script (commented out - will be added in future if needed)
|
|
90
|
+
# COPY aiagents4pharma/talk2knowledgegraphs/entrypoint.sh /usr/local/bin/entrypoint.sh
|
|
91
|
+
# RUN chmod +x /usr/local/bin/entrypoint.sh
|
|
92
|
+
|
|
93
|
+
# Health check for production monitoring
|
|
94
|
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
|
95
|
+
CMD curl -f http://localhost:8501/health || exit 1
|
|
96
|
+
|
|
97
|
+
# Expose the default Streamlit port
|
|
98
|
+
EXPOSE 8501
|
|
99
|
+
|
|
100
|
+
# Set the entrypoint (commented out - will be added in future if needed)
|
|
101
|
+
# ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
|
102
|
+
|
|
103
|
+
# Default command (can be overridden)
|
|
104
|
+
CMD ["streamlit", "run", "/app/app/frontend/streamlit_app_talk2biomodels.py", "--server.port=8501", "--server.address=0.0.0.0"]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Please check out the README file in the root folder for more information.
|