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,78 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Test cases for utils/kg_utils.py
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import networkx as nx
|
|
6
|
+
import pandas as pd
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
from ..utils import kg_utils
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@pytest.fixture(name="sample_graph")
|
|
13
|
+
def make_sample_graph():
|
|
14
|
+
"""Return a sample graph"""
|
|
15
|
+
sg = nx.Graph()
|
|
16
|
+
sg.add_node(1, node_id=1, feature_id="A", feature_value="ValueA")
|
|
17
|
+
sg.add_node(2, node_id=2, feature_id="B", feature_value="ValueB")
|
|
18
|
+
sg.add_edge(1, 2, edge_id=1, feature_id="E", feature_value="EdgeValue")
|
|
19
|
+
return sg
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def test_kg_to_df_pandas(sample_graph):
|
|
23
|
+
"""Test the kg_to_df_pandas function"""
|
|
24
|
+
df_nodes, df_edges = kg_utils.kg_to_df_pandas(sample_graph)
|
|
25
|
+
print(df_nodes)
|
|
26
|
+
expected_nodes_data = {
|
|
27
|
+
"node_id": [1, 2],
|
|
28
|
+
"feature_id": ["A", "B"],
|
|
29
|
+
"feature_value": ["ValueA", "ValueB"],
|
|
30
|
+
}
|
|
31
|
+
expected_nodes_df = pd.DataFrame(expected_nodes_data, index=[1, 2])
|
|
32
|
+
print(expected_nodes_df)
|
|
33
|
+
expected_edges_data = {
|
|
34
|
+
"node_source": [1],
|
|
35
|
+
"node_target": [2],
|
|
36
|
+
"edge_id": [1],
|
|
37
|
+
"feature_id": ["E"],
|
|
38
|
+
"feature_value": ["EdgeValue"],
|
|
39
|
+
}
|
|
40
|
+
expected_edges_df = pd.DataFrame(expected_edges_data)
|
|
41
|
+
|
|
42
|
+
# Assert that the dataframes are equal but the order of columns may be different
|
|
43
|
+
# Ignore the index of the dataframes
|
|
44
|
+
pd.testing.assert_frame_equal(df_nodes, expected_nodes_df, check_like=True)
|
|
45
|
+
pd.testing.assert_frame_equal(df_edges, expected_edges_df, check_like=True)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_df_pandas_to_kg():
|
|
49
|
+
"""Test the df_pandas_to_kg function"""
|
|
50
|
+
nodes_data = {
|
|
51
|
+
"node_id": [1, 2],
|
|
52
|
+
"feature_id": ["A", "B"],
|
|
53
|
+
"feature_value": ["ValueA", "ValueB"],
|
|
54
|
+
}
|
|
55
|
+
df_nodes_attrs = pd.DataFrame(nodes_data).set_index("node_id")
|
|
56
|
+
|
|
57
|
+
edges_data = {
|
|
58
|
+
"node_source": [1],
|
|
59
|
+
"node_target": [2],
|
|
60
|
+
"edge_id": [1],
|
|
61
|
+
"feature_id": ["E"],
|
|
62
|
+
"feature_value": ["EdgeValue"],
|
|
63
|
+
}
|
|
64
|
+
df_edges = pd.DataFrame(edges_data)
|
|
65
|
+
|
|
66
|
+
kg = kg_utils.df_pandas_to_kg(df_edges, df_nodes_attrs, "node_source", "node_target")
|
|
67
|
+
|
|
68
|
+
assert len(kg.nodes) == 2
|
|
69
|
+
assert len(kg.edges) == 1
|
|
70
|
+
|
|
71
|
+
assert kg.nodes[1]["feature_id"] == "A"
|
|
72
|
+
assert kg.nodes[1]["feature_value"] == "ValueA"
|
|
73
|
+
assert kg.nodes[2]["feature_id"] == "B"
|
|
74
|
+
assert kg.nodes[2]["feature_value"] == "ValueB"
|
|
75
|
+
|
|
76
|
+
assert kg.edges[1, 2]["feature_id"] == "E"
|
|
77
|
+
assert kg.edges[1, 2]["feature_value"] == "EdgeValue"
|
|
78
|
+
assert kg.edges[1, 2]["edge_id"] == 1
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Test cases for utils/pubchem_utils.py
|
|
3
|
+
|
|
4
|
+
These tests mock PubChem HTTP calls to avoid network dependency and verify
|
|
5
|
+
parsing logic without modifying business logic.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from types import SimpleNamespace
|
|
9
|
+
|
|
10
|
+
import pytest
|
|
11
|
+
|
|
12
|
+
from ..utils import pubchem_utils
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _resp(json_data):
|
|
16
|
+
"""Create a minimal response-like object exposing .json()."""
|
|
17
|
+
return SimpleNamespace(json=lambda: json_data)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@pytest.fixture(autouse=True)
|
|
21
|
+
def mock_requests_get(monkeypatch):
|
|
22
|
+
"""Mock requests.get used by pubchem_utils to return deterministic JSON."""
|
|
23
|
+
|
|
24
|
+
def _mock_get(url, _timeout=60, **_kwargs):
|
|
25
|
+
# CAS RN lookup: ethyl carbonate 105-58-8 -> CID 7766
|
|
26
|
+
if "substance/xref/RN/105-58-8/record/JSON" in url:
|
|
27
|
+
return _resp(
|
|
28
|
+
{"PC_Substances": [{"compound": [{"id": {"type": 1, "id": {"cid": 7766}}}]}]}
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# DrugBank: DB00240 (Alclometasone) -> CID 5311000
|
|
32
|
+
if (
|
|
33
|
+
"substance/sourceid//drugbank/DB00240/JSON" in url
|
|
34
|
+
or "substance/sourceid/drugbank/DB00240/JSON" in url
|
|
35
|
+
):
|
|
36
|
+
return _resp(
|
|
37
|
+
{"PC_Substances": [{"compound": [{"id": {"type": 1, "id": {"cid": 5311000}}}]}]}
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
# CTD: D002083 (Butylated Hydroxyanisole) -> CID 24667
|
|
41
|
+
if (
|
|
42
|
+
"substance/sourceid//comparative toxicogenomics database/D002083/JSON" in url
|
|
43
|
+
or "substance/sourceid/comparative toxicogenomics database/D002083/JSON" in url
|
|
44
|
+
):
|
|
45
|
+
return _resp(
|
|
46
|
+
{"PC_Substances": [{"compound": [{"id": {"type": 1, "id": {"cid": 24667}}}]}]}
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
# CID description for 5311000
|
|
50
|
+
if (
|
|
51
|
+
"compound/cid//5311000/description/JSON" in url
|
|
52
|
+
or "compound/cid/5311000/description/JSON" in url
|
|
53
|
+
):
|
|
54
|
+
return _resp(
|
|
55
|
+
{
|
|
56
|
+
"InformationList": {
|
|
57
|
+
"Information": [
|
|
58
|
+
{
|
|
59
|
+
"Description": (
|
|
60
|
+
"Alclometasone is a prednisolone compound having an "
|
|
61
|
+
"alpha-chloro substituent at the 9alpha-position."
|
|
62
|
+
),
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
# Default empty response
|
|
70
|
+
return _resp({})
|
|
71
|
+
|
|
72
|
+
monkeypatch.setattr(pubchem_utils.requests, "get", _mock_get)
|
|
73
|
+
return _mock_get
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def test_cas_rn2pubchem_cid():
|
|
77
|
+
"""
|
|
78
|
+
Test the casRN2pubchem_cid function.
|
|
79
|
+
|
|
80
|
+
The CAS RN for ethyl carbonate is 105-58-8.
|
|
81
|
+
The PubChem CID for ethyl carbonate is 7766.
|
|
82
|
+
"""
|
|
83
|
+
casrn = "105-58-8"
|
|
84
|
+
pubchem_cid = pubchem_utils.cas_rn2pubchem_cid(casrn)
|
|
85
|
+
assert pubchem_cid == 7766
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def test_external_id2pubchem_cid():
|
|
89
|
+
"""
|
|
90
|
+
Test the external_id2pubchem_cid function.
|
|
91
|
+
|
|
92
|
+
The DrugBank ID for Alclometasone is DB00240 -> CID 5311000.
|
|
93
|
+
The CTD ID for Butylated Hydroxyanisole is D002083 -> CID 24667.
|
|
94
|
+
"""
|
|
95
|
+
drugbank_id = "DB00240"
|
|
96
|
+
pubchem_cid = pubchem_utils.external_id2pubchem_cid("drugbank", drugbank_id)
|
|
97
|
+
assert pubchem_cid == 5311000
|
|
98
|
+
|
|
99
|
+
ctd_id = "D002083"
|
|
100
|
+
pubchem_cid = pubchem_utils.external_id2pubchem_cid(
|
|
101
|
+
"comparative toxicogenomics database", ctd_id
|
|
102
|
+
)
|
|
103
|
+
assert pubchem_cid == 24667
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def test_pubchem_cid_description():
|
|
107
|
+
"""
|
|
108
|
+
Test the pubchem_cid_description function.
|
|
109
|
+
|
|
110
|
+
The PubChem CID for Alclometasone is 5311000.
|
|
111
|
+
The description starts with the expected prefix.
|
|
112
|
+
"""
|
|
113
|
+
pubchem_cid = 5311000
|
|
114
|
+
description = pubchem_utils.pubchem_cid_description(pubchem_cid)
|
|
115
|
+
assert description.startswith(
|
|
116
|
+
"Alclometasone is a prednisolone compound having an alpha-chloro substituent"
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def test_mock_fallback_path_coverage():
|
|
121
|
+
"""Exercise the default branch of the mocked requests.get for coverage."""
|
|
122
|
+
resp = pubchem_utils.requests.get("unknown://unmatched/url", timeout=1)
|
|
123
|
+
assert resp.json() == {}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Tool for performing Graph RAG reasoning.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
from typing import Annotated
|
|
7
|
+
|
|
8
|
+
import hydra
|
|
9
|
+
from langchain.chains.combine_documents import create_stuff_documents_chain
|
|
10
|
+
from langchain.chains.retrieval import create_retrieval_chain
|
|
11
|
+
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
|
12
|
+
from langchain_community.document_loaders import PyPDFLoader
|
|
13
|
+
from langchain_core.messages import ToolMessage
|
|
14
|
+
from langchain_core.prompts import ChatPromptTemplate
|
|
15
|
+
from langchain_core.tools import BaseTool
|
|
16
|
+
from langchain_core.tools.base import InjectedToolCallId
|
|
17
|
+
from langchain_core.vectorstores import InMemoryVectorStore
|
|
18
|
+
from langgraph.prebuilt import InjectedState
|
|
19
|
+
from langgraph.types import Command
|
|
20
|
+
from pydantic import BaseModel, Field
|
|
21
|
+
|
|
22
|
+
# Initialize logger
|
|
23
|
+
logging.basicConfig(level=logging.INFO)
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class GraphRAGReasoningInput(BaseModel):
|
|
28
|
+
"""
|
|
29
|
+
GraphRAGReasoningInput is a Pydantic model representing an input for Graph RAG reasoning.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
state: Injected state.
|
|
33
|
+
prompt: Prompt to interact with the backend.
|
|
34
|
+
extraction_name: Name assigned to the subgraph extraction process
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
tool_call_id: Annotated[str, InjectedToolCallId] = Field(description="Tool call ID.")
|
|
38
|
+
state: Annotated[dict, InjectedState] = Field(description="Injected state.")
|
|
39
|
+
prompt: str = Field(description="Prompt to interact with the backend.")
|
|
40
|
+
extraction_name: str = Field(
|
|
41
|
+
description="""Name assigned to the subgraph extraction process
|
|
42
|
+
when the subgraph_extraction tool is invoked."""
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class GraphRAGReasoningTool(BaseTool):
|
|
47
|
+
"""
|
|
48
|
+
This tool performs reasoning using a Graph Retrieval-Augmented Generation (RAG) approach
|
|
49
|
+
over user's request by considering textualized subgraph context and document context.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
name: str = "graphrag_reasoning"
|
|
53
|
+
description: str = """A tool to perform reasoning using a Graph RAG approach
|
|
54
|
+
by considering textualized subgraph context and document context."""
|
|
55
|
+
args_schema: type[BaseModel] = GraphRAGReasoningInput
|
|
56
|
+
|
|
57
|
+
def _run(
|
|
58
|
+
self,
|
|
59
|
+
tool_call_id: Annotated[str, InjectedToolCallId],
|
|
60
|
+
state: Annotated[dict, InjectedState],
|
|
61
|
+
prompt: str,
|
|
62
|
+
extraction_name: str,
|
|
63
|
+
):
|
|
64
|
+
"""
|
|
65
|
+
Run the Graph RAG reasoning tool.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
tool_call_id: The tool call ID.
|
|
69
|
+
state: The injected state.
|
|
70
|
+
prompt: The prompt to interact with the backend.
|
|
71
|
+
extraction_name: The name assigned to the subgraph extraction process.
|
|
72
|
+
"""
|
|
73
|
+
logger.log(logging.INFO, "Invoking graphrag_reasoning tool for %s", extraction_name)
|
|
74
|
+
|
|
75
|
+
# Load Hydra configuration
|
|
76
|
+
with hydra.initialize(version_base=None, config_path="../configs"):
|
|
77
|
+
cfg = hydra.compose(
|
|
78
|
+
config_name="config", overrides=["tools/graphrag_reasoning=default"]
|
|
79
|
+
)
|
|
80
|
+
cfg = cfg.tools.graphrag_reasoning
|
|
81
|
+
|
|
82
|
+
# Prepare documents
|
|
83
|
+
all_docs = []
|
|
84
|
+
if len(state["uploaded_files"]) != 0:
|
|
85
|
+
for uploaded_file in state["uploaded_files"]:
|
|
86
|
+
if uploaded_file["file_type"] == "drug_data":
|
|
87
|
+
# Load documents
|
|
88
|
+
raw_documents = PyPDFLoader(file_path=uploaded_file["file_path"]).load()
|
|
89
|
+
|
|
90
|
+
# Split documents
|
|
91
|
+
# May need to find an optimal chunk size and overlap configuration
|
|
92
|
+
documents = RecursiveCharacterTextSplitter(
|
|
93
|
+
chunk_size=cfg.splitter_chunk_size,
|
|
94
|
+
chunk_overlap=cfg.splitter_chunk_overlap,
|
|
95
|
+
).split_documents(raw_documents)
|
|
96
|
+
|
|
97
|
+
# Add documents to the list
|
|
98
|
+
all_docs.extend(documents)
|
|
99
|
+
|
|
100
|
+
# Load the extracted graph
|
|
101
|
+
extracted_graph = {dic["name"]: dic for dic in state["dic_extracted_graph"]}
|
|
102
|
+
# logger.log(logging.INFO, "Extracted graph: %s", extracted_graph)
|
|
103
|
+
|
|
104
|
+
# Set another prompt template
|
|
105
|
+
prompt_template = ChatPromptTemplate.from_messages(
|
|
106
|
+
[("system", cfg.prompt_graphrag_w_docs), ("human", "{input}")]
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
# Prepare chain with retrieved documents
|
|
110
|
+
qa_chain = create_stuff_documents_chain(state["llm_model"], prompt_template)
|
|
111
|
+
rag_chain = create_retrieval_chain(
|
|
112
|
+
InMemoryVectorStore.from_documents(
|
|
113
|
+
documents=all_docs, embedding=state["embedding_model"]
|
|
114
|
+
).as_retriever(
|
|
115
|
+
search_type=cfg.retriever_search_type,
|
|
116
|
+
search_kwargs={
|
|
117
|
+
"k": cfg.retriever_k,
|
|
118
|
+
"fetch_k": cfg.retriever_fetch_k,
|
|
119
|
+
"lambda_mult": cfg.retriever_lambda_mult,
|
|
120
|
+
},
|
|
121
|
+
),
|
|
122
|
+
qa_chain,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
# Invoke the chain
|
|
126
|
+
response = rag_chain.invoke(
|
|
127
|
+
{
|
|
128
|
+
"input": prompt,
|
|
129
|
+
"subgraph_summary": extracted_graph[extraction_name]["graph_summary"],
|
|
130
|
+
}
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
return Command(
|
|
134
|
+
update={
|
|
135
|
+
# update the message history
|
|
136
|
+
"messages": [ToolMessage(content=response, tool_call_id=tool_call_id)]
|
|
137
|
+
}
|
|
138
|
+
)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""
|
|
2
|
+
A utility module for defining the dataclasses
|
|
3
|
+
for the arguments to set up initial settings
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from typing import Annotated
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@dataclass
|
|
11
|
+
class ArgumentData:
|
|
12
|
+
"""
|
|
13
|
+
Dataclass for storing the argument data.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
extraction_name: Annotated[
|
|
17
|
+
str,
|
|
18
|
+
"""An AI assigned _ separated name of the subgraph extraction
|
|
19
|
+
based on human query and the context of the graph reasoning
|
|
20
|
+
experiment.
|
|
21
|
+
This must be set before the subgraph extraction is invoked.""",
|
|
22
|
+
]
|