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.
- aiagents4pharma/__init__.py +2 -2
- aiagents4pharma/talk2aiagents4pharma/.dockerignore +13 -0
- aiagents4pharma/talk2aiagents4pharma/Dockerfile +105 -0
- aiagents4pharma/talk2aiagents4pharma/README.md +1 -0
- aiagents4pharma/talk2aiagents4pharma/__init__.py +4 -5
- aiagents4pharma/talk2aiagents4pharma/agents/__init__.py +3 -2
- aiagents4pharma/talk2aiagents4pharma/agents/main_agent.py +24 -23
- aiagents4pharma/talk2aiagents4pharma/configs/__init__.py +2 -2
- aiagents4pharma/talk2aiagents4pharma/configs/agents/__init__.py +2 -2
- aiagents4pharma/talk2aiagents4pharma/configs/agents/main_agent/default.yaml +2 -2
- aiagents4pharma/talk2aiagents4pharma/configs/config.yaml +1 -1
- 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 +127 -0
- aiagents4pharma/talk2aiagents4pharma/states/__init__.py +3 -2
- aiagents4pharma/talk2aiagents4pharma/states/state_talk2aiagents4pharma.py +5 -3
- aiagents4pharma/talk2aiagents4pharma/tests/__init__.py +2 -2
- aiagents4pharma/talk2aiagents4pharma/tests/test_main_agent.py +72 -50
- aiagents4pharma/talk2biomodels/.dockerignore +13 -0
- aiagents4pharma/talk2biomodels/Dockerfile +104 -0
- aiagents4pharma/talk2biomodels/README.md +1 -0
- aiagents4pharma/talk2biomodels/__init__.py +4 -8
- aiagents4pharma/talk2biomodels/agents/__init__.py +3 -2
- aiagents4pharma/talk2biomodels/agents/t2b_agent.py +47 -42
- aiagents4pharma/talk2biomodels/api/__init__.py +4 -5
- aiagents4pharma/talk2biomodels/api/kegg.py +14 -10
- aiagents4pharma/talk2biomodels/api/ols.py +13 -10
- aiagents4pharma/talk2biomodels/api/uniprot.py +7 -6
- aiagents4pharma/talk2biomodels/configs/__init__.py +3 -4
- aiagents4pharma/talk2biomodels/configs/agents/__init__.py +2 -2
- aiagents4pharma/talk2biomodels/configs/agents/t2b_agent/__init__.py +2 -2
- aiagents4pharma/talk2biomodels/configs/agents/t2b_agent/default.yaml +1 -1
- aiagents4pharma/talk2biomodels/configs/config.yaml +1 -1
- aiagents4pharma/talk2biomodels/configs/tools/__init__.py +4 -5
- aiagents4pharma/talk2biomodels/configs/tools/ask_question/__init__.py +2 -2
- aiagents4pharma/talk2biomodels/configs/tools/ask_question/default.yaml +1 -2
- aiagents4pharma/talk2biomodels/configs/tools/custom_plotter/__init__.py +2 -2
- aiagents4pharma/talk2biomodels/configs/tools/custom_plotter/default.yaml +1 -1
- aiagents4pharma/talk2biomodels/configs/tools/get_annotation/__init__.py +2 -2
- aiagents4pharma/talk2biomodels/configs/tools/get_annotation/default.yaml +1 -1
- aiagents4pharma/talk2biomodels/install.md +63 -0
- aiagents4pharma/talk2biomodels/models/__init__.py +4 -4
- aiagents4pharma/talk2biomodels/models/basico_model.py +36 -28
- aiagents4pharma/talk2biomodels/models/sys_bio_model.py +13 -10
- aiagents4pharma/talk2biomodels/states/__init__.py +3 -2
- aiagents4pharma/talk2biomodels/states/state_talk2biomodels.py +12 -8
- aiagents4pharma/talk2biomodels/tests/BIOMD0000000449_url.xml +1585 -0
- aiagents4pharma/talk2biomodels/tests/__init__.py +2 -2
- aiagents4pharma/talk2biomodels/tests/article_on_model_537.pdf +0 -0
- aiagents4pharma/talk2biomodels/tests/test_api.py +18 -14
- aiagents4pharma/talk2biomodels/tests/test_ask_question.py +8 -9
- aiagents4pharma/talk2biomodels/tests/test_basico_model.py +15 -9
- aiagents4pharma/talk2biomodels/tests/test_get_annotation.py +54 -55
- aiagents4pharma/talk2biomodels/tests/test_getmodelinfo.py +28 -27
- aiagents4pharma/talk2biomodels/tests/test_integration.py +21 -33
- aiagents4pharma/talk2biomodels/tests/test_load_biomodel.py +14 -11
- aiagents4pharma/talk2biomodels/tests/test_param_scan.py +21 -20
- aiagents4pharma/talk2biomodels/tests/test_query_article.py +129 -29
- aiagents4pharma/talk2biomodels/tests/test_search_models.py +9 -13
- aiagents4pharma/talk2biomodels/tests/test_simulate_model.py +16 -15
- aiagents4pharma/talk2biomodels/tests/test_steady_state.py +12 -22
- aiagents4pharma/talk2biomodels/tests/test_sys_bio_model.py +33 -29
- aiagents4pharma/talk2biomodels/tools/__init__.py +15 -12
- aiagents4pharma/talk2biomodels/tools/ask_question.py +42 -32
- aiagents4pharma/talk2biomodels/tools/custom_plotter.py +51 -43
- aiagents4pharma/talk2biomodels/tools/get_annotation.py +99 -75
- aiagents4pharma/talk2biomodels/tools/get_modelinfo.py +57 -51
- aiagents4pharma/talk2biomodels/tools/load_arguments.py +52 -32
- aiagents4pharma/talk2biomodels/tools/load_biomodel.py +8 -2
- aiagents4pharma/talk2biomodels/tools/parameter_scan.py +107 -90
- aiagents4pharma/talk2biomodels/tools/query_article.py +14 -13
- aiagents4pharma/talk2biomodels/tools/search_models.py +37 -26
- aiagents4pharma/talk2biomodels/tools/simulate_model.py +47 -37
- aiagents4pharma/talk2biomodels/tools/steady_state.py +76 -58
- aiagents4pharma/talk2biomodels/tools/utils.py +4 -3
- aiagents4pharma/talk2cells/README.md +1 -0
- aiagents4pharma/talk2cells/__init__.py +4 -5
- aiagents4pharma/talk2cells/agents/__init__.py +3 -2
- aiagents4pharma/talk2cells/agents/scp_agent.py +21 -19
- aiagents4pharma/talk2cells/states/__init__.py +3 -2
- aiagents4pharma/talk2cells/states/state_talk2cells.py +4 -2
- aiagents4pharma/talk2cells/tests/scp_agent/test_scp_agent.py +8 -9
- aiagents4pharma/talk2cells/tools/__init__.py +3 -2
- aiagents4pharma/talk2cells/tools/scp_agent/__init__.py +4 -4
- aiagents4pharma/talk2cells/tools/scp_agent/display_studies.py +5 -3
- aiagents4pharma/talk2cells/tools/scp_agent/search_studies.py +21 -22
- aiagents4pharma/talk2knowledgegraphs/.dockerignore +13 -0
- aiagents4pharma/talk2knowledgegraphs/Dockerfile +103 -0
- aiagents4pharma/talk2knowledgegraphs/README.md +1 -0
- aiagents4pharma/talk2knowledgegraphs/__init__.py +4 -7
- aiagents4pharma/talk2knowledgegraphs/agents/__init__.py +3 -2
- aiagents4pharma/talk2knowledgegraphs/agents/t2kg_agent.py +40 -30
- aiagents4pharma/talk2knowledgegraphs/configs/__init__.py +3 -6
- aiagents4pharma/talk2knowledgegraphs/configs/agents/t2kg_agent/__init__.py +2 -2
- aiagents4pharma/talk2knowledgegraphs/configs/agents/t2kg_agent/default.yaml +8 -8
- aiagents4pharma/talk2knowledgegraphs/configs/app/__init__.py +3 -2
- aiagents4pharma/talk2knowledgegraphs/configs/app/frontend/__init__.py +2 -2
- aiagents4pharma/talk2knowledgegraphs/configs/app/frontend/default.yaml +1 -1
- aiagents4pharma/talk2knowledgegraphs/configs/config.yaml +1 -1
- aiagents4pharma/talk2knowledgegraphs/configs/tools/__init__.py +4 -5
- aiagents4pharma/talk2knowledgegraphs/configs/tools/graphrag_reasoning/__init__.py +2 -2
- aiagents4pharma/talk2knowledgegraphs/configs/tools/graphrag_reasoning/default.yaml +1 -1
- aiagents4pharma/talk2knowledgegraphs/configs/tools/multimodal_subgraph_extraction/default.yaml +17 -2
- aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_extraction/__init__.py +2 -2
- aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_extraction/default.yaml +1 -1
- aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_summarization/__init__.py +2 -2
- aiagents4pharma/talk2knowledgegraphs/configs/tools/subgraph_summarization/default.yaml +1 -1
- aiagents4pharma/talk2knowledgegraphs/configs/utils/enrichments/ols_terms/default.yaml +1 -1
- aiagents4pharma/talk2knowledgegraphs/configs/utils/enrichments/reactome_pathways/default.yaml +1 -1
- aiagents4pharma/talk2knowledgegraphs/configs/utils/enrichments/uniprot_proteins/default.yaml +1 -1
- aiagents4pharma/talk2knowledgegraphs/configs/utils/pubchem_utils/default.yaml +1 -1
- aiagents4pharma/talk2knowledgegraphs/datasets/__init__.py +4 -6
- aiagents4pharma/talk2knowledgegraphs/datasets/biobridge_primekg.py +115 -67
- aiagents4pharma/talk2knowledgegraphs/datasets/dataset.py +2 -0
- aiagents4pharma/talk2knowledgegraphs/datasets/primekg.py +35 -24
- aiagents4pharma/talk2knowledgegraphs/datasets/starkqa_primekg.py +29 -21
- 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 +190 -0
- aiagents4pharma/talk2knowledgegraphs/install.md +140 -0
- aiagents4pharma/talk2knowledgegraphs/milvus_data_dump.py +31 -65
- aiagents4pharma/talk2knowledgegraphs/states/__init__.py +3 -2
- aiagents4pharma/talk2knowledgegraphs/states/state_talk2knowledgegraphs.py +1 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_agents_t2kg_agent.py +65 -40
- aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_biobridge_primekg.py +54 -48
- aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_dataset.py +4 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_primekg.py +17 -4
- aiagents4pharma/talk2knowledgegraphs/tests/test_datasets_starkqa_primekg.py +33 -24
- aiagents4pharma/talk2knowledgegraphs/tests/test_tools_graphrag_reasoning.py +116 -69
- aiagents4pharma/talk2knowledgegraphs/tests/test_tools_milvus_multimodal_subgraph_extraction.py +736 -413
- aiagents4pharma/talk2knowledgegraphs/tests/test_tools_multimodal_subgraph_extraction.py +22 -15
- aiagents4pharma/talk2knowledgegraphs/tests/test_tools_subgraph_extraction.py +19 -12
- aiagents4pharma/talk2knowledgegraphs/tests/test_tools_subgraph_summarization.py +95 -48
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_embeddings.py +4 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_huggingface.py +5 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_nim_molmim.py +13 -18
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_embeddings_ollama.py +10 -3
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_enrichments.py +4 -3
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_ollama.py +3 -2
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_ols.py +1 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_pubchem.py +9 -4
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_reactome.py +6 -6
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_enrichments_uniprot.py +4 -0
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_extractions_milvus_multimodal_pcst.py +442 -42
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_kg_utils.py +3 -4
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_pubchem_utils.py +10 -6
- aiagents4pharma/talk2knowledgegraphs/tools/__init__.py +10 -7
- aiagents4pharma/talk2knowledgegraphs/tools/graphrag_reasoning.py +15 -20
- aiagents4pharma/talk2knowledgegraphs/tools/milvus_multimodal_subgraph_extraction.py +245 -205
- aiagents4pharma/talk2knowledgegraphs/tools/multimodal_subgraph_extraction.py +92 -90
- aiagents4pharma/talk2knowledgegraphs/tools/subgraph_extraction.py +25 -37
- aiagents4pharma/talk2knowledgegraphs/tools/subgraph_summarization.py +10 -13
- aiagents4pharma/talk2knowledgegraphs/utils/__init__.py +4 -7
- aiagents4pharma/talk2knowledgegraphs/utils/embeddings/__init__.py +4 -7
- aiagents4pharma/talk2knowledgegraphs/utils/embeddings/embeddings.py +4 -0
- aiagents4pharma/talk2knowledgegraphs/utils/embeddings/huggingface.py +11 -14
- aiagents4pharma/talk2knowledgegraphs/utils/embeddings/nim_molmim.py +7 -7
- aiagents4pharma/talk2knowledgegraphs/utils/embeddings/ollama.py +12 -6
- aiagents4pharma/talk2knowledgegraphs/utils/embeddings/sentence_transformer.py +8 -6
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/__init__.py +9 -6
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/enrichments.py +1 -0
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/ollama.py +15 -9
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/ols_terms.py +23 -20
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/pubchem_strings.py +12 -10
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/reactome_pathways.py +16 -10
- aiagents4pharma/talk2knowledgegraphs/utils/enrichments/uniprot_proteins.py +26 -18
- aiagents4pharma/talk2knowledgegraphs/utils/extractions/__init__.py +4 -5
- aiagents4pharma/talk2knowledgegraphs/utils/extractions/milvus_multimodal_pcst.py +218 -81
- aiagents4pharma/talk2knowledgegraphs/utils/extractions/multimodal_pcst.py +53 -47
- aiagents4pharma/talk2knowledgegraphs/utils/extractions/pcst.py +18 -14
- aiagents4pharma/talk2knowledgegraphs/utils/kg_utils.py +22 -23
- aiagents4pharma/talk2knowledgegraphs/utils/pubchem_utils.py +11 -10
- aiagents4pharma/talk2scholars/.dockerignore +13 -0
- aiagents4pharma/talk2scholars/Dockerfile +104 -0
- aiagents4pharma/talk2scholars/README.md +1 -0
- aiagents4pharma/talk2scholars/agents/__init__.py +1 -5
- aiagents4pharma/talk2scholars/agents/main_agent.py +6 -4
- aiagents4pharma/talk2scholars/agents/paper_download_agent.py +5 -4
- aiagents4pharma/talk2scholars/agents/pdf_agent.py +4 -2
- aiagents4pharma/talk2scholars/agents/s2_agent.py +2 -2
- aiagents4pharma/talk2scholars/agents/zotero_agent.py +10 -11
- aiagents4pharma/talk2scholars/configs/__init__.py +1 -3
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/__init__.py +1 -4
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/main_agent/default.yaml +1 -1
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/pdf_agent/default.yaml +1 -1
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/s2_agent/default.yaml +8 -8
- aiagents4pharma/talk2scholars/configs/agents/talk2scholars/zotero_agent/default.yaml +7 -7
- aiagents4pharma/talk2scholars/configs/tools/__init__.py +8 -6
- 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/state_talk2scholars.py +8 -8
- aiagents4pharma/talk2scholars/tests/{test_main_agent.py → test_agents_main_agent.py} +41 -23
- aiagents4pharma/talk2scholars/tests/{test_paper_download_agent.py → test_agents_paper_agents_download_agent.py} +10 -16
- aiagents4pharma/talk2scholars/tests/{test_pdf_agent.py → test_agents_pdf_agent.py} +6 -10
- aiagents4pharma/talk2scholars/tests/{test_s2_agent.py → test_agents_s2_agent.py} +8 -16
- aiagents4pharma/talk2scholars/tests/{test_zotero_agent.py → test_agents_zotero_agent.py} +5 -7
- aiagents4pharma/talk2scholars/tests/{test_s2_display_dataframe.py → test_s2_tools_display_dataframe.py} +6 -7
- aiagents4pharma/talk2scholars/tests/{test_s2_query_dataframe.py → test_s2_tools_query_dataframe.py} +5 -15
- aiagents4pharma/talk2scholars/tests/{test_paper_downloader.py → test_tools_paper_downloader.py} +25 -63
- aiagents4pharma/talk2scholars/tests/{test_question_and_answer_tool.py → test_tools_question_and_answer_tool.py} +2 -6
- aiagents4pharma/talk2scholars/tests/{test_s2_multi.py → test_tools_s2_multi.py} +5 -5
- aiagents4pharma/talk2scholars/tests/{test_s2_retrieve.py → test_tools_s2_retrieve.py} +2 -1
- aiagents4pharma/talk2scholars/tests/{test_s2_search.py → test_tools_s2_search.py} +5 -5
- aiagents4pharma/talk2scholars/tests/{test_s2_single.py → test_tools_s2_single.py} +5 -5
- aiagents4pharma/talk2scholars/tests/{test_arxiv_downloader.py → test_utils_arxiv_downloader.py} +16 -25
- aiagents4pharma/talk2scholars/tests/{test_base_paper_downloader.py → test_utils_base_paper_downloader.py} +25 -47
- aiagents4pharma/talk2scholars/tests/{test_biorxiv_downloader.py → test_utils_biorxiv_downloader.py} +14 -42
- aiagents4pharma/talk2scholars/tests/{test_medrxiv_downloader.py → test_utils_medrxiv_downloader.py} +15 -49
- aiagents4pharma/talk2scholars/tests/{test_nvidia_nim_reranker.py → test_utils_nvidia_nim_reranker.py} +6 -16
- aiagents4pharma/talk2scholars/tests/{test_pdf_answer_formatter.py → test_utils_pdf_answer_formatter.py} +1 -0
- aiagents4pharma/talk2scholars/tests/{test_pdf_batch_processor.py → test_utils_pdf_batch_processor.py} +6 -15
- aiagents4pharma/talk2scholars/tests/{test_pdf_collection_manager.py → test_utils_pdf_collection_manager.py} +34 -11
- aiagents4pharma/talk2scholars/tests/{test_pdf_document_processor.py → test_utils_pdf_document_processor.py} +2 -3
- aiagents4pharma/talk2scholars/tests/{test_pdf_generate_answer.py → test_utils_pdf_generate_answer.py} +3 -6
- aiagents4pharma/talk2scholars/tests/{test_pdf_gpu_detection.py → test_utils_pdf_gpu_detection.py} +5 -16
- aiagents4pharma/talk2scholars/tests/{test_pdf_rag_pipeline.py → test_utils_pdf_rag_pipeline.py} +7 -17
- aiagents4pharma/talk2scholars/tests/{test_pdf_retrieve_chunks.py → test_utils_pdf_retrieve_chunks.py} +4 -11
- aiagents4pharma/talk2scholars/tests/{test_pdf_singleton_manager.py → test_utils_pdf_singleton_manager.py} +26 -23
- aiagents4pharma/talk2scholars/tests/{test_pdf_vector_normalization.py → test_utils_pdf_vector_normalization.py} +1 -1
- aiagents4pharma/talk2scholars/tests/{test_pdf_vector_store.py → test_utils_pdf_vector_store.py} +27 -55
- aiagents4pharma/talk2scholars/tests/{test_pubmed_downloader.py → test_utils_pubmed_downloader.py} +31 -91
- aiagents4pharma/talk2scholars/tests/{test_read_helper_utils.py → test_utils_read_helper_utils.py} +2 -6
- aiagents4pharma/talk2scholars/tests/{test_s2_utils_ext_ids.py → test_utils_s2_utils_ext_ids.py} +5 -15
- aiagents4pharma/talk2scholars/tests/{test_zotero_human_in_the_loop.py → test_utils_zotero_human_in_the_loop.py} +6 -13
- aiagents4pharma/talk2scholars/tests/{test_zotero_path.py → test_utils_zotero_path.py} +53 -45
- aiagents4pharma/talk2scholars/tests/{test_zotero_read.py → test_utils_zotero_read.py} +30 -91
- aiagents4pharma/talk2scholars/tests/{test_zotero_write.py → test_utils_zotero_write.py} +6 -16
- aiagents4pharma/talk2scholars/tools/__init__.py +1 -4
- aiagents4pharma/talk2scholars/tools/paper_download/paper_downloader.py +20 -35
- aiagents4pharma/talk2scholars/tools/paper_download/utils/__init__.py +7 -5
- aiagents4pharma/talk2scholars/tools/paper_download/utils/arxiv_downloader.py +9 -11
- aiagents4pharma/talk2scholars/tools/paper_download/utils/base_paper_downloader.py +14 -21
- aiagents4pharma/talk2scholars/tools/paper_download/utils/biorxiv_downloader.py +14 -22
- aiagents4pharma/talk2scholars/tools/paper_download/utils/medrxiv_downloader.py +11 -13
- aiagents4pharma/talk2scholars/tools/paper_download/utils/pubmed_downloader.py +14 -28
- aiagents4pharma/talk2scholars/tools/pdf/question_and_answer.py +4 -8
- aiagents4pharma/talk2scholars/tools/pdf/utils/__init__.py +16 -14
- aiagents4pharma/talk2scholars/tools/pdf/utils/answer_formatter.py +4 -4
- aiagents4pharma/talk2scholars/tools/pdf/utils/batch_processor.py +15 -17
- aiagents4pharma/talk2scholars/tools/pdf/utils/collection_manager.py +2 -2
- aiagents4pharma/talk2scholars/tools/pdf/utils/document_processor.py +5 -5
- aiagents4pharma/talk2scholars/tools/pdf/utils/generate_answer.py +4 -4
- aiagents4pharma/talk2scholars/tools/pdf/utils/get_vectorstore.py +2 -6
- aiagents4pharma/talk2scholars/tools/pdf/utils/gpu_detection.py +5 -9
- aiagents4pharma/talk2scholars/tools/pdf/utils/nvidia_nim_reranker.py +4 -4
- aiagents4pharma/talk2scholars/tools/pdf/utils/paper_loader.py +2 -2
- aiagents4pharma/talk2scholars/tools/pdf/utils/rag_pipeline.py +6 -15
- aiagents4pharma/talk2scholars/tools/pdf/utils/retrieve_chunks.py +7 -15
- aiagents4pharma/talk2scholars/tools/pdf/utils/singleton_manager.py +2 -2
- aiagents4pharma/talk2scholars/tools/pdf/utils/tool_helper.py +3 -4
- aiagents4pharma/talk2scholars/tools/pdf/utils/vector_normalization.py +8 -17
- aiagents4pharma/talk2scholars/tools/pdf/utils/vector_store.py +17 -33
- aiagents4pharma/talk2scholars/tools/s2/__init__.py +8 -6
- aiagents4pharma/talk2scholars/tools/s2/display_dataframe.py +3 -7
- aiagents4pharma/talk2scholars/tools/s2/multi_paper_rec.py +7 -6
- aiagents4pharma/talk2scholars/tools/s2/query_dataframe.py +5 -12
- aiagents4pharma/talk2scholars/tools/s2/retrieve_semantic_scholar_paper_id.py +2 -4
- aiagents4pharma/talk2scholars/tools/s2/search.py +6 -6
- aiagents4pharma/talk2scholars/tools/s2/single_paper_rec.py +5 -3
- aiagents4pharma/talk2scholars/tools/s2/utils/__init__.py +1 -3
- aiagents4pharma/talk2scholars/tools/s2/utils/multi_helper.py +12 -18
- aiagents4pharma/talk2scholars/tools/s2/utils/search_helper.py +11 -18
- aiagents4pharma/talk2scholars/tools/s2/utils/single_helper.py +11 -16
- aiagents4pharma/talk2scholars/tools/zotero/__init__.py +1 -4
- aiagents4pharma/talk2scholars/tools/zotero/utils/__init__.py +1 -4
- aiagents4pharma/talk2scholars/tools/zotero/utils/read_helper.py +21 -39
- aiagents4pharma/talk2scholars/tools/zotero/utils/review_helper.py +2 -6
- aiagents4pharma/talk2scholars/tools/zotero/utils/write_helper.py +8 -11
- aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_path.py +4 -12
- aiagents4pharma/talk2scholars/tools/zotero/utils/zotero_pdf_downloader.py +13 -27
- aiagents4pharma/talk2scholars/tools/zotero/zotero_read.py +4 -7
- aiagents4pharma/talk2scholars/tools/zotero/zotero_review.py +8 -10
- aiagents4pharma/talk2scholars/tools/zotero/zotero_write.py +3 -2
- {aiagents4pharma-1.43.0.dist-info → aiagents4pharma-1.45.0.dist-info}/METADATA +115 -50
- aiagents4pharma-1.45.0.dist-info/RECORD +324 -0
- {aiagents4pharma-1.43.0.dist-info → aiagents4pharma-1.45.0.dist-info}/WHEEL +1 -2
- aiagents4pharma-1.43.0.dist-info/RECORD +0 -293
- aiagents4pharma-1.43.0.dist-info/top_level.txt +0 -1
- /aiagents4pharma/talk2scholars/tests/{test_state.py → test_states_state.py} +0 -0
- /aiagents4pharma/talk2scholars/tests/{test_pdf_paper_loader.py → test_utils_pdf_paper_loader.py} +0 -0
- /aiagents4pharma/talk2scholars/tests/{test_tool_helper_utils.py → test_utils_tool_helper_utils.py} +0 -0
- /aiagents4pharma/talk2scholars/tests/{test_zotero_pdf_downloader_utils.py → test_utils_zotero_pdf_downloader_utils.py} +0 -0
- {aiagents4pharma-1.43.0.dist-info → aiagents4pharma-1.45.0.dist-info}/licenses/LICENSE +0 -0
@@ -5,31 +5,38 @@ Tool for asking a question about the simulation results.
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
import logging
|
8
|
-
from typing import
|
9
|
-
|
8
|
+
from typing import Annotated, Literal
|
9
|
+
|
10
10
|
import basico
|
11
|
+
import hydra
|
11
12
|
import pandas as pd
|
12
|
-
from pydantic import BaseModel, Field
|
13
13
|
from langchain_core.tools.base import BaseTool
|
14
14
|
from langchain_experimental.agents import create_pandas_dataframe_agent
|
15
15
|
from langgraph.prebuilt import InjectedState
|
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 AskQuestionInput(BaseModel):
|
22
24
|
"""
|
23
25
|
Input schema for the AskQuestion tool.
|
24
26
|
"""
|
27
|
+
|
25
28
|
question: str = Field(description="question about the simulation and steady state results")
|
26
|
-
experiment_name: str = Field(
|
27
|
-
|
28
|
-
|
29
|
+
experiment_name: str = Field(
|
30
|
+
description="""Name assigned to the simulation
|
31
|
+
or steady state analysis when the tool
|
32
|
+
simulate_model or steady_state is invoked."""
|
33
|
+
)
|
29
34
|
question_context: Literal["simulation", "steady_state"] = Field(
|
30
|
-
description="Context of the question"
|
35
|
+
description="Context of the question"
|
36
|
+
)
|
31
37
|
state: Annotated[dict, InjectedState]
|
32
38
|
|
39
|
+
|
33
40
|
# Note: It's important that every field has type hints.
|
34
41
|
# BaseTool is a Pydantic class and not having type hints
|
35
42
|
# can lead to unexpected behavior.
|
@@ -37,17 +44,20 @@ class AskQuestionTool(BaseTool):
|
|
37
44
|
"""
|
38
45
|
Tool for asking a question about the simulation or steady state results.
|
39
46
|
"""
|
47
|
+
|
40
48
|
name: str = "ask_question"
|
41
49
|
description: str = """A tool to ask question about the
|
42
50
|
simulation or steady state results."""
|
43
|
-
args_schema:
|
51
|
+
args_schema: type[BaseModel] = AskQuestionInput
|
44
52
|
return_direct: bool = False
|
45
53
|
|
46
|
-
def _run(
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
54
|
+
def _run(
|
55
|
+
self,
|
56
|
+
question: str,
|
57
|
+
experiment_name: str,
|
58
|
+
question_context: Literal["simulation", "steady_state"],
|
59
|
+
state: Annotated[dict, InjectedState],
|
60
|
+
) -> str:
|
51
61
|
"""
|
52
62
|
Run the tool.
|
53
63
|
|
@@ -59,15 +69,16 @@ class AskQuestionTool(BaseTool):
|
|
59
69
|
Returns:
|
60
70
|
str: The answer to the question.
|
61
71
|
"""
|
62
|
-
logger.log(
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
72
|
+
logger.log(
|
73
|
+
logging.INFO,
|
74
|
+
"Calling ask_question tool %s, %s, %s",
|
75
|
+
question,
|
76
|
+
question_context,
|
77
|
+
experiment_name,
|
78
|
+
)
|
67
79
|
# Load hydra configuration
|
68
80
|
with hydra.initialize(version_base=None, config_path="../configs"):
|
69
|
-
cfg = hydra.compose(config_name=
|
70
|
-
overrides=['tools/ask_question=default'])
|
81
|
+
cfg = hydra.compose(config_name="config", overrides=["tools/ask_question=default"])
|
71
82
|
cfg = cfg.tools.ask_question
|
72
83
|
# Get the context of the question
|
73
84
|
# and based on the context, get the data
|
@@ -89,9 +100,7 @@ class AskQuestionTool(BaseTool):
|
|
89
100
|
df_data = pd.DataFrame.from_dict(dic_data)
|
90
101
|
# Extract the data for the experiment
|
91
102
|
# matching the experiment name
|
92
|
-
df = pd.DataFrame(
|
93
|
-
df_data[df_data['name'] == experiment_name]['data'].iloc[0]
|
94
|
-
)
|
103
|
+
df = pd.DataFrame(df_data[df_data["name"] == experiment_name]["data"].iloc[0])
|
95
104
|
logger.log(logging.INFO, "Shape of the dataframe: %s", df.shape)
|
96
105
|
# # Extract the model units
|
97
106
|
# model_units = basico.model_info.get_model_units()
|
@@ -100,15 +109,16 @@ class AskQuestionTool(BaseTool):
|
|
100
109
|
prompt_content += f"{basico.model_info.get_model_units()}\n\n"
|
101
110
|
# Create a pandas dataframe agent
|
102
111
|
df_agent = create_pandas_dataframe_agent(
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
+
state["llm_model"],
|
113
|
+
allow_dangerous_code=True,
|
114
|
+
agent_type="tool-calling",
|
115
|
+
df=df,
|
116
|
+
max_iterations=5,
|
117
|
+
include_df_in_prompt=True,
|
118
|
+
number_of_head_rows=df.shape[0],
|
119
|
+
verbose=True,
|
120
|
+
prefix=prompt_content,
|
121
|
+
)
|
112
122
|
# Invoke the agent with the question
|
113
123
|
llm_result = df_agent.invoke(question, stream_mode=None)
|
114
124
|
# print (llm_result)
|
@@ -5,13 +5,15 @@ Tool for plotting a custom y-axis of a simulation plot.
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
import logging
|
8
|
-
from typing import
|
9
|
-
|
8
|
+
from typing import Annotated, Literal
|
9
|
+
|
10
10
|
import hydra
|
11
11
|
import pandas as pd
|
12
|
-
from langchain_core.tools import BaseTool
|
13
12
|
from langchain_core.prompts import ChatPromptTemplate
|
13
|
+
from langchain_core.tools import BaseTool
|
14
14
|
from langgraph.prebuilt import InjectedState
|
15
|
+
from pydantic import BaseModel, Field
|
16
|
+
|
15
17
|
from .load_biomodel import ModelData, load_biomodel
|
16
18
|
from .utils import get_model_units
|
17
19
|
|
@@ -19,6 +21,7 @@ from .utils import get_model_units
|
|
19
21
|
logging.basicConfig(level=logging.INFO)
|
20
22
|
logger = logging.getLogger(__name__)
|
21
23
|
|
24
|
+
|
22
25
|
def extract_relevant_species(question, species_names, state):
|
23
26
|
"""
|
24
27
|
Extract the relevant species from the user question.
|
@@ -31,6 +34,7 @@ def extract_relevant_species(question, species_names, state):
|
|
31
34
|
Returns:
|
32
35
|
CustomHeader: The relevant species
|
33
36
|
"""
|
37
|
+
|
34
38
|
# In the following code, we extract the species
|
35
39
|
# from the user question. We use Literal to restrict
|
36
40
|
# the species names to the ones available in the
|
@@ -41,44 +45,46 @@ def extract_relevant_species(question, species_names, state):
|
|
41
45
|
|
42
46
|
This is a Pydantic model that restricts the species
|
43
47
|
names to the ones available in the simulation results.
|
44
|
-
|
48
|
+
|
45
49
|
If no species is relevant, set the attribute
|
46
50
|
`relevant_species` to None.
|
47
51
|
"""
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
|
53
|
+
relevant_species: None | list[Literal[*species_names,]] = Field(
|
54
|
+
description="This is a list of species based on the user question."
|
55
|
+
"It is restricted to the species available in the simulation results."
|
56
|
+
"If no species is relevant, set this attribute to None."
|
57
|
+
"If the user asks for very specific species (for example, using the"
|
58
|
+
"keyword `only` in the question), set this attribute to correspond "
|
59
|
+
"to the species available in the simulation results, otherwise set it to None."
|
60
|
+
)
|
61
|
+
|
56
62
|
# Load hydra configuration
|
57
63
|
with hydra.initialize(version_base=None, config_path="../configs"):
|
58
|
-
cfg = hydra.compose(config_name=
|
59
|
-
overrides=['tools/custom_plotter=default'])
|
64
|
+
cfg = hydra.compose(config_name="config", overrides=["tools/custom_plotter=default"])
|
60
65
|
cfg = cfg.tools.custom_plotter
|
61
66
|
# Get the system prompt
|
62
67
|
system_prompt = cfg.system_prompt_custom_header
|
63
68
|
# Create an instance of the LLM model
|
64
|
-
logging.log(logging.INFO, "LLM model: %s", state[
|
65
|
-
llm = state[
|
69
|
+
logging.log(logging.INFO, "LLM model: %s", state["llm_model"])
|
70
|
+
llm = state["llm_model"]
|
66
71
|
llm_with_structured_output = llm.with_structured_output(CustomHeader)
|
67
|
-
prompt = ChatPromptTemplate.from_messages([("system", system_prompt),
|
68
|
-
("human", "{input}")])
|
72
|
+
prompt = ChatPromptTemplate.from_messages([("system", system_prompt), ("human", "{input}")])
|
69
73
|
few_shot_structured_llm = prompt | llm_with_structured_output
|
70
74
|
return few_shot_structured_llm.invoke(question)
|
71
75
|
|
76
|
+
|
72
77
|
class CustomPlotterInput(BaseModel):
|
73
78
|
"""
|
74
79
|
Input schema for the custom plotter tool.
|
75
80
|
"""
|
81
|
+
|
76
82
|
question: str = Field(description="Description of the plot")
|
77
|
-
sys_bio_model: ModelData = Field(description="model data",
|
78
|
-
default=None)
|
83
|
+
sys_bio_model: ModelData = Field(description="model data", default=None)
|
79
84
|
simulation_name: str = Field(description="Name assigned to the simulation")
|
80
85
|
state: Annotated[dict, InjectedState]
|
81
86
|
|
87
|
+
|
82
88
|
# Note: It's important that every field has type hints.
|
83
89
|
# BaseTool is a Pydantic class and not having type hints
|
84
90
|
# can lead to unexpected behavior.
|
@@ -89,21 +95,23 @@ class CustomPlotterTool(BaseTool):
|
|
89
95
|
"""
|
90
96
|
Tool for custom plotting the y-axis of a plot.
|
91
97
|
"""
|
98
|
+
|
92
99
|
name: str = "custom_plotter"
|
93
|
-
description: str =
|
100
|
+
description: str = """A visualization tool designed to extract and display a subset
|
94
101
|
of the larger simulation plot generated by the simulate_model tool.
|
95
|
-
It allows users to specify particular species for the y-axis,
|
96
|
-
providing a more targeted view of key species without the clutter
|
97
|
-
of the full plot.
|
98
|
-
args_schema:
|
102
|
+
It allows users to specify particular species for the y-axis,
|
103
|
+
providing a more targeted view of key species without the clutter
|
104
|
+
of the full plot."""
|
105
|
+
args_schema: type[BaseModel] = CustomPlotterInput
|
99
106
|
response_format: str = "content_and_artifact"
|
100
107
|
|
101
|
-
def _run(
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
108
|
+
def _run(
|
109
|
+
self,
|
110
|
+
question: str,
|
111
|
+
sys_bio_model: ModelData,
|
112
|
+
simulation_name: str,
|
113
|
+
state: Annotated[dict, InjectedState],
|
114
|
+
) -> tuple[str, None | list[str]]:
|
107
115
|
"""
|
108
116
|
Run the tool.
|
109
117
|
|
@@ -118,7 +126,7 @@ class CustomPlotterTool(BaseTool):
|
|
118
126
|
"""
|
119
127
|
logger.log(logging.INFO, "Calling custom_plotter tool %s, %s", question, sys_bio_model)
|
120
128
|
# Load the model
|
121
|
-
sbml_file_path = state[
|
129
|
+
sbml_file_path = state["sbml_file_path"][-1] if len(state["sbml_file_path"]) > 0 else None
|
122
130
|
model_object = load_biomodel(sys_bio_model, sbml_file_path=sbml_file_path)
|
123
131
|
dic_simulated_data = {}
|
124
132
|
for data in state["dic_simulated_data"]:
|
@@ -129,20 +137,20 @@ class CustomPlotterTool(BaseTool):
|
|
129
137
|
# Create a pandas dataframe from the dictionary
|
130
138
|
df = pd.DataFrame.from_dict(dic_simulated_data)
|
131
139
|
# Get the simulated data for the current tool call
|
132
|
-
df = pd.DataFrame(
|
133
|
-
df[df['name'] == simulation_name]['data'].iloc[0]
|
134
|
-
)
|
140
|
+
df = pd.DataFrame(df[df["name"] == simulation_name]["data"].iloc[0])
|
135
141
|
# df = pd.DataFrame.from_dict(state['dic_simulated_data'])
|
136
142
|
species_names = df.columns.tolist()
|
137
143
|
# Exclude the time column
|
138
|
-
species_names.remove(
|
144
|
+
species_names.remove("Time")
|
139
145
|
logging.log(logging.INFO, "Species names: %s", species_names)
|
140
146
|
# Extract the relevant species from the user question
|
141
147
|
results = extract_relevant_species(question, species_names, state)
|
142
|
-
print
|
148
|
+
print(results)
|
143
149
|
if results.relevant_species is None:
|
144
|
-
raise ValueError(
|
145
|
-
|
150
|
+
raise ValueError(
|
151
|
+
"No species found in the simulation results \
|
152
|
+
that matches the user prompt."
|
153
|
+
)
|
146
154
|
extracted_species = []
|
147
155
|
# Extract the species from the results
|
148
156
|
# that are available in the simulation results
|
@@ -151,7 +159,7 @@ class CustomPlotterTool(BaseTool):
|
|
151
159
|
extracted_species.append(species)
|
152
160
|
logging.info("Extracted species: %s", extracted_species)
|
153
161
|
# Include the time column
|
154
|
-
extracted_species.insert(0,
|
155
|
-
return f"Custom plot {simulation_name}",{
|
156
|
-
|
157
|
-
|
162
|
+
extracted_species.insert(0, "Time")
|
163
|
+
return f"Custom plot {simulation_name}", {
|
164
|
+
"dic_data": df[extracted_species].to_dict(orient="records")
|
165
|
+
} | get_model_units(model_object)
|