aiagents4pharma 1.44.0__py3-none-any.whl → 1.45.1__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/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 +334 -216
- 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 +160 -97
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_kg_utils.py +3 -4
- aiagents4pharma/talk2knowledgegraphs/tests/test_utils_pubchem_utils.py +87 -13
- aiagents4pharma/talk2knowledgegraphs/tools/__init__.py +10 -7
- aiagents4pharma/talk2knowledgegraphs/tools/graphrag_reasoning.py +15 -20
- aiagents4pharma/talk2knowledgegraphs/tools/milvus_multimodal_subgraph_extraction.py +145 -142
- 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 +14 -34
- 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.44.0.dist-info → aiagents4pharma-1.45.1.dist-info}/METADATA +115 -51
- aiagents4pharma-1.45.1.dist-info/RECORD +324 -0
- {aiagents4pharma-1.44.0.dist-info → aiagents4pharma-1.45.1.dist-info}/WHEEL +1 -2
- aiagents4pharma-1.44.0.dist-info/RECORD +0 -293
- aiagents4pharma-1.44.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.44.0.dist-info → aiagents4pharma-1.45.1.dist-info}/licenses/LICENSE +0 -0
@@ -5,6 +5,7 @@ Test cases for utils/enrichments/reactome_pathways.py
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
import pytest
|
8
|
+
|
8
9
|
from ..utils.enrichments.reactome_pathways import EnrichmentWithReactome
|
9
10
|
|
10
11
|
# In this test, we will consider 2 examples:
|
@@ -18,26 +19,25 @@ FIRST_PATHWAY = "Cyclic GMP-AMP (cGAMP) synthase (cGAS) was identified as a cyto
|
|
18
19
|
SECOND_PATHWAY = "The P2RX7 (P2X7, P2Z) trimer binds ATP,"
|
19
20
|
# The expected description of pathway R-HSA-1234567 is None.
|
20
21
|
|
22
|
+
|
21
23
|
@pytest.fixture(name="enrich_obj")
|
22
24
|
def fixture_uniprot_config():
|
23
25
|
"""Return a dictionary with the configuration for Reactome enrichment."""
|
24
26
|
return EnrichmentWithReactome()
|
25
27
|
|
28
|
+
|
26
29
|
def test_enrich_documents(enrich_obj):
|
27
30
|
"""Test the enrich_documents method."""
|
28
|
-
reactome_pathways = ["R-HSA-3244647",
|
29
|
-
"R-HSA-9905952",
|
30
|
-
"R-HSA-1234567"]
|
31
|
+
reactome_pathways = ["R-HSA-3244647", "R-HSA-9905952", "R-HSA-1234567"]
|
31
32
|
descriptions = enrich_obj.enrich_documents(reactome_pathways)
|
32
33
|
assert descriptions[0].startswith(FIRST_PATHWAY)
|
33
34
|
assert descriptions[1].startswith(SECOND_PATHWAY)
|
34
35
|
assert descriptions[2] is None
|
35
36
|
|
37
|
+
|
36
38
|
def test_enrich_documents_with_rag(enrich_obj):
|
37
39
|
"""Test the enrich_documents_with_rag method."""
|
38
|
-
reactome_pathways = ["R-HSA-3244647",
|
39
|
-
"R-HSA-9905952",
|
40
|
-
"R-HSA-1234567"]
|
40
|
+
reactome_pathways = ["R-HSA-3244647", "R-HSA-9905952", "R-HSA-1234567"]
|
41
41
|
descriptions = enrich_obj.enrich_documents_with_rag(reactome_pathways, None)
|
42
42
|
assert descriptions[0].startswith(FIRST_PATHWAY)
|
43
43
|
assert descriptions[1].startswith(SECOND_PATHWAY)
|
@@ -5,6 +5,7 @@ Test cases for utils/enrichments/uniprot_proteins.py
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
import pytest
|
8
|
+
|
8
9
|
from ..utils.enrichments.uniprot_proteins import EnrichmentWithUniProt
|
9
10
|
|
10
11
|
# In this test, we will consider 2 examples:
|
@@ -16,11 +17,13 @@ START_DESCP = "Multifunctional transcription factor"
|
|
16
17
|
# The expected amino acid sequence of TP53 startswith:
|
17
18
|
START_SEQ = "MEEPQSDPSV"
|
18
19
|
|
20
|
+
|
19
21
|
@pytest.fixture(name="enrich_obj")
|
20
22
|
def fixture_uniprot_config():
|
21
23
|
"""Return a dictionary with the configuration for UniProt enrichment."""
|
22
24
|
return EnrichmentWithUniProt()
|
23
25
|
|
26
|
+
|
24
27
|
def test_enrich_documents(enrich_obj):
|
25
28
|
"""Test the enrich_documents method."""
|
26
29
|
gene_names = ["TP53", "TP5", "XZ"]
|
@@ -32,6 +35,7 @@ def test_enrich_documents(enrich_obj):
|
|
32
35
|
assert descriptions[2] is None
|
33
36
|
assert sequences[2] is None
|
34
37
|
|
38
|
+
|
35
39
|
def test_enrich_documents_with_rag(enrich_obj):
|
36
40
|
"""Test the enrich_documents_with_rag method."""
|
37
41
|
gene_names = ["TP53", "TP5", "XZ"]
|
@@ -5,44 +5,55 @@ Test cases for tools/utils/extractions/milvus_multimodal_pcst.py
|
|
5
5
|
import importlib
|
6
6
|
import sys
|
7
7
|
import unittest
|
8
|
-
from unittest.mock import
|
8
|
+
from unittest.mock import MagicMock, mock_open, patch
|
9
|
+
|
9
10
|
import numpy as np
|
10
11
|
import pandas as pd
|
12
|
+
|
11
13
|
from ..utils.extractions.milvus_multimodal_pcst import (
|
12
|
-
|
14
|
+
DynamicLibraryLoader,
|
15
|
+
MultimodalPCSTPruning,
|
16
|
+
SystemDetector,
|
13
17
|
)
|
14
18
|
|
19
|
+
|
15
20
|
class TestMultimodalPCSTPruning(unittest.TestCase):
|
16
21
|
"""
|
17
22
|
Test cases for MultimodalPCSTPruning class (Milvus-based PCST pruning).
|
18
23
|
"""
|
24
|
+
|
19
25
|
def setUp(self):
|
20
26
|
# Patch cupy and cudf to simulate GPU environment
|
21
|
-
patcher_cupy = patch.dict(
|
27
|
+
patcher_cupy = patch.dict("sys.modules", {"cupy": MagicMock(), "cudf": MagicMock()})
|
22
28
|
patcher_cupy.start()
|
23
29
|
self.addCleanup(patcher_cupy.stop)
|
24
30
|
|
25
31
|
# Patch pcst_fast
|
26
|
-
pcst_fast_patcher = patch(
|
27
|
-
|
32
|
+
pcst_fast_patcher = patch(
|
33
|
+
"aiagents4pharma.talk2knowledgegraphs.utils."
|
34
|
+
"extractions.milvus_multimodal_pcst.pcst_fast"
|
35
|
+
)
|
28
36
|
mock_pcst_fast = pcst_fast_patcher.start()
|
29
37
|
self.addCleanup(pcst_fast_patcher.stop)
|
30
38
|
mock_pcst_fast.pcst_fast.return_value = ([0, 1], [0])
|
31
39
|
|
32
40
|
# Patch Collection
|
33
|
-
collection_patcher = patch(
|
34
|
-
|
41
|
+
collection_patcher = patch(
|
42
|
+
"aiagents4pharma.talk2knowledgegraphs.utils."
|
43
|
+
"extractions.milvus_multimodal_pcst.Collection"
|
44
|
+
)
|
35
45
|
self.mock_collection = collection_patcher.start()
|
36
46
|
self.addCleanup(collection_patcher.stop)
|
37
47
|
|
38
48
|
# Patch open for cache_edge_index_path
|
39
|
-
open_patcher = patch(
|
49
|
+
open_patcher = patch("builtins.open", mock_open(read_data="[[0,1],[1,2]]"))
|
40
50
|
open_patcher.start()
|
41
51
|
self.addCleanup(open_patcher.stop)
|
42
52
|
|
43
53
|
# Patch pickle.load to return a numpy array for edge_index
|
44
|
-
pickle_patcher = patch(
|
45
|
-
|
54
|
+
pickle_patcher = patch(
|
55
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions.milvus_multimodal_pcst.pickle"
|
56
|
+
)
|
46
57
|
mock_pickle = pickle_patcher.start()
|
47
58
|
self.addCleanup(pickle_patcher.stop)
|
48
59
|
mock_pickle.load.return_value = np.array([[0, 1], [1, 2]])
|
@@ -59,13 +70,15 @@ class TestMultimodalPCSTPruning(unittest.TestCase):
|
|
59
70
|
edge_coll = MagicMock()
|
60
71
|
edge_coll.num_entities = 2
|
61
72
|
edge_coll.search.return_value = [[MagicMock(id=0, score=1.0), MagicMock(id=1, score=0.5)]]
|
62
|
-
self.mock_collection.side_effect = lambda name:
|
73
|
+
self.mock_collection.side_effect = lambda name: (
|
74
|
+
node_coll if "nodes" in name else edge_coll
|
75
|
+
)
|
63
76
|
|
64
77
|
# Setup mock loader
|
65
78
|
self.mock_loader = MagicMock()
|
66
79
|
self.mock_loader.py = np # Use numpy for array operations
|
67
80
|
self.mock_loader.df = pd # Use pandas for dataframes
|
68
|
-
self.mock_loader.to_list = lambda x: x.tolist() if hasattr(x,
|
81
|
+
self.mock_loader.to_list = lambda x: x.tolist() if hasattr(x, "tolist") else list(x)
|
69
82
|
|
70
83
|
def test_extract_subgraph_use_description_true(self):
|
71
84
|
"""
|
@@ -73,9 +86,17 @@ class TestMultimodalPCSTPruning(unittest.TestCase):
|
|
73
86
|
"""
|
74
87
|
# Create instance
|
75
88
|
pcst = MultimodalPCSTPruning(
|
76
|
-
topk=3,
|
77
|
-
|
78
|
-
|
89
|
+
topk=3,
|
90
|
+
topk_e=3,
|
91
|
+
cost_e=0.5,
|
92
|
+
c_const=0.01,
|
93
|
+
root=-1,
|
94
|
+
num_clusters=1,
|
95
|
+
pruning="gw",
|
96
|
+
verbosity_level=0,
|
97
|
+
use_description=True,
|
98
|
+
metric_type="IP",
|
99
|
+
loader=self.mock_loader,
|
79
100
|
)
|
80
101
|
# Dummy embeddings
|
81
102
|
text_emb = [0.1, 0.2, 0.3]
|
@@ -97,10 +118,17 @@ class TestMultimodalPCSTPruning(unittest.TestCase):
|
|
97
118
|
"""
|
98
119
|
# Create instance
|
99
120
|
pcst = MultimodalPCSTPruning(
|
100
|
-
topk=3,
|
101
|
-
|
121
|
+
topk=3,
|
122
|
+
topk_e=3,
|
123
|
+
cost_e=0.5,
|
124
|
+
c_const=0.01,
|
125
|
+
root=-1,
|
126
|
+
num_clusters=1,
|
127
|
+
pruning="gw",
|
128
|
+
verbosity_level=0,
|
129
|
+
use_description=False,
|
102
130
|
metric_type="IP",
|
103
|
-
loader=self.mock_loader
|
131
|
+
loader=self.mock_loader,
|
104
132
|
)
|
105
133
|
# Dummy embeddings
|
106
134
|
text_emb = [0.1, 0.2, 0.3]
|
@@ -121,9 +149,17 @@ class TestMultimodalPCSTPruning(unittest.TestCase):
|
|
121
149
|
Test get_subgraph_nodes_edges with virtual vertices present (len(virtual_vertices) > 0).
|
122
150
|
"""
|
123
151
|
pcst = MultimodalPCSTPruning(
|
124
|
-
topk=3,
|
125
|
-
|
126
|
-
|
152
|
+
topk=3,
|
153
|
+
topk_e=3,
|
154
|
+
cost_e=0.5,
|
155
|
+
c_const=0.01,
|
156
|
+
root=-1,
|
157
|
+
num_clusters=1,
|
158
|
+
pruning="gw",
|
159
|
+
verbosity_level=0,
|
160
|
+
use_description=True,
|
161
|
+
metric_type="IP",
|
162
|
+
loader=self.mock_loader,
|
127
163
|
)
|
128
164
|
# Simulate num_nodes = 2, vertices contains [0, 1, 2, 3] (2 and 3 are virtual)
|
129
165
|
num_nodes = 2
|
@@ -133,13 +169,10 @@ class TestMultimodalPCSTPruning(unittest.TestCase):
|
|
133
169
|
edges_dict = {
|
134
170
|
"edges": np.array([0, 1, 2]),
|
135
171
|
"num_prior_edges": 2,
|
136
|
-
"edge_index": np.array([[0, 1, 2, 3], [1, 2, 3, 4]])
|
172
|
+
"edge_index": np.array([[0, 1, 2, 3], [1, 2, 3, 4]]),
|
137
173
|
}
|
138
174
|
# mapping simulates mapping for edges and nodes
|
139
|
-
mapping = {
|
140
|
-
"edges": {0: 0, 1: 1},
|
141
|
-
"nodes": {2: 2, 3: 3}
|
142
|
-
}
|
175
|
+
mapping = {"edges": {0: 0, 1: 1}, "nodes": {2: 2, 3: 3}}
|
143
176
|
|
144
177
|
# Call extract_subgraph
|
145
178
|
result = pcst.get_subgraph_nodes_edges(num_nodes, vertices, edges_dict, mapping)
|
@@ -157,8 +190,9 @@ class TestMultimodalPCSTPruning(unittest.TestCase):
|
|
157
190
|
Test coverage for GPU import branch by patching sys.modules to mock cupy and
|
158
191
|
cudf as numpy and pandas.
|
159
192
|
"""
|
160
|
-
module_name =
|
161
|
-
".extractions.milvus_multimodal_pcst"
|
193
|
+
module_name = (
|
194
|
+
"aiagents4pharma.talk2knowledgegraphs.utils" + ".extractions.milvus_multimodal_pcst"
|
195
|
+
)
|
162
196
|
with patch.dict("sys.modules", {"cupy": np, "cudf": pd}):
|
163
197
|
# Reload the module to trigger the GPU branch
|
164
198
|
mod = importlib.reload(sys.modules[module_name])
|
@@ -168,14 +202,24 @@ class TestMultimodalPCSTPruning(unittest.TestCase):
|
|
168
202
|
mock_pickle = MagicMock()
|
169
203
|
mock_pickle.load.return_value = np.array([[0, 1], [1, 2]])
|
170
204
|
# Patch Collection, pcst_fast, and pickle after reload
|
171
|
-
with
|
172
|
-
patch(f"{module_name}.
|
173
|
-
patch(f"{module_name}.
|
174
|
-
|
205
|
+
with (
|
206
|
+
patch(f"{module_name}.Collection", self.mock_collection),
|
207
|
+
patch(f"{module_name}.pcst_fast", mock_pcst_fast),
|
208
|
+
patch(f"{module_name}.pickle", mock_pickle),
|
209
|
+
):
|
210
|
+
pcst_pruning_cls = mod.MultimodalPCSTPruning
|
175
211
|
pcst = pcst_pruning_cls(
|
176
|
-
topk=3,
|
177
|
-
|
178
|
-
|
212
|
+
topk=3,
|
213
|
+
topk_e=3,
|
214
|
+
cost_e=0.5,
|
215
|
+
c_const=0.01,
|
216
|
+
root=-1,
|
217
|
+
num_clusters=1,
|
218
|
+
pruning="gw",
|
219
|
+
verbosity_level=0,
|
220
|
+
use_description=True,
|
221
|
+
metric_type="IP",
|
222
|
+
loader=self.mock_loader,
|
179
223
|
)
|
180
224
|
# Dummy embeddings
|
181
225
|
text_emb = [0.1, 0.2, 0.3]
|
@@ -195,15 +239,15 @@ class TestMultimodalPCSTPruning(unittest.TestCase):
|
|
195
239
|
class TestSystemDetector(unittest.TestCase):
|
196
240
|
"""Test cases for SystemDetector class."""
|
197
241
|
|
198
|
-
@patch(
|
199
|
-
|
200
|
-
|
201
|
-
|
242
|
+
@patch("aiagents4pharma.talk2knowledgegraphs.utils.extractions.milvus_multimodal_pcst.platform")
|
243
|
+
@patch(
|
244
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions.milvus_multimodal_pcst.subprocess"
|
245
|
+
)
|
202
246
|
def test_system_detector_gpu_detected(self, mock_subprocess, mock_platform):
|
203
247
|
"""Test SystemDetector when GPU is detected."""
|
204
248
|
# Mock platform calls
|
205
|
-
mock_platform.system.return_value =
|
206
|
-
mock_platform.machine.return_value =
|
249
|
+
mock_platform.system.return_value = "Linux"
|
250
|
+
mock_platform.machine.return_value = "x86_64"
|
207
251
|
|
208
252
|
# Mock successful nvidia-smi call
|
209
253
|
mock_result = MagicMock()
|
@@ -213,20 +257,20 @@ class TestSystemDetector(unittest.TestCase):
|
|
213
257
|
detector = SystemDetector()
|
214
258
|
|
215
259
|
# Assertions
|
216
|
-
self.assertEqual(detector.os_type,
|
217
|
-
self.assertEqual(detector.architecture,
|
260
|
+
self.assertEqual(detector.os_type, "linux")
|
261
|
+
self.assertEqual(detector.architecture, "x86_64")
|
218
262
|
self.assertTrue(detector.has_nvidia_gpu)
|
219
263
|
self.assertTrue(detector.use_gpu)
|
220
264
|
|
221
|
-
@patch(
|
222
|
-
|
223
|
-
|
224
|
-
|
265
|
+
@patch("aiagents4pharma.talk2knowledgegraphs.utils.extractions.milvus_multimodal_pcst.platform")
|
266
|
+
@patch(
|
267
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions.milvus_multimodal_pcst.subprocess"
|
268
|
+
)
|
225
269
|
def test_system_detector_no_gpu(self, mock_subprocess, mock_platform):
|
226
270
|
"""Test SystemDetector when no GPU is detected."""
|
227
271
|
# Mock platform calls
|
228
|
-
mock_platform.system.return_value =
|
229
|
-
mock_platform.machine.return_value =
|
272
|
+
mock_platform.system.return_value = "Linux"
|
273
|
+
mock_platform.machine.return_value = "x86_64"
|
230
274
|
|
231
275
|
# Mock failed nvidia-smi call
|
232
276
|
mock_result = MagicMock()
|
@@ -236,20 +280,20 @@ class TestSystemDetector(unittest.TestCase):
|
|
236
280
|
detector = SystemDetector()
|
237
281
|
|
238
282
|
# Assertions
|
239
|
-
self.assertEqual(detector.os_type,
|
240
|
-
self.assertEqual(detector.architecture,
|
283
|
+
self.assertEqual(detector.os_type, "linux")
|
284
|
+
self.assertEqual(detector.architecture, "x86_64")
|
241
285
|
self.assertFalse(detector.has_nvidia_gpu)
|
242
286
|
self.assertFalse(detector.use_gpu)
|
243
287
|
|
244
|
-
@patch(
|
245
|
-
|
246
|
-
|
247
|
-
|
288
|
+
@patch("aiagents4pharma.talk2knowledgegraphs.utils.extractions.milvus_multimodal_pcst.platform")
|
289
|
+
@patch(
|
290
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions.milvus_multimodal_pcst.subprocess"
|
291
|
+
)
|
248
292
|
def test_system_detector_macos_no_gpu(self, mock_subprocess, mock_platform):
|
249
293
|
"""Test SystemDetector on macOS (no GPU support)."""
|
250
294
|
# Mock platform calls
|
251
|
-
mock_platform.system.return_value =
|
252
|
-
mock_platform.machine.return_value =
|
295
|
+
mock_platform.system.return_value = "Darwin"
|
296
|
+
mock_platform.machine.return_value = "arm64"
|
253
297
|
|
254
298
|
# Mock successful nvidia-smi call (but macOS should still disable GPU)
|
255
299
|
mock_result = MagicMock()
|
@@ -259,20 +303,20 @@ class TestSystemDetector(unittest.TestCase):
|
|
259
303
|
detector = SystemDetector()
|
260
304
|
|
261
305
|
# Assertions
|
262
|
-
self.assertEqual(detector.os_type,
|
263
|
-
self.assertEqual(detector.architecture,
|
306
|
+
self.assertEqual(detector.os_type, "darwin")
|
307
|
+
self.assertEqual(detector.architecture, "arm64")
|
264
308
|
self.assertTrue(detector.has_nvidia_gpu) # GPU detected
|
265
309
|
self.assertFalse(detector.use_gpu) # But not used on macOS
|
266
310
|
|
267
|
-
@patch(
|
268
|
-
|
269
|
-
|
270
|
-
|
311
|
+
@patch("aiagents4pharma.talk2knowledgegraphs.utils.extractions.milvus_multimodal_pcst.platform")
|
312
|
+
@patch(
|
313
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions.milvus_multimodal_pcst.subprocess"
|
314
|
+
)
|
271
315
|
def test_system_detector_subprocess_exception(self, mock_subprocess, mock_platform):
|
272
316
|
"""Test SystemDetector when subprocess raises exception."""
|
273
317
|
# Mock platform calls
|
274
|
-
mock_platform.system.return_value =
|
275
|
-
mock_platform.machine.return_value =
|
318
|
+
mock_platform.system.return_value = "Linux"
|
319
|
+
mock_platform.machine.return_value = "x86_64"
|
276
320
|
|
277
321
|
# Mock subprocess to raise FileNotFoundError
|
278
322
|
mock_subprocess.run.side_effect = FileNotFoundError("nvidia-smi not found")
|
@@ -282,20 +326,20 @@ class TestSystemDetector(unittest.TestCase):
|
|
282
326
|
detector = SystemDetector()
|
283
327
|
|
284
328
|
# Assertions
|
285
|
-
self.assertEqual(detector.os_type,
|
286
|
-
self.assertEqual(detector.architecture,
|
329
|
+
self.assertEqual(detector.os_type, "linux")
|
330
|
+
self.assertEqual(detector.architecture, "x86_64")
|
287
331
|
self.assertFalse(detector.has_nvidia_gpu)
|
288
332
|
self.assertFalse(detector.use_gpu)
|
289
333
|
|
290
|
-
@patch(
|
291
|
-
|
292
|
-
|
293
|
-
|
334
|
+
@patch("aiagents4pharma.talk2knowledgegraphs.utils.extractions.milvus_multimodal_pcst.platform")
|
335
|
+
@patch(
|
336
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions.milvus_multimodal_pcst.subprocess"
|
337
|
+
)
|
294
338
|
def test_system_detector_timeout(self, mock_subprocess, mock_platform):
|
295
339
|
"""Test SystemDetector when subprocess times out."""
|
296
340
|
# Mock platform calls
|
297
|
-
mock_platform.system.return_value =
|
298
|
-
mock_platform.machine.return_value =
|
341
|
+
mock_platform.system.return_value = "Linux"
|
342
|
+
mock_platform.machine.return_value = "x86_64"
|
299
343
|
|
300
344
|
# Mock subprocess to raise TimeoutExpired
|
301
345
|
mock_subprocess.TimeoutExpired = Exception
|
@@ -305,20 +349,25 @@ class TestSystemDetector(unittest.TestCase):
|
|
305
349
|
detector = SystemDetector()
|
306
350
|
|
307
351
|
# Assertions
|
308
|
-
self.assertEqual(detector.os_type,
|
309
|
-
self.assertEqual(detector.architecture,
|
352
|
+
self.assertEqual(detector.os_type, "linux")
|
353
|
+
self.assertEqual(detector.architecture, "x86_64")
|
310
354
|
self.assertFalse(detector.has_nvidia_gpu)
|
311
355
|
self.assertFalse(detector.use_gpu)
|
312
356
|
|
313
357
|
def test_get_system_info(self):
|
314
358
|
"""Test get_system_info method."""
|
315
|
-
with
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
359
|
+
with (
|
360
|
+
patch(
|
361
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions."
|
362
|
+
"milvus_multimodal_pcst.platform"
|
363
|
+
) as mock_platform,
|
364
|
+
patch(
|
365
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions."
|
366
|
+
"milvus_multimodal_pcst.subprocess"
|
367
|
+
) as mock_subprocess,
|
368
|
+
):
|
369
|
+
mock_platform.system.return_value = "Linux"
|
370
|
+
mock_platform.machine.return_value = "x86_64"
|
322
371
|
|
323
372
|
mock_result = MagicMock()
|
324
373
|
mock_result.returncode = 0
|
@@ -337,13 +386,18 @@ class TestSystemDetector(unittest.TestCase):
|
|
337
386
|
|
338
387
|
def test_is_gpu_compatible(self):
|
339
388
|
"""Test is_gpu_compatible method."""
|
340
|
-
with
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
389
|
+
with (
|
390
|
+
patch(
|
391
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions."
|
392
|
+
"milvus_multimodal_pcst.platform"
|
393
|
+
) as mock_platform,
|
394
|
+
patch(
|
395
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions."
|
396
|
+
"milvus_multimodal_pcst.subprocess"
|
397
|
+
) as mock_subprocess,
|
398
|
+
):
|
399
|
+
mock_platform.system.return_value = "Linux"
|
400
|
+
mock_platform.machine.return_value = "x86_64"
|
347
401
|
|
348
402
|
mock_result = MagicMock()
|
349
403
|
mock_result.returncode = 0
|
@@ -375,14 +429,17 @@ class TestDynamicLibraryLoader(unittest.TestCase):
|
|
375
429
|
self.assertFalse(loader.normalize_vectors)
|
376
430
|
self.assertEqual(loader.metric_type, "COSINE")
|
377
431
|
|
378
|
-
@patch.dict(
|
432
|
+
@patch.dict("sys.modules", {"cupy": MagicMock(), "cudf": MagicMock()})
|
379
433
|
def test_dynamic_library_loader_gpu_mode_success(self):
|
380
434
|
"""Test DynamicLibraryLoader in GPU mode with successful imports."""
|
381
435
|
self.mock_detector.use_gpu = True
|
382
436
|
|
383
437
|
# Mock the CUDF_AVAILABLE flag
|
384
|
-
with patch(
|
385
|
-
|
438
|
+
with patch(
|
439
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions."
|
440
|
+
"milvus_multimodal_pcst.CUDF_AVAILABLE",
|
441
|
+
True,
|
442
|
+
):
|
386
443
|
loader = DynamicLibraryLoader(self.mock_detector)
|
387
444
|
|
388
445
|
# Assertions
|
@@ -395,8 +452,11 @@ class TestDynamicLibraryLoader(unittest.TestCase):
|
|
395
452
|
self.mock_detector.use_gpu = True
|
396
453
|
|
397
454
|
# Mock CUDF_AVAILABLE as False to simulate import failure
|
398
|
-
with patch(
|
399
|
-
|
455
|
+
with patch(
|
456
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions."
|
457
|
+
"milvus_multimodal_pcst.CUDF_AVAILABLE",
|
458
|
+
False,
|
459
|
+
):
|
400
460
|
loader = DynamicLibraryLoader(self.mock_detector)
|
401
461
|
|
402
462
|
# Should fallback to CPU mode
|
@@ -446,13 +506,16 @@ class TestDynamicLibraryLoader(unittest.TestCase):
|
|
446
506
|
# Should return matrix unchanged in CPU mode even when normalize_vectors is True
|
447
507
|
np.testing.assert_array_equal(result, matrix)
|
448
508
|
|
449
|
-
@patch.dict(
|
509
|
+
@patch.dict("sys.modules", {"cupy": MagicMock(), "cudf": MagicMock()})
|
450
510
|
def test_normalize_matrix_gpu_mode(self):
|
451
511
|
"""Test normalize_matrix in GPU mode."""
|
452
512
|
self.mock_detector.use_gpu = True
|
453
513
|
|
454
|
-
with patch(
|
455
|
-
|
514
|
+
with patch(
|
515
|
+
"aiagents4pharma.talk2knowledgegraphs.utils.extractions."
|
516
|
+
"milvus_multimodal_pcst.CUDF_AVAILABLE",
|
517
|
+
True,
|
518
|
+
):
|
456
519
|
loader = DynamicLibraryLoader(self.mock_detector)
|
457
520
|
|
458
521
|
# Mock cupy operations
|
@@ -2,9 +2,10 @@
|
|
2
2
|
Test cases for utils/kg_utils.py
|
3
3
|
"""
|
4
4
|
|
5
|
-
import pytest
|
6
5
|
import networkx as nx
|
7
6
|
import pandas as pd
|
7
|
+
import pytest
|
8
|
+
|
8
9
|
from ..utils import kg_utils
|
9
10
|
|
10
11
|
|
@@ -62,9 +63,7 @@ def test_df_pandas_to_kg():
|
|
62
63
|
}
|
63
64
|
df_edges = pd.DataFrame(edges_data)
|
64
65
|
|
65
|
-
kg = kg_utils.df_pandas_to_kg(
|
66
|
-
df_edges, df_nodes_attrs, "node_source", "node_target"
|
67
|
-
)
|
66
|
+
kg = kg_utils.df_pandas_to_kg(df_edges, df_nodes_attrs, "node_source", "node_target")
|
68
67
|
|
69
68
|
assert len(kg.nodes) == 2
|
70
69
|
assert len(kg.edges) == 1
|