tooluniverse 1.0.6__py3-none-any.whl → 1.0.8__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.
Potentially problematic release.
This version of tooluniverse might be problematic. Click here for more details.
- tooluniverse/__init__.py +56 -10
- tooluniverse/admetai_tool.py +8 -4
- tooluniverse/agentic_tool.py +40 -4
- tooluniverse/arxiv_tool.py +2 -6
- tooluniverse/base_tool.py +210 -25
- tooluniverse/biogrid_tool.py +118 -0
- tooluniverse/biorxiv_tool.py +35 -16
- tooluniverse/build_optimizer.py +87 -0
- tooluniverse/cache/__init__.py +3 -0
- tooluniverse/cache/memory_cache.py +99 -0
- tooluniverse/cache/result_cache_manager.py +235 -0
- tooluniverse/cache/sqlite_backend.py +257 -0
- tooluniverse/cellosaurus_tool.py +1332 -0
- tooluniverse/clinvar_tool.py +90 -0
- tooluniverse/compose_scripts/enhanced_multi_agent_literature_search.py +310 -0
- tooluniverse/compose_scripts/multi_agent_literature_search.py +794 -0
- tooluniverse/compose_scripts/tool_graph_generation.py +68 -35
- tooluniverse/compose_scripts/tool_metadata_generator.py +205 -105
- tooluniverse/compose_tool.py +93 -8
- tooluniverse/core_tool.py +46 -44
- tooluniverse/crossref_tool.py +89 -4
- tooluniverse/custom_tool.py +28 -0
- tooluniverse/data/agentic_tools.json +1271 -1179
- tooluniverse/data/alphafold_tools.json +356 -105
- tooluniverse/data/arxiv_tools.json +85 -81
- tooluniverse/data/biorxiv_tools.json +69 -64
- tooluniverse/data/cellosaurus_tools.json +260 -0
- tooluniverse/data/chembl_tools.json +27 -12
- tooluniverse/data/clinicaltrials_gov_tools.json +377 -302
- tooluniverse/data/compose_tools.json +123 -16
- tooluniverse/data/core_tools.json +104 -99
- tooluniverse/data/crossref_tools.json +131 -63
- tooluniverse/data/dailymed_tools.json +17 -3
- tooluniverse/data/dataset_tools.json +1031 -588
- tooluniverse/data/dblp_tools.json +135 -64
- tooluniverse/data/disease_target_score_tools.json +20 -10
- tooluniverse/data/doaj_tools.json +131 -87
- tooluniverse/data/drug_discovery_agents.json +292 -0
- tooluniverse/data/embedding_tools.json +362 -299
- tooluniverse/data/enrichr_tools.json +34 -27
- tooluniverse/data/europe_pmc_tools.json +107 -16
- tooluniverse/data/fatcat_tools.json +71 -66
- tooluniverse/data/fda_drug_adverse_event_tools.json +1061 -445
- tooluniverse/data/fda_drug_labeling_tools.json +6858 -6901
- tooluniverse/data/finder_tools.json +32 -37
- tooluniverse/data/gene_ontology_tools.json +19 -7
- tooluniverse/data/genomics_tools.json +174 -0
- tooluniverse/data/geo_tools.json +86 -0
- tooluniverse/data/gwas_tools.json +1720 -959
- tooluniverse/data/hal_tools.json +69 -64
- tooluniverse/data/hpa_tools.json +53 -14
- tooluniverse/data/humanbase_tools.json +51 -43
- tooluniverse/data/idmap_tools.json +76 -70
- tooluniverse/data/literature_search_tools.json +306 -0
- tooluniverse/data/markitdown_tools.json +51 -0
- tooluniverse/data/mcp_client_tools_example.json +122 -107
- tooluniverse/data/medlineplus_tools.json +50 -10
- tooluniverse/data/medrxiv_tools.json +69 -64
- tooluniverse/data/molecule_2d_tools.json +134 -0
- tooluniverse/data/molecule_3d_tools.json +164 -0
- tooluniverse/data/monarch_tools.json +112 -110
- tooluniverse/data/odphp_tools.json +389 -119
- tooluniverse/data/openaire_tools.json +89 -79
- tooluniverse/data/openalex_tools.json +96 -31
- tooluniverse/data/opentarget_tools.json +1457 -1372
- tooluniverse/data/osf_preprints_tools.json +77 -73
- tooluniverse/data/packages/bioinformatics_core_tools.json +40 -10
- tooluniverse/data/packages/cheminformatics_tools.json +20 -5
- tooluniverse/data/packages/genomics_tools.json +36 -9
- tooluniverse/data/packages/machine_learning_tools.json +36 -9
- tooluniverse/data/packages/scientific_computing_tools.json +20 -5
- tooluniverse/data/packages/single_cell_tools.json +20 -5
- tooluniverse/data/packages/structural_biology_tools.json +16 -4
- tooluniverse/data/packages/visualization_tools.json +20 -5
- tooluniverse/data/pmc_tools.json +108 -103
- tooluniverse/data/ppi_tools.json +139 -0
- tooluniverse/data/protein_structure_3d_tools.json +138 -0
- tooluniverse/data/pubchem_tools.json +37 -12
- tooluniverse/data/pubmed_tools.json +124 -58
- tooluniverse/data/pubtator_tools.json +68 -60
- tooluniverse/data/rcsb_pdb_tools.json +1532 -1221
- tooluniverse/data/semantic_scholar_tools.json +54 -22
- tooluniverse/data/special_tools.json +8 -6
- tooluniverse/data/tool_composition_tools.json +112 -82
- tooluniverse/data/unified_guideline_tools.json +909 -0
- tooluniverse/data/url_fetch_tools.json +102 -82
- tooluniverse/data/uspto_tools.json +49 -30
- tooluniverse/data/wikidata_sparql_tools.json +42 -39
- tooluniverse/data/xml_tools.json +3274 -3113
- tooluniverse/data/zenodo_tools.json +83 -76
- tooluniverse/dblp_tool.py +76 -6
- tooluniverse/dbsnp_tool.py +71 -0
- tooluniverse/default_config.py +19 -0
- tooluniverse/doaj_tool.py +76 -17
- tooluniverse/doctor.py +48 -0
- tooluniverse/ensembl_tool.py +61 -0
- tooluniverse/europe_pmc_tool.py +132 -17
- tooluniverse/exceptions.py +170 -0
- tooluniverse/execute_function.py +930 -387
- tooluniverse/fatcat_tool.py +0 -1
- tooluniverse/generate_tools.py +481 -0
- tooluniverse/genomics_gene_search_tool.py +56 -0
- tooluniverse/geo_tool.py +116 -0
- tooluniverse/gnomad_tool.py +63 -0
- tooluniverse/hal_tool.py +1 -1
- tooluniverse/llm_clients.py +101 -124
- tooluniverse/markitdown_tool.py +159 -0
- tooluniverse/mcp_client_tool.py +10 -5
- tooluniverse/mcp_tool_registry.py +4 -1
- tooluniverse/medrxiv_tool.py +32 -13
- tooluniverse/memory_manager.py +166 -0
- tooluniverse/molecule_2d_tool.py +274 -0
- tooluniverse/molecule_3d_tool.py +441 -0
- tooluniverse/odphp_tool.py +49 -14
- tooluniverse/openaire_tool.py +5 -20
- tooluniverse/openalex_tool.py +34 -0
- tooluniverse/osf_preprints_tool.py +1 -1
- tooluniverse/pmc_tool.py +54 -56
- tooluniverse/protein_structure_3d_tool.py +295 -0
- tooluniverse/pubmed_tool.py +69 -6
- tooluniverse/remote/boltz/boltz_mcp_server.py +3 -1
- tooluniverse/remote/uspto_downloader/uspto_downloader_mcp_server.py +3 -1
- tooluniverse/semantic_scholar_tool.py +40 -10
- tooluniverse/smcp.py +149 -213
- tooluniverse/smcp_server.py +97 -55
- tooluniverse/string_tool.py +112 -0
- tooluniverse/tool_registry.py +35 -3
- tooluniverse/tools/ADMETAI_predict_BBB_penetrance.py +46 -0
- tooluniverse/tools/ADMETAI_predict_CYP_interactions.py +46 -0
- tooluniverse/tools/ADMETAI_predict_bioavailability.py +46 -0
- tooluniverse/tools/ADMETAI_predict_clearance_distribution.py +49 -0
- tooluniverse/tools/ADMETAI_predict_nuclear_receptor_activity.py +49 -0
- tooluniverse/tools/ADMETAI_predict_physicochemical_properties.py +49 -0
- tooluniverse/tools/ADMETAI_predict_solubility_lipophilicity_hydration.py +49 -0
- tooluniverse/tools/ADMETAI_predict_stress_response.py +46 -0
- tooluniverse/tools/ADMETAI_predict_toxicity.py +46 -0
- tooluniverse/tools/ADMETAnalyzerAgent.py +59 -0
- tooluniverse/tools/AdvancedCodeQualityAnalyzer.py +63 -0
- tooluniverse/tools/AdverseEventICDMapper.py +46 -0
- tooluniverse/tools/AdverseEventPredictionQuestionGenerator.py +52 -0
- tooluniverse/tools/AdverseEventPredictionQuestionGeneratorWithContext.py +59 -0
- tooluniverse/tools/ArXiv_search_papers.py +63 -0
- tooluniverse/tools/ArgumentDescriptionOptimizer.py +55 -0
- tooluniverse/tools/BioRxiv_search_preprints.py +52 -0
- tooluniverse/tools/BiomarkerDiscoveryWorkflow.py +55 -0
- tooluniverse/tools/CMA_Guidelines_Search.py +52 -0
- tooluniverse/tools/CORE_search_papers.py +67 -0
- tooluniverse/tools/CallAgent.py +46 -0
- tooluniverse/tools/ChEMBL_search_similar_molecules.py +59 -0
- tooluniverse/tools/ClinVar_search_variants.py +52 -0
- tooluniverse/tools/ClinicalTrialDesignAgent.py +63 -0
- tooluniverse/tools/CodeOptimizer.py +55 -0
- tooluniverse/tools/CodeQualityAnalyzer.py +71 -0
- tooluniverse/tools/CompoundDiscoveryAgent.py +59 -0
- tooluniverse/tools/ComprehensiveDrugDiscoveryPipeline.py +49 -0
- tooluniverse/tools/Crossref_search_works.py +55 -0
- tooluniverse/tools/DBLP_search_publications.py +52 -0
- tooluniverse/tools/DOAJ_search_articles.py +55 -0
- tooluniverse/tools/DailyMed_get_spl_by_setid.py +52 -0
- tooluniverse/tools/DailyMed_search_spls.py +79 -0
- tooluniverse/tools/DataAnalysisValidityReviewer.py +49 -0
- tooluniverse/tools/DescriptionAnalyzer.py +55 -0
- tooluniverse/tools/DescriptionQualityEvaluator.py +59 -0
- tooluniverse/tools/DiseaseAnalyzerAgent.py +52 -0
- tooluniverse/tools/DomainExpertValidator.py +63 -0
- tooluniverse/tools/DrugInteractionAnalyzerAgent.py +52 -0
- tooluniverse/tools/DrugOptimizationAgent.py +63 -0
- tooluniverse/tools/DrugSafetyAnalyzer.py +59 -0
- tooluniverse/tools/Ensembl_lookup_gene_by_symbol.py +52 -0
- tooluniverse/tools/EthicalComplianceReviewer.py +49 -0
- tooluniverse/tools/EuropePMC_Guidelines_Search.py +52 -0
- tooluniverse/tools/EuropePMC_search_articles.py +52 -0
- tooluniverse/tools/ExperimentalDesignScorer.py +55 -0
- tooluniverse/tools/FAERS_count_additive_administration_routes.py +52 -0
- tooluniverse/tools/FAERS_count_additive_adverse_reactions.py +71 -0
- tooluniverse/tools/FAERS_count_additive_event_reports_by_country.py +63 -0
- tooluniverse/tools/FAERS_count_additive_reaction_outcomes.py +63 -0
- tooluniverse/tools/FAERS_count_additive_reports_by_reporter_country.py +63 -0
- tooluniverse/tools/FAERS_count_additive_seriousness_classification.py +63 -0
- tooluniverse/tools/FAERS_count_country_by_drug_event.py +63 -0
- tooluniverse/tools/FAERS_count_death_related_by_drug.py +49 -0
- tooluniverse/tools/FAERS_count_drug_routes_by_event.py +52 -0
- tooluniverse/tools/FAERS_count_drugs_by_drug_event.py +63 -0
- tooluniverse/tools/FAERS_count_outcomes_by_drug_event.py +63 -0
- tooluniverse/tools/FAERS_count_patient_age_distribution.py +49 -0
- tooluniverse/tools/FAERS_count_reactions_by_drug_event.py +71 -0
- tooluniverse/tools/FAERS_count_reportercountry_by_drug_event.py +63 -0
- tooluniverse/tools/FAERS_count_seriousness_by_drug_event.py +63 -0
- tooluniverse/tools/FDA_get_abuse_dependence_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_abuse_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_accessories_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_active_ingredient_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_adverse_reactions_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_alarms_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_animal_pharmacology_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_assembly_installation_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_boxed_warning_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_brand_name_generic_name.py +52 -0
- tooluniverse/tools/FDA_get_calibration_instructions_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_carcinogenic_mutagenic_fertility_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_child_safety_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_clinical_pharmacology_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_clinical_studies_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_contact_for_questions_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_contraindications_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_controlled_substance_DEA_schedule_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_dear_health_care_provider_letter_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_dependence_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_disposal_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_do_not_use_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_document_id_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_dosage_and_storage_information_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_dosage_forms_and_strengths_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_drug_generic_name.py +46 -0
- tooluniverse/tools/FDA_get_drug_interactions_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_drug_name_by_SPL_ID.py +55 -0
- tooluniverse/tools/FDA_get_drug_name_by_adverse_reaction.py +59 -0
- tooluniverse/tools/FDA_get_drug_name_by_calibration_instructions.py +59 -0
- tooluniverse/tools/FDA_get_drug_name_by_dependence_info.py +59 -0
- tooluniverse/tools/FDA_get_drug_name_by_document_id.py +55 -0
- tooluniverse/tools/FDA_get_drug_name_by_dosage_info.py +55 -0
- tooluniverse/tools/FDA_get_drug_name_by_environmental_warning.py +59 -0
- tooluniverse/tools/FDA_get_drug_name_by_inactive_ingredient.py +59 -0
- tooluniverse/tools/FDA_get_drug_name_by_info_on_conditions_for_doctor_consultation.py +55 -0
- tooluniverse/tools/FDA_get_drug_name_by_labor_and_delivery_info.py +59 -0
- tooluniverse/tools/FDA_get_drug_name_by_microbiology.py +59 -0
- tooluniverse/tools/FDA_get_drug_name_by_other_safety_info.py +55 -0
- tooluniverse/tools/FDA_get_drug_name_by_pharmacodynamics.py +59 -0
- tooluniverse/tools/FDA_get_drug_name_by_pharmacogenomics.py +59 -0
- tooluniverse/tools/FDA_get_drug_name_by_precautions.py +55 -0
- tooluniverse/tools/FDA_get_drug_name_by_pregnancy_or_breastfeeding_info.py +59 -0
- tooluniverse/tools/FDA_get_drug_name_by_principal_display_panel.py +59 -0
- tooluniverse/tools/FDA_get_drug_name_by_reference.py +55 -0
- tooluniverse/tools/FDA_get_drug_name_by_set_id.py +55 -0
- tooluniverse/tools/FDA_get_drug_name_by_stop_use_info.py +55 -0
- tooluniverse/tools/FDA_get_drug_name_by_storage_and_handling_info.py +55 -0
- tooluniverse/tools/FDA_get_drug_name_by_warnings.py +55 -0
- tooluniverse/tools/FDA_get_drug_name_from_patient_package_insert.py +59 -0
- tooluniverse/tools/FDA_get_drug_names_by_abuse_dependence_info.py +55 -0
- tooluniverse/tools/FDA_get_drug_names_by_abuse_info.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_accessories.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_active_ingredient.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_alarm.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_animal_pharmacology_info.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_application_number_NDC_number.py +59 -0
- tooluniverse/tools/FDA_get_drug_names_by_assembly_installation_info.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_boxed_warning.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_child_safety_info.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_clinical_pharmacology.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_clinical_studies.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_consulting_doctor_pharmacist_info.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_contraindications.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_controlled_substance_DEA_schedule.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_dear_health_care_provider_letter_info.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_disposal_info.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_dosage_forms_and_strengths_info.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_drug_interactions.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_effective_time.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_food_safety_warnings.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_general_precautions.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_geriatric_use.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_health_claim.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_indication.py +55 -0
- tooluniverse/tools/FDA_get_drug_names_by_info_for_nursing_mothers.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_information_for_owners_or_caregivers.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_ingredient.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_instructions_for_use.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_lab_test_interference.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_lab_tests.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_mechanism_of_action.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_medication_guide.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_nonclinical_toxicology_info.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_nonteratogenic_effects.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_overdosage_info.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_pediatric_use.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_pharmacokinetics.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_population_use.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_pregnancy_effects_info.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_residue_warning.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_risk.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_route.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_safe_handling_warning.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_safety_summary.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_spl_indexing_data_elements.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_teratogenic_effects.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_user_safety_warning.py +63 -0
- tooluniverse/tools/FDA_get_drug_names_by_warnings_and_cautions.py +63 -0
- tooluniverse/tools/FDA_get_drugs_by_carcinogenic_mutagenic_fertility.py +63 -0
- tooluniverse/tools/FDA_get_effective_time_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_environmental_warning_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_general_precautions_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_geriatric_use_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_health_claims_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_inactive_ingredient_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_indications_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_info_for_nursing_mothers_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_info_for_patients_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_info_on_conditions_for_doctor_consultation_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_info_on_consulting_doctor_pharmacist_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_information_for_owners_or_caregivers_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_ingredients_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_instructions_for_use_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_lab_test_interference_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_lab_tests_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_labor_and_delivery_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_manufacturer_name_NDC_number_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_mechanism_of_action_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_medication_guide_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_microbiology_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_nonclinical_toxicology_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_nonteratogenic_effects_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_other_safety_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_overdosage_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_patient_package_insert_from_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_pediatric_use_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_pharmacodynamics_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_pharmacogenomics_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_pharmacokinetics_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_population_use_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_precautions_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_pregnancy_effects_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_pregnancy_or_breastfeeding_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_principal_display_panel_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_purpose_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_recent_changes_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_reference_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_residue_warning_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_risk_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_route_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_safe_handling_warnings_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_safety_summary_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_spl_indexing_data_elements_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_spl_unclassified_section_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_stop_use_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_storage_and_handling_info_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_teratogenic_effects_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_user_safety_warning_by_drug_names.py +55 -0
- tooluniverse/tools/FDA_get_warnings_and_cautions_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_warnings_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_get_when_using_info.py +55 -0
- tooluniverse/tools/FDA_retrieve_device_use_by_drug_name.py +55 -0
- tooluniverse/tools/FDA_retrieve_drug_name_by_device_use.py +59 -0
- tooluniverse/tools/FDA_retrieve_drug_names_by_patient_medication_info.py +55 -0
- tooluniverse/tools/FDA_retrieve_patient_medication_info_by_drug_name.py +55 -0
- tooluniverse/tools/Fatcat_search_scholar.py +52 -0
- tooluniverse/tools/Finish.py +44 -0
- tooluniverse/tools/GIN_Guidelines_Search.py +52 -0
- tooluniverse/tools/GO_get_annotations_for_gene.py +46 -0
- tooluniverse/tools/GO_get_genes_for_term.py +55 -0
- tooluniverse/tools/GO_get_term_by_id.py +46 -0
- tooluniverse/tools/GO_get_term_details.py +46 -0
- tooluniverse/tools/GO_search_terms.py +46 -0
- tooluniverse/tools/GWAS_search_associations_by_gene.py +52 -0
- tooluniverse/tools/HAL_search_archive.py +52 -0
- tooluniverse/tools/HPA_get_biological_processes_by_gene.py +52 -0
- tooluniverse/tools/HPA_get_cancer_prognostics_by_gene.py +49 -0
- tooluniverse/tools/HPA_get_comparative_expression_by_gene_and_cellline.py +52 -0
- tooluniverse/tools/HPA_get_comprehensive_gene_details_by_ensembl_id.py +63 -0
- tooluniverse/tools/HPA_get_contextual_biological_process_analysis.py +52 -0
- tooluniverse/tools/HPA_get_disease_expression_by_gene_tissue_disease.py +59 -0
- tooluniverse/tools/HPA_get_gene_basic_info_by_ensembl_id.py +49 -0
- tooluniverse/tools/HPA_get_gene_tsv_data_by_ensembl_id.py +49 -0
- tooluniverse/tools/HPA_get_protein_interactions_by_gene.py +49 -0
- tooluniverse/tools/HPA_get_rna_expression_by_source.py +59 -0
- tooluniverse/tools/HPA_get_rna_expression_in_specific_tissues.py +52 -0
- tooluniverse/tools/HPA_get_subcellular_location.py +46 -0
- tooluniverse/tools/HPA_search_genes_by_query.py +49 -0
- tooluniverse/tools/HypothesisGenerator.py +63 -0
- tooluniverse/tools/LabelGenerator.py +67 -0
- tooluniverse/tools/LiteratureContextReviewer.py +55 -0
- tooluniverse/tools/LiteratureSearchTool.py +49 -0
- tooluniverse/tools/LiteratureSynthesisAgent.py +59 -0
- tooluniverse/tools/MedRxiv_search_preprints.py +52 -0
- tooluniverse/tools/MedicalLiteratureReviewer.py +71 -0
- tooluniverse/tools/MedicalTermNormalizer.py +46 -0
- tooluniverse/tools/MedlinePlus_connect_lookup_by_code.py +67 -0
- tooluniverse/tools/MedlinePlus_get_genetics_condition_by_name.py +52 -0
- tooluniverse/tools/MedlinePlus_get_genetics_gene_by_name.py +52 -0
- tooluniverse/tools/MedlinePlus_get_genetics_index.py +44 -0
- tooluniverse/tools/MedlinePlus_search_topics_by_keyword.py +55 -0
- tooluniverse/tools/MethodologyRigorReviewer.py +49 -0
- tooluniverse/tools/MultiAgentLiteratureSearch.py +59 -0
- tooluniverse/tools/NICE_Clinical_Guidelines_Search.py +52 -0
- tooluniverse/tools/NICE_Guideline_Full_Text.py +46 -0
- tooluniverse/tools/NoveltySignificanceReviewer.py +59 -0
- tooluniverse/tools/OSF_search_preprints.py +59 -0
- tooluniverse/tools/OSL_get_efo_id_by_disease_name.py +46 -0
- tooluniverse/tools/OpenAIRE_search_publications.py +55 -0
- tooluniverse/tools/OpenAlex_Guidelines_Search.py +63 -0
- tooluniverse/tools/OpenTargets_drug_pharmacogenomics_data.py +52 -0
- tooluniverse/tools/OpenTargets_get_approved_indications_by_drug_chemblId.py +49 -0
- tooluniverse/tools/OpenTargets_get_associated_diseases_by_drug_chemblId.py +49 -0
- tooluniverse/tools/OpenTargets_get_associated_drugs_by_disease_efoId.py +52 -0
- tooluniverse/tools/OpenTargets_get_associated_drugs_by_target_ensemblID.py +55 -0
- tooluniverse/tools/OpenTargets_get_associated_phenotypes_by_disease_efoId.py +49 -0
- tooluniverse/tools/OpenTargets_get_associated_targets_by_disease_efoId.py +49 -0
- tooluniverse/tools/OpenTargets_get_associated_targets_by_drug_chemblId.py +49 -0
- tooluniverse/tools/OpenTargets_get_biological_mouse_models_by_ensemblID.py +49 -0
- tooluniverse/tools/OpenTargets_get_chemical_probes_by_target_ensemblID.py +49 -0
- tooluniverse/tools/OpenTargets_get_disease_ancestors_parents_by_efoId.py +49 -0
- tooluniverse/tools/OpenTargets_get_disease_descendants_children_by_efoId.py +49 -0
- tooluniverse/tools/OpenTargets_get_disease_description_by_efoId.py +49 -0
- tooluniverse/tools/OpenTargets_get_disease_id_description_by_name.py +49 -0
- tooluniverse/tools/OpenTargets_get_disease_ids_by_efoId.py +46 -0
- tooluniverse/tools/OpenTargets_get_disease_ids_by_name.py +46 -0
- tooluniverse/tools/OpenTargets_get_disease_locations_by_efoId.py +49 -0
- tooluniverse/tools/OpenTargets_get_disease_synonyms_by_efoId.py +49 -0
- tooluniverse/tools/OpenTargets_get_disease_therapeutic_areas_by_efoId.py +49 -0
- tooluniverse/tools/OpenTargets_get_diseases_phenotypes_by_target_ensembl.py +49 -0
- tooluniverse/tools/OpenTargets_get_drug_adverse_events_by_chemblId.py +52 -0
- tooluniverse/tools/OpenTargets_get_drug_approval_status_by_chemblId.py +49 -0
- tooluniverse/tools/OpenTargets_get_drug_chembId_by_generic_name.py +49 -0
- tooluniverse/tools/OpenTargets_get_drug_description_by_chemblId.py +49 -0
- tooluniverse/tools/OpenTargets_get_drug_id_description_by_name.py +49 -0
- tooluniverse/tools/OpenTargets_get_drug_indications_by_chemblId.py +49 -0
- tooluniverse/tools/OpenTargets_get_drug_mechanisms_of_action_by_chemblId.py +49 -0
- tooluniverse/tools/OpenTargets_get_drug_synonyms_by_chemblId.py +49 -0
- tooluniverse/tools/OpenTargets_get_drug_trade_names_by_chemblId.py +49 -0
- tooluniverse/tools/OpenTargets_get_drug_warnings_by_chemblId.py +49 -0
- tooluniverse/tools/OpenTargets_get_drug_withdrawn_blackbox_status_by_chemblId.py +49 -0
- tooluniverse/tools/OpenTargets_get_gene_ontology_terms_by_goID.py +49 -0
- tooluniverse/tools/OpenTargets_get_known_drugs_by_drug_chemblId.py +49 -0
- tooluniverse/tools/OpenTargets_get_parent_child_molecules_by_drug_chembl_ID.py +49 -0
- tooluniverse/tools/OpenTargets_get_publications_by_disease_efoId.py +71 -0
- tooluniverse/tools/OpenTargets_get_publications_by_drug_chemblId.py +71 -0
- tooluniverse/tools/OpenTargets_get_publications_by_target_ensemblID.py +71 -0
- tooluniverse/tools/OpenTargets_get_similar_entities_by_disease_efoId.py +55 -0
- tooluniverse/tools/OpenTargets_get_similar_entities_by_drug_chemblId.py +55 -0
- tooluniverse/tools/OpenTargets_get_similar_entities_by_target_ensemblID.py +55 -0
- tooluniverse/tools/OpenTargets_get_target_classes_by_ensemblID.py +49 -0
- tooluniverse/tools/OpenTargets_get_target_constraint_info_by_ensemblID.py +49 -0
- tooluniverse/tools/OpenTargets_get_target_enabling_packages_by_ensemblID.py +49 -0
- tooluniverse/tools/OpenTargets_get_target_gene_ontology_by_ensemblID.py +49 -0
- tooluniverse/tools/OpenTargets_get_target_genomic_location_by_ensemblID.py +49 -0
- tooluniverse/tools/OpenTargets_get_target_homologues_by_ensemblID.py +49 -0
- tooluniverse/tools/OpenTargets_get_target_id_description_by_name.py +49 -0
- tooluniverse/tools/OpenTargets_get_target_interactions_by_ensemblID.py +52 -0
- tooluniverse/tools/OpenTargets_get_target_safety_profile_by_ensemblID.py +49 -0
- tooluniverse/tools/OpenTargets_get_target_subcellular_locations_by_ensemblID.py +49 -0
- tooluniverse/tools/OpenTargets_get_target_synonyms_by_ensemblID.py +49 -0
- tooluniverse/tools/OpenTargets_get_target_tractability_by_ensemblID.py +49 -0
- tooluniverse/tools/OpenTargets_map_any_disease_id_to_all_other_ids.py +49 -0
- tooluniverse/tools/OpenTargets_multi_entity_search_by_query_string.py +59 -0
- tooluniverse/tools/OpenTargets_search_category_counts_by_query_string.py +49 -0
- tooluniverse/tools/OpenTargets_target_disease_evidence.py +52 -0
- tooluniverse/tools/OutputSummarizationComposer.py +71 -0
- tooluniverse/tools/PMC_search_papers.py +67 -0
- tooluniverse/tools/ProtocolOptimizer.py +49 -0
- tooluniverse/tools/PubChem_get_CID_by_SMILES.py +46 -0
- tooluniverse/tools/PubChem_get_CID_by_compound_name.py +46 -0
- tooluniverse/tools/PubChem_get_associated_patents_by_CID.py +46 -0
- tooluniverse/tools/PubChem_get_compound_2D_image_by_CID.py +52 -0
- tooluniverse/tools/PubChem_get_compound_properties_by_CID.py +46 -0
- tooluniverse/tools/PubChem_get_compound_synonyms_by_CID.py +46 -0
- tooluniverse/tools/PubChem_get_compound_xrefs_by_CID.py +52 -0
- tooluniverse/tools/PubChem_search_compounds_by_similarity.py +52 -0
- tooluniverse/tools/PubChem_search_compounds_by_substructure.py +49 -0
- tooluniverse/tools/PubMed_Guidelines_Search.py +55 -0
- tooluniverse/tools/PubMed_search_articles.py +55 -0
- tooluniverse/tools/PubTator3_EntityAutocomplete.py +59 -0
- tooluniverse/tools/PubTator3_LiteratureSearch.py +55 -0
- tooluniverse/tools/QuestionRephraser.py +52 -0
- tooluniverse/tools/Reactome_get_pathway_reactions.py +46 -0
- tooluniverse/tools/ReproducibilityTransparencyReviewer.py +49 -0
- tooluniverse/tools/ResultsInterpretationReviewer.py +55 -0
- tooluniverse/tools/ScientificTextSummarizer.py +59 -0
- tooluniverse/tools/SemanticScholar_search_papers.py +55 -0
- tooluniverse/tools/TRIP_Database_Guidelines_Search.py +55 -0
- tooluniverse/tools/TestCaseGenerator.py +46 -0
- tooluniverse/tools/ToolCompatibilityAnalyzer.py +59 -0
- tooluniverse/tools/ToolDescriptionOptimizer.py +67 -0
- tooluniverse/tools/ToolDiscover.py +63 -0
- tooluniverse/tools/ToolGraphComposer.py +71 -0
- tooluniverse/tools/ToolGraphGenerationPipeline.py +63 -0
- tooluniverse/tools/ToolImplementationGenerator.py +67 -0
- tooluniverse/tools/ToolMetadataGenerationPipeline.py +63 -0
- tooluniverse/tools/ToolMetadataGenerator.py +55 -0
- tooluniverse/tools/ToolMetadataStandardizer.py +52 -0
- tooluniverse/tools/ToolOptimizer.py +59 -0
- tooluniverse/tools/ToolOutputSummarizer.py +67 -0
- tooluniverse/tools/ToolQualityEvaluator.py +59 -0
- tooluniverse/tools/ToolRelationshipDetector.py +52 -0
- tooluniverse/tools/ToolSpecificationGenerator.py +67 -0
- tooluniverse/tools/ToolSpecificationOptimizer.py +63 -0
- tooluniverse/tools/Tool_Finder.py +67 -0
- tooluniverse/tools/Tool_Finder_Keyword.py +67 -0
- tooluniverse/tools/Tool_Finder_LLM.py +67 -0
- tooluniverse/tools/Tool_RAG.py +49 -0
- tooluniverse/tools/UCSC_get_genes_by_region.py +67 -0
- tooluniverse/tools/UniProt_get_alternative_names_by_accession.py +49 -0
- tooluniverse/tools/UniProt_get_disease_variants_by_accession.py +49 -0
- tooluniverse/tools/UniProt_get_entry_by_accession.py +49 -0
- tooluniverse/tools/UniProt_get_function_by_accession.py +49 -0
- tooluniverse/tools/UniProt_get_isoform_ids_by_accession.py +49 -0
- tooluniverse/tools/UniProt_get_organism_by_accession.py +49 -0
- tooluniverse/tools/UniProt_get_ptm_processing_by_accession.py +49 -0
- tooluniverse/tools/UniProt_get_recommended_name_by_accession.py +49 -0
- tooluniverse/tools/UniProt_get_sequence_by_accession.py +49 -0
- tooluniverse/tools/UniProt_get_subcellular_location_by_accession.py +49 -0
- tooluniverse/tools/Unpaywall_check_oa_status.py +52 -0
- tooluniverse/tools/WHO_Guideline_Full_Text.py +46 -0
- tooluniverse/tools/WHO_Guidelines_Search.py +52 -0
- tooluniverse/tools/Wikidata_SPARQL_query.py +52 -0
- tooluniverse/tools/WritingPresentationReviewer.py +49 -0
- tooluniverse/tools/Zenodo_search_records.py +59 -0
- tooluniverse/tools/__init__.py +1770 -0
- tooluniverse/tools/_shared_client.py +138 -0
- tooluniverse/tools/alphafold_get_annotations.py +52 -0
- tooluniverse/tools/alphafold_get_prediction.py +55 -0
- tooluniverse/tools/alphafold_get_summary.py +46 -0
- tooluniverse/tools/call_agentic_human.py +46 -0
- tooluniverse/tools/cancer_biomarkers_disease_target_score.py +52 -0
- tooluniverse/tools/cancer_gene_census_disease_target_score.py +52 -0
- tooluniverse/tools/cellosaurus_get_cell_line_info.py +55 -0
- tooluniverse/tools/cellosaurus_query_converter.py +52 -0
- tooluniverse/tools/cellosaurus_search_cell_lines.py +55 -0
- tooluniverse/tools/chembl_disease_target_score.py +52 -0
- tooluniverse/tools/convert_to_markdown.py +59 -0
- tooluniverse/tools/dbSNP_get_variant_by_rsid.py +46 -0
- tooluniverse/tools/dict_search.py +67 -0
- tooluniverse/tools/dili_search.py +67 -0
- tooluniverse/tools/diqt_search.py +67 -0
- tooluniverse/tools/disease_target_score.py +59 -0
- tooluniverse/tools/drugbank_filter_drugs_by_name.py +55 -0
- tooluniverse/tools/drugbank_full_search.py +67 -0
- tooluniverse/tools/drugbank_get_drug_basic_info_by_drug_name_or_drugbank_id.py +63 -0
- tooluniverse/tools/drugbank_get_drug_chemistry_by_drug_name_or_drugbank_id.py +63 -0
- tooluniverse/tools/drugbank_get_drug_interactions_by_drug_name_or_drugbank_id.py +63 -0
- tooluniverse/tools/drugbank_get_drug_name_and_description_by_indication.py +63 -0
- tooluniverse/tools/drugbank_get_drug_name_and_description_by_pathway_name.py +63 -0
- tooluniverse/tools/drugbank_get_drug_name_and_description_by_target_name.py +63 -0
- tooluniverse/tools/drugbank_get_drug_name_description_pharmacology_by_mechanism_of_action.py +63 -0
- tooluniverse/tools/drugbank_get_drug_pathways_and_reactions_by_drug_name_or_drugbank_id.py +63 -0
- tooluniverse/tools/drugbank_get_drug_products_by_name_or_drugbank_id.py +63 -0
- tooluniverse/tools/drugbank_get_drug_references_by_drug_name_or_drugbank_id.py +63 -0
- tooluniverse/tools/drugbank_get_indications_by_drug_name_or_drugbank_id.py +63 -0
- tooluniverse/tools/drugbank_get_pharmacology_by_drug_name_or_drugbank_id.py +63 -0
- tooluniverse/tools/drugbank_get_safety_by_drug_name_or_drugbank_id.py +63 -0
- tooluniverse/tools/drugbank_get_targets_by_drug_name_or_drugbank_id.py +63 -0
- tooluniverse/tools/drugbank_links_search.py +67 -0
- tooluniverse/tools/drugbank_vocab_filter.py +63 -0
- tooluniverse/tools/drugbank_vocab_search.py +67 -0
- tooluniverse/tools/embedding_database_add.py +63 -0
- tooluniverse/tools/embedding_database_create.py +71 -0
- tooluniverse/tools/embedding_database_load.py +63 -0
- tooluniverse/tools/embedding_database_search.py +67 -0
- tooluniverse/tools/embedding_sync_download.py +63 -0
- tooluniverse/tools/embedding_sync_upload.py +71 -0
- tooluniverse/tools/enrichr_gene_enrichment_analysis.py +52 -0
- tooluniverse/tools/europepmc_disease_target_score.py +52 -0
- tooluniverse/tools/eva_disease_target_score.py +52 -0
- tooluniverse/tools/eva_somatic_disease_target_score.py +52 -0
- tooluniverse/tools/expression_atlas_disease_target_score.py +52 -0
- tooluniverse/tools/extract_clinical_trial_adverse_events.py +59 -0
- tooluniverse/tools/extract_clinical_trial_outcomes.py +52 -0
- tooluniverse/tools/genomics_england_disease_target_score.py +52 -0
- tooluniverse/tools/get_HPO_ID_by_phenotype.py +55 -0
- tooluniverse/tools/get_albumentations_info.py +44 -0
- tooluniverse/tools/get_altair_info.py +44 -0
- tooluniverse/tools/get_anndata_info.py +49 -0
- tooluniverse/tools/get_arboreto_info.py +46 -0
- tooluniverse/tools/get_arxiv_info.py +46 -0
- tooluniverse/tools/get_ase_info.py +46 -0
- tooluniverse/tools/get_assembly_info_by_pdb_id.py +46 -0
- tooluniverse/tools/get_assembly_summary.py +46 -0
- tooluniverse/tools/get_astropy_info.py +44 -0
- tooluniverse/tools/get_binding_affinity_by_pdb_id.py +46 -0
- tooluniverse/tools/get_biopandas_info.py +49 -0
- tooluniverse/tools/get_biopython_info.py +49 -0
- tooluniverse/tools/get_bioservices_info.py +44 -0
- tooluniverse/tools/get_biotite_info.py +49 -0
- tooluniverse/tools/get_bokeh_info.py +44 -0
- tooluniverse/tools/get_brian2_info.py +44 -0
- tooluniverse/tools/get_cartopy_info.py +44 -0
- tooluniverse/tools/get_catboost_info.py +44 -0
- tooluniverse/tools/get_cellpose_info.py +49 -0
- tooluniverse/tools/get_cellrank_info.py +44 -0
- tooluniverse/tools/get_cellxgene_census_info.py +46 -0
- tooluniverse/tools/get_cftime_info.py +44 -0
- tooluniverse/tools/get_chem_comp_audit_info.py +46 -0
- tooluniverse/tools/get_chem_comp_charge_and_ambiguity.py +46 -0
- tooluniverse/tools/get_chembl_webresource_client_info.py +44 -0
- tooluniverse/tools/get_citation_info_by_pdb_id.py +46 -0
- tooluniverse/tools/get_clair3_info.py +46 -0
- tooluniverse/tools/get_clinical_trial_conditions_and_interventions.py +55 -0
- tooluniverse/tools/get_clinical_trial_descriptions.py +52 -0
- tooluniverse/tools/get_clinical_trial_eligibility_criteria.py +55 -0
- tooluniverse/tools/get_clinical_trial_locations.py +52 -0
- tooluniverse/tools/get_clinical_trial_outcome_measures.py +52 -0
- tooluniverse/tools/get_clinical_trial_references.py +52 -0
- tooluniverse/tools/get_clinical_trial_status_and_dates.py +52 -0
- tooluniverse/tools/get_cobra_info.py +46 -0
- tooluniverse/tools/get_cobrapy_info.py +46 -0
- tooluniverse/tools/get_cooler_info.py +49 -0
- tooluniverse/tools/get_core_refinement_statistics.py +46 -0
- tooluniverse/tools/get_cryosparc_tools_info.py +46 -0
- tooluniverse/tools/get_crystal_growth_conditions_by_pdb_id.py +49 -0
- tooluniverse/tools/get_crystallization_ph_by_pdb_id.py +46 -0
- tooluniverse/tools/get_crystallographic_properties_by_pdb_id.py +49 -0
- tooluniverse/tools/get_cupy_info.py +44 -0
- tooluniverse/tools/get_cyvcf2_info.py +49 -0
- tooluniverse/tools/get_dask_info.py +44 -0
- tooluniverse/tools/get_datamol_info.py +44 -0
- tooluniverse/tools/get_datashader_info.py +44 -0
- tooluniverse/tools/get_deepchem_info.py +49 -0
- tooluniverse/tools/get_deeppurpose_info.py +46 -0
- tooluniverse/tools/get_deeptools_info.py +46 -0
- tooluniverse/tools/get_deepxde_info.py +49 -0
- tooluniverse/tools/get_dendropy_info.py +44 -0
- tooluniverse/tools/get_descriptastorus_info.py +46 -0
- tooluniverse/tools/get_diffdock_info.py +46 -0
- tooluniverse/tools/get_dscribe_info.py +49 -0
- tooluniverse/tools/get_ec_number_by_entity_id.py +46 -0
- tooluniverse/tools/get_elephant_info.py +44 -0
- tooluniverse/tools/get_em_3d_fitting_and_reconstruction_details.py +49 -0
- tooluniverse/tools/get_emdb_ids_by_pdb_id.py +46 -0
- tooluniverse/tools/get_episcanpy_info.py +44 -0
- tooluniverse/tools/get_ete3_info.py +44 -0
- tooluniverse/tools/get_faiss_info.py +46 -0
- tooluniverse/tools/get_fanc_info.py +46 -0
- tooluniverse/tools/get_flask_info.py +46 -0
- tooluniverse/tools/get_flowio_info.py +46 -0
- tooluniverse/tools/get_flowkit_info.py +46 -0
- tooluniverse/tools/get_flowutils_info.py +46 -0
- tooluniverse/tools/get_freesasa_info.py +44 -0
- tooluniverse/tools/get_galpy_info.py +44 -0
- tooluniverse/tools/get_gene_name_by_entity_id.py +46 -0
- tooluniverse/tools/get_geopandas_info.py +44 -0
- tooluniverse/tools/get_gget_info.py +46 -0
- tooluniverse/tools/get_googlesearch_python_info.py +46 -0
- tooluniverse/tools/get_gseapy_info.py +49 -0
- tooluniverse/tools/get_h5py_info.py +46 -0
- tooluniverse/tools/get_harmony_pytorch_info.py +46 -0
- tooluniverse/tools/get_hmmlearn_info.py +46 -0
- tooluniverse/tools/get_holoviews_info.py +44 -0
- tooluniverse/tools/get_host_organism_by_pdb_id.py +46 -0
- tooluniverse/tools/get_htmd_info.py +44 -0
- tooluniverse/tools/get_hyperopt_info.py +49 -0
- tooluniverse/tools/get_igraph_info.py +49 -0
- tooluniverse/tools/get_imageio_info.py +44 -0
- tooluniverse/tools/get_imbalanced_learn_info.py +44 -0
- tooluniverse/tools/get_jcvi_info.py +46 -0
- tooluniverse/tools/get_joblib_info.py +44 -0
- tooluniverse/tools/get_joint_associated_diseases_by_HPO_ID_list.py +55 -0
- tooluniverse/tools/get_khmer_info.py +46 -0
- tooluniverse/tools/get_kipoiseq_info.py +44 -0
- tooluniverse/tools/get_lifelines_info.py +49 -0
- tooluniverse/tools/get_ligand_bond_count_by_pdb_id.py +46 -0
- tooluniverse/tools/get_ligand_smiles_by_chem_comp_id.py +49 -0
- tooluniverse/tools/get_lightgbm_info.py +44 -0
- tooluniverse/tools/get_loompy_info.py +46 -0
- tooluniverse/tools/get_mageck_info.py +46 -0
- tooluniverse/tools/get_matplotlib_info.py +49 -0
- tooluniverse/tools/get_mdanalysis_info.py +46 -0
- tooluniverse/tools/get_mdtraj_info.py +44 -0
- tooluniverse/tools/get_mne_info.py +44 -0
- tooluniverse/tools/get_molfeat_info.py +44 -0
- tooluniverse/tools/get_molvs_info.py +44 -0
- tooluniverse/tools/get_mordred_info.py +44 -0
- tooluniverse/tools/get_msprime_info.py +49 -0
- tooluniverse/tools/get_mudata_info.py +49 -0
- tooluniverse/tools/get_mutation_annotations_by_pdb_id.py +46 -0
- tooluniverse/tools/get_neo_info.py +44 -0
- tooluniverse/tools/get_netcdf4_info.py +44 -0
- tooluniverse/tools/get_networkx_info.py +46 -0
- tooluniverse/tools/get_nglview_info.py +44 -0
- tooluniverse/tools/get_nilearn_info.py +44 -0
- tooluniverse/tools/get_numba_info.py +46 -0
- tooluniverse/tools/get_numpy_info.py +46 -0
- tooluniverse/tools/get_oligosaccharide_descriptors_by_entity_id.py +49 -0
- tooluniverse/tools/get_openbabel_info.py +49 -0
- tooluniverse/tools/get_openchem_info.py +46 -0
- tooluniverse/tools/get_opencv_info.py +49 -0
- tooluniverse/tools/get_openmm_info.py +49 -0
- tooluniverse/tools/get_optlang_info.py +46 -0
- tooluniverse/tools/get_optuna_info.py +44 -0
- tooluniverse/tools/get_palantir_info.py +44 -0
- tooluniverse/tools/get_pandas_info.py +49 -0
- tooluniverse/tools/get_patsy_info.py +44 -0
- tooluniverse/tools/get_pdbfixer_info.py +46 -0
- tooluniverse/tools/get_phenotype_by_HPO_ID.py +46 -0
- tooluniverse/tools/get_pillow_info.py +44 -0
- tooluniverse/tools/get_plantcv_info.py +46 -0
- tooluniverse/tools/get_plip_info.py +46 -0
- tooluniverse/tools/get_plotly_info.py +44 -0
- tooluniverse/tools/get_poliastro_info.py +46 -0
- tooluniverse/tools/get_polymer_entity_annotations.py +49 -0
- tooluniverse/tools/get_polymer_entity_count_by_pdb_id.py +46 -0
- tooluniverse/tools/get_polymer_entity_ids_by_pdb_id.py +46 -0
- tooluniverse/tools/get_polymer_entity_type_by_entity_id.py +49 -0
- tooluniverse/tools/get_polymer_molecular_weight_by_entity_id.py +49 -0
- tooluniverse/tools/get_poretools_info.py +44 -0
- tooluniverse/tools/get_prody_info.py +46 -0
- tooluniverse/tools/get_protein_classification_by_pdb_id.py +49 -0
- tooluniverse/tools/get_protein_metadata_by_pdb_id.py +46 -0
- tooluniverse/tools/get_pubchempy_info.py +44 -0
- tooluniverse/tools/get_pybedtools_info.py +49 -0
- tooluniverse/tools/get_pybigwig_info.py +46 -0
- tooluniverse/tools/get_pydeseq2_info.py +46 -0
- tooluniverse/tools/get_pyensembl_info.py +44 -0
- tooluniverse/tools/get_pyephem_info.py +44 -0
- tooluniverse/tools/get_pyfaidx_info.py +49 -0
- tooluniverse/tools/get_pyfasta_info.py +44 -0
- tooluniverse/tools/get_pykalman_info.py +46 -0
- tooluniverse/tools/get_pyliftover_info.py +49 -0
- tooluniverse/tools/get_pymassspec_info.py +46 -0
- tooluniverse/tools/get_pymed_info.py +46 -0
- tooluniverse/tools/get_pymzml_info.py +46 -0
- tooluniverse/tools/get_pypdf2_info.py +46 -0
- tooluniverse/tools/get_pyranges_info.py +49 -0
- tooluniverse/tools/get_pyrosetta_info.py +44 -0
- tooluniverse/tools/get_pysam_info.py +46 -0
- tooluniverse/tools/get_pyscenic_info.py +46 -0
- tooluniverse/tools/get_pyscf_info.py +46 -0
- tooluniverse/tools/get_pyscreener_info.py +46 -0
- tooluniverse/tools/get_pytdc_info.py +46 -0
- tooluniverse/tools/get_python_libsbml_info.py +46 -0
- tooluniverse/tools/get_pytorch_info.py +49 -0
- tooluniverse/tools/get_pyvcf_info.py +44 -0
- tooluniverse/tools/get_pyvis_info.py +44 -0
- tooluniverse/tools/get_qutip_info.py +44 -0
- tooluniverse/tools/get_rasterio_info.py +44 -0
- tooluniverse/tools/get_rdkit_info.py +46 -0
- tooluniverse/tools/get_refinement_resolution_by_pdb_id.py +49 -0
- tooluniverse/tools/get_release_deposit_dates_by_pdb_id.py +49 -0
- tooluniverse/tools/get_reportlab_info.py +49 -0
- tooluniverse/tools/get_requests_info.py +49 -0
- tooluniverse/tools/get_ruptures_info.py +46 -0
- tooluniverse/tools/get_scanorama_info.py +44 -0
- tooluniverse/tools/get_scanpy_info.py +49 -0
- tooluniverse/tools/get_schnetpack_info.py +49 -0
- tooluniverse/tools/get_scholarly_info.py +46 -0
- tooluniverse/tools/get_scikit_bio_info.py +49 -0
- tooluniverse/tools/get_scikit_image_info.py +46 -0
- tooluniverse/tools/get_scikit_learn_info.py +49 -0
- tooluniverse/tools/get_scipy_info.py +46 -0
- tooluniverse/tools/get_scrublet_info.py +49 -0
- tooluniverse/tools/get_scvelo_info.py +49 -0
- tooluniverse/tools/get_scvi_tools_info.py +44 -0
- tooluniverse/tools/get_seaborn_info.py +49 -0
- tooluniverse/tools/get_sequence_by_pdb_id.py +46 -0
- tooluniverse/tools/get_sequence_lengths_by_pdb_id.py +46 -0
- tooluniverse/tools/get_sequence_positional_features_by_instance_id.py +49 -0
- tooluniverse/tools/get_skopt_info.py +44 -0
- tooluniverse/tools/get_souporcell_info.py +46 -0
- tooluniverse/tools/get_source_organism_by_pdb_id.py +46 -0
- tooluniverse/tools/get_space_group_by_pdb_id.py +46 -0
- tooluniverse/tools/get_statsmodels_info.py +49 -0
- tooluniverse/tools/get_structure_determination_software_by_pdb_id.py +49 -0
- tooluniverse/tools/get_structure_title_by_pdb_id.py +46 -0
- tooluniverse/tools/get_structure_validation_metrics_by_pdb_id.py +49 -0
- tooluniverse/tools/get_sunpy_info.py +44 -0
- tooluniverse/tools/get_sympy_info.py +46 -0
- tooluniverse/tools/get_target_cofactor_info.py +46 -0
- tooluniverse/tools/get_taxonomy_by_pdb_id.py +46 -0
- tooluniverse/tools/get_tiledb_info.py +46 -0
- tooluniverse/tools/get_tiledbsoma_info.py +46 -0
- tooluniverse/tools/get_torch_geometric_info.py +49 -0
- tooluniverse/tools/get_tqdm_info.py +46 -0
- tooluniverse/tools/get_trackpy_info.py +46 -0
- tooluniverse/tools/get_tskit_info.py +46 -0
- tooluniverse/tools/get_umap_learn_info.py +49 -0
- tooluniverse/tools/get_uniprot_accession_by_entity_id.py +49 -0
- tooluniverse/tools/get_velocyto_info.py +44 -0
- tooluniverse/tools/get_viennarna_info.py +49 -0
- tooluniverse/tools/get_webpage_text_from_url.py +52 -0
- tooluniverse/tools/get_webpage_title.py +49 -0
- tooluniverse/tools/get_xarray_info.py +44 -0
- tooluniverse/tools/get_xesmf_info.py +44 -0
- tooluniverse/tools/get_xgboost_info.py +44 -0
- tooluniverse/tools/get_zarr_info.py +44 -0
- tooluniverse/tools/gnomAD_query_variant.py +52 -0
- tooluniverse/tools/gwas_get_association_by_id.py +49 -0
- tooluniverse/tools/gwas_get_associations_for_snp.py +67 -0
- tooluniverse/tools/gwas_get_associations_for_study.py +55 -0
- tooluniverse/tools/gwas_get_associations_for_trait.py +55 -0
- tooluniverse/tools/gwas_get_snp_by_id.py +46 -0
- tooluniverse/tools/gwas_get_snps_for_gene.py +55 -0
- tooluniverse/tools/gwas_get_studies_for_trait.py +75 -0
- tooluniverse/tools/gwas_get_study_by_id.py +46 -0
- tooluniverse/tools/gwas_get_variants_for_trait.py +55 -0
- tooluniverse/tools/gwas_search_associations.py +75 -0
- tooluniverse/tools/gwas_search_snps.py +63 -0
- tooluniverse/tools/gwas_search_studies.py +75 -0
- tooluniverse/tools/humanbase_ppi_analysis.py +67 -0
- tooluniverse/tools/mesh_get_subjects_by_pharmacological_action.py +63 -0
- tooluniverse/tools/mesh_get_subjects_by_subject_id.py +63 -0
- tooluniverse/tools/mesh_get_subjects_by_subject_name.py +63 -0
- tooluniverse/tools/mesh_get_subjects_by_subject_scope_or_definition.py +63 -0
- tooluniverse/tools/odphp_itemlist.py +49 -0
- tooluniverse/tools/odphp_myhealthfinder.py +67 -0
- tooluniverse/tools/odphp_outlink_fetch.py +59 -0
- tooluniverse/tools/odphp_topicsearch.py +67 -0
- tooluniverse/tools/openalex_literature_search.py +67 -0
- tooluniverse/tools/reactome_disease_target_score.py +52 -0
- tooluniverse/tools/search_clinical_trials.py +67 -0
- tooluniverse/tools/visualize_molecule_2d.py +83 -0
- tooluniverse/tools/visualize_molecule_3d.py +91 -0
- tooluniverse/tools/visualize_protein_structure_3d.py +79 -0
- tooluniverse/ucsc_tool.py +60 -0
- tooluniverse/unified_guideline_tools.py +2328 -0
- tooluniverse/unpaywall_tool.py +0 -1
- tooluniverse/utils.py +122 -6
- tooluniverse/visualization_tool.py +897 -0
- tooluniverse/wikidata_sparql_tool.py +1 -2
- tooluniverse/zenodo_tool.py +3 -4
- {tooluniverse-1.0.6.dist-info → tooluniverse-1.0.8.dist-info}/METADATA +19 -4
- tooluniverse-1.0.8.dist-info/RECORD +891 -0
- {tooluniverse-1.0.6.dist-info → tooluniverse-1.0.8.dist-info}/entry_points.txt +3 -0
- tooluniverse/test/list_azure_openai_models.py +0 -210
- tooluniverse/test/mcp_server_test.py +0 -0
- tooluniverse/test/test_admetai_tool.py +0 -370
- tooluniverse/test/test_agentic_tool.py +0 -129
- tooluniverse/test/test_agentic_tool_azure_models.py +0 -91
- tooluniverse/test/test_alphafold_tool.py +0 -108
- tooluniverse/test/test_api_key_validation_min.py +0 -64
- tooluniverse/test/test_chem_tool.py +0 -37
- tooluniverse/test/test_claude_sdk.py +0 -93
- tooluniverse/test/test_compose_lieraturereview.py +0 -63
- tooluniverse/test/test_compose_tool.py +0 -448
- tooluniverse/test/test_dailymed.py +0 -69
- tooluniverse/test/test_dataset_tool.py +0 -200
- tooluniverse/test/test_disease_target_score.py +0 -56
- tooluniverse/test/test_drugbank_filter_examples.py +0 -179
- tooluniverse/test/test_efo.py +0 -31
- tooluniverse/test/test_enrichr_tool.py +0 -21
- tooluniverse/test/test_europe_pmc_tool.py +0 -20
- tooluniverse/test/test_fda_adv.py +0 -95
- tooluniverse/test/test_fda_drug_labeling.py +0 -91
- tooluniverse/test/test_gene_ontology_tools.py +0 -66
- tooluniverse/test/test_global_fallback.py +0 -288
- tooluniverse/test/test_gwas_tool.py +0 -139
- tooluniverse/test/test_hooks_direct.py +0 -219
- tooluniverse/test/test_hpa.py +0 -625
- tooluniverse/test/test_humanbase_tool.py +0 -20
- tooluniverse/test/test_idmap_tools.py +0 -61
- tooluniverse/test/test_list_built_in_tools.py +0 -33
- tooluniverse/test/test_mcp_server.py +0 -211
- tooluniverse/test/test_mcp_tool.py +0 -247
- tooluniverse/test/test_medlineplus.py +0 -220
- tooluniverse/test/test_odphp_tool.py +0 -166
- tooluniverse/test/test_openalex_tool.py +0 -32
- tooluniverse/test/test_openrouter_client.py +0 -288
- tooluniverse/test/test_opentargets.py +0 -28
- tooluniverse/test/test_pubchem_tool.py +0 -116
- tooluniverse/test/test_pubtator_tool.py +0 -37
- tooluniverse/test/test_rcsb_pdb_tool.py +0 -86
- tooluniverse/test/test_reactome.py +0 -54
- tooluniverse/test/test_semantic_scholar_tool.py +0 -24
- tooluniverse/test/test_software_tools.py +0 -147
- tooluniverse/test/test_stdio_hooks.py +0 -285
- tooluniverse/test/test_tool_description_optimizer.py +0 -49
- tooluniverse/test/test_tool_finder.py +0 -26
- tooluniverse/test/test_tool_finder_llm.py +0 -252
- tooluniverse/test/test_tools_find.py +0 -195
- tooluniverse/test/test_uniprot_tools.py +0 -74
- tooluniverse/test/test_uspto_tool.py +0 -72
- tooluniverse/test/test_xml_tool.py +0 -113
- tooluniverse-1.0.6.dist-info/RECORD +0 -230
- {tooluniverse-1.0.6.dist-info → tooluniverse-1.0.8.dist-info}/WHEEL +0 -0
- {tooluniverse-1.0.6.dist-info → tooluniverse-1.0.8.dist-info}/licenses/LICENSE +0 -0
- {tooluniverse-1.0.6.dist-info → tooluniverse-1.0.8.dist-info}/top_level.txt +0 -0
tooluniverse/__init__.py
CHANGED
|
@@ -1,30 +1,54 @@
|
|
|
1
1
|
from importlib.metadata import version
|
|
2
|
+
import os
|
|
2
3
|
import warnings
|
|
3
4
|
from typing import Any, Optional, List
|
|
5
|
+
|
|
4
6
|
from .execute_function import ToolUniverse
|
|
5
7
|
from .base_tool import BaseTool
|
|
6
8
|
from .default_config import default_tool_files
|
|
9
|
+
from .tool_registry import register_tool, get_tool_registry
|
|
10
|
+
|
|
11
|
+
_LIGHT_IMPORT = os.getenv("TOOLUNIVERSE_LIGHT_IMPORT", "false").lower() in (
|
|
12
|
+
"true",
|
|
13
|
+
"1",
|
|
14
|
+
"yes",
|
|
15
|
+
)
|
|
7
16
|
|
|
8
17
|
# Version information - read from package metadata or pyproject.toml
|
|
9
18
|
__version__ = version("tooluniverse")
|
|
10
|
-
|
|
19
|
+
|
|
20
|
+
# Import tools with graceful fallback
|
|
21
|
+
if not _LIGHT_IMPORT:
|
|
22
|
+
try:
|
|
23
|
+
from . import tools
|
|
24
|
+
|
|
25
|
+
_TOOLS_AVAILABLE = True
|
|
26
|
+
except ImportError:
|
|
27
|
+
_TOOLS_AVAILABLE = False
|
|
28
|
+
tools = None # type: ignore
|
|
29
|
+
else:
|
|
30
|
+
_TOOLS_AVAILABLE = False
|
|
31
|
+
tools = None # type: ignore
|
|
11
32
|
|
|
12
33
|
# Check if lazy loading is enabled
|
|
13
|
-
# LAZY_LOADING_ENABLED = os.getenv('TOOLUNIVERSE_LAZY_LOADING', 'true').lower() in (
|
|
34
|
+
# LAZY_LOADING_ENABLED = os.getenv('TOOLUNIVERSE_LAZY_LOADING', 'true').lower() in (
|
|
35
|
+
# 'true', '1', 'yes'
|
|
36
|
+
# )
|
|
14
37
|
LAZY_LOADING_ENABLED = (
|
|
15
38
|
False # LAZY LOADING DISABLED BECAUSE IT'S STILL UNDER DEVELOPMENT
|
|
16
39
|
)
|
|
17
40
|
|
|
18
41
|
# Import MCP functionality
|
|
19
|
-
|
|
20
|
-
|
|
42
|
+
if not _LIGHT_IMPORT:
|
|
43
|
+
try:
|
|
44
|
+
from .mcp_integration import _patch_tooluniverse
|
|
21
45
|
|
|
22
|
-
|
|
23
|
-
|
|
46
|
+
# Automatically patch ToolUniverse with MCP methods
|
|
47
|
+
_patch_tooluniverse()
|
|
24
48
|
|
|
25
|
-
except ImportError:
|
|
26
|
-
|
|
27
|
-
|
|
49
|
+
except ImportError:
|
|
50
|
+
# MCP functionality not available
|
|
51
|
+
pass
|
|
28
52
|
|
|
29
53
|
# Import SMCP with graceful fallback and consistent signatures for type checking
|
|
30
54
|
try:
|
|
@@ -150,7 +174,10 @@ MCPAutoLoaderTool: Any
|
|
|
150
174
|
ADMETAITool: Any
|
|
151
175
|
AlphaFoldRESTTool: Any
|
|
152
176
|
ComposeTool: Any
|
|
153
|
-
|
|
177
|
+
CellosaurusSearchTool: Any
|
|
178
|
+
CellosaurusQueryConverterTool: Any
|
|
179
|
+
CellosaurusGetCellLineInfoTool: Any
|
|
180
|
+
if not _LIGHT_IMPORT and not LAZY_LOADING_ENABLED:
|
|
154
181
|
# Import all tool classes immediately (old behavior) with warning suppression # noqa: E501
|
|
155
182
|
with warnings.catch_warnings():
|
|
156
183
|
warnings.filterwarnings("ignore", category=DeprecationWarning)
|
|
@@ -224,6 +251,12 @@ if not LAZY_LOADING_ENABLED:
|
|
|
224
251
|
ODPHPTopicSearch,
|
|
225
252
|
ODPHPOutlinkFetch,
|
|
226
253
|
)
|
|
254
|
+
from .cellosaurus_tool import (
|
|
255
|
+
CellosaurusSearchTool,
|
|
256
|
+
CellosaurusQueryConverterTool,
|
|
257
|
+
CellosaurusGetCellLineInfoTool,
|
|
258
|
+
)
|
|
259
|
+
|
|
227
260
|
# Literature search tools
|
|
228
261
|
from .arxiv_tool import ArXivTool
|
|
229
262
|
from .crossref_tool import CrossrefTool
|
|
@@ -318,6 +351,15 @@ else:
|
|
|
318
351
|
ODPHPMyHealthfinder = _LazyImportProxy("odphp_tool", "ODHPHPMyHealthfinder")
|
|
319
352
|
ODPHPTopicSearch = _LazyImportProxy("odphp_tool", "ODPHPTopicSearch")
|
|
320
353
|
ODPHPOutlinkFetch = _LazyImportProxy("odphp_tool", "ODPHPOutlinkFetch")
|
|
354
|
+
CellosaurusSearchTool = _LazyImportProxy(
|
|
355
|
+
"cellosaurus_tool", "CellosaurusSearchTool"
|
|
356
|
+
)
|
|
357
|
+
CellosaurusQueryConverterTool = _LazyImportProxy(
|
|
358
|
+
"cellosaurus_tool", "CellosaurusQueryConverterTool"
|
|
359
|
+
)
|
|
360
|
+
CellosaurusGetCellLineInfoTool = _LazyImportProxy(
|
|
361
|
+
"cellosaurus_tool", "CellosaurusGetCellLineInfoTool"
|
|
362
|
+
)
|
|
321
363
|
# Literature search tools
|
|
322
364
|
ArXivTool = _LazyImportProxy("arxiv_tool", "ArXivTool")
|
|
323
365
|
CrossrefTool = _LazyImportProxy("crossref_tool", "CrossrefTool")
|
|
@@ -338,6 +380,7 @@ __all__ = [
|
|
|
338
380
|
"BaseTool",
|
|
339
381
|
"register_tool",
|
|
340
382
|
"get_tool_registry",
|
|
383
|
+
"tools",
|
|
341
384
|
"MonarchTool",
|
|
342
385
|
"MonarchDiseasesForMultiplePhenoTool",
|
|
343
386
|
"ClinicalTrialsSearchTool",
|
|
@@ -402,6 +445,9 @@ __all__ = [
|
|
|
402
445
|
"ODPHPItemList",
|
|
403
446
|
"ODPHPTopicSearch",
|
|
404
447
|
"ODPHPOutlinkFetch",
|
|
448
|
+
"CellosaurusSearchTool",
|
|
449
|
+
"CellosaurusQueryConverterTool",
|
|
450
|
+
"CellosaurusGetCellLineInfoTool",
|
|
405
451
|
# Literature search tools
|
|
406
452
|
"ArXivTool",
|
|
407
453
|
"CrossrefTool",
|
tooluniverse/admetai_tool.py
CHANGED
|
@@ -30,13 +30,15 @@ class ADMETAITool(BaseTool):
|
|
|
30
30
|
|
|
31
31
|
def __init__(self, **kwargs):
|
|
32
32
|
super().__init__(**kwargs)
|
|
33
|
+
# Initialize the model once during tool initialization
|
|
34
|
+
self.model = ADMETModel()
|
|
33
35
|
|
|
34
36
|
def _predict(self, smiles: str) -> dict:
|
|
35
37
|
"""
|
|
36
38
|
Gets ADMET predictions for the given smiles
|
|
37
39
|
"""
|
|
38
|
-
model
|
|
39
|
-
preds = model.predict(smiles=smiles)
|
|
40
|
+
# Reuse the pre-loaded model instead of creating a new one
|
|
41
|
+
preds = self.model.predict(smiles=smiles)
|
|
40
42
|
return preds
|
|
41
43
|
|
|
42
44
|
def run(self, arguments: dict) -> dict:
|
|
@@ -47,7 +49,8 @@ class ADMETAITool(BaseTool):
|
|
|
47
49
|
smiles: The SMILES string(s) of the molecule(s).
|
|
48
50
|
|
|
49
51
|
Returns:
|
|
50
|
-
A dictionary mapping each SMILES string to a subdictionary of
|
|
52
|
+
A dictionary mapping each SMILES string to a subdictionary of
|
|
53
|
+
selected ADMET properties and their predicted values.
|
|
51
54
|
"""
|
|
52
55
|
smiles = arguments.get("smiles", [])
|
|
53
56
|
if not smiles:
|
|
@@ -65,7 +68,8 @@ class ADMETAITool(BaseTool):
|
|
|
65
68
|
):
|
|
66
69
|
return {"error": "No predictions could be extracted."}
|
|
67
70
|
|
|
68
|
-
# Expand columns to include _drugbank_approved_percentile columns
|
|
71
|
+
# Expand columns to include _drugbank_approved_percentile columns
|
|
72
|
+
# if present
|
|
69
73
|
if columns is not None:
|
|
70
74
|
expanded_columns = []
|
|
71
75
|
for col in columns:
|
tooluniverse/agentic_tool.py
CHANGED
|
@@ -8,7 +8,7 @@ from typing import Any, Callable, Dict, List, Optional
|
|
|
8
8
|
from .base_tool import BaseTool
|
|
9
9
|
from .tool_registry import register_tool
|
|
10
10
|
from .logging_config import get_logger
|
|
11
|
-
from .llm_clients import AzureOpenAIClient, GeminiClient, OpenRouterClient
|
|
11
|
+
from .llm_clients import AzureOpenAIClient, GeminiClient, OpenRouterClient, VLLMClient
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
# Global default fallback configuration
|
|
@@ -23,6 +23,7 @@ API_KEY_ENV_VARS = {
|
|
|
23
23
|
"CHATGPT": ["AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT"],
|
|
24
24
|
"OPENROUTER": ["OPENROUTER_API_KEY"],
|
|
25
25
|
"GEMINI": ["GEMINI_API_KEY"],
|
|
26
|
+
"VLLM": ["VLLM_SERVER_URL"],
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
|
|
@@ -201,7 +202,9 @@ class AgenticTool(BaseTool):
|
|
|
201
202
|
f"Tool '{self.name}' failed to initialize with all available APIs"
|
|
202
203
|
)
|
|
203
204
|
|
|
204
|
-
def _try_api(
|
|
205
|
+
def _try_api(
|
|
206
|
+
self, api_type: str, model_id: str, server_url: Optional[str] = None
|
|
207
|
+
) -> bool:
|
|
205
208
|
"""Try to initialize a specific API and model."""
|
|
206
209
|
try:
|
|
207
210
|
if api_type == "CHATGPT":
|
|
@@ -210,6 +213,12 @@ class AgenticTool(BaseTool):
|
|
|
210
213
|
self._llm_client = OpenRouterClient(model_id, self.logger)
|
|
211
214
|
elif api_type == "GEMINI":
|
|
212
215
|
self._llm_client = GeminiClient(model_id, self.logger)
|
|
216
|
+
elif api_type == "VLLM":
|
|
217
|
+
if not server_url:
|
|
218
|
+
server_url = os.getenv("VLLM_SERVER_URL")
|
|
219
|
+
if not server_url:
|
|
220
|
+
raise ValueError("VLLM_SERVER_URL environment variable not set")
|
|
221
|
+
self._llm_client = VLLMClient(model_id, server_url, self.logger)
|
|
213
222
|
else:
|
|
214
223
|
raise ValueError(f"Unsupported API type: {api_type}")
|
|
215
224
|
|
|
@@ -243,7 +252,7 @@ class AgenticTool(BaseTool):
|
|
|
243
252
|
|
|
244
253
|
# ------------------------------------------------------------------ LLM utilities -----------
|
|
245
254
|
def _validate_model_config(self):
|
|
246
|
-
supported_api_types = ["CHATGPT", "OPENROUTER", "GEMINI"]
|
|
255
|
+
supported_api_types = ["CHATGPT", "OPENROUTER", "GEMINI", "VLLM"]
|
|
247
256
|
if self._api_type not in supported_api_types:
|
|
248
257
|
raise ValueError(
|
|
249
258
|
f"Unsupported API type: {self._api_type}. Supported types: {supported_api_types}"
|
|
@@ -415,7 +424,29 @@ class AgenticTool(BaseTool):
|
|
|
415
424
|
},
|
|
416
425
|
}
|
|
417
426
|
else:
|
|
418
|
-
|
|
427
|
+
from .utils import format_error_response
|
|
428
|
+
|
|
429
|
+
return format_error_response(
|
|
430
|
+
e,
|
|
431
|
+
self.name,
|
|
432
|
+
{
|
|
433
|
+
"prompt_used": (
|
|
434
|
+
formatted_prompt
|
|
435
|
+
if "formatted_prompt" in locals()
|
|
436
|
+
else "Failed to format prompt"
|
|
437
|
+
),
|
|
438
|
+
"input_arguments": {
|
|
439
|
+
arg: arguments.get(arg) for arg in self._input_arguments
|
|
440
|
+
},
|
|
441
|
+
"model_info": {
|
|
442
|
+
"api_type": self._api_type,
|
|
443
|
+
"model_id": self._model_id,
|
|
444
|
+
"temperature": self._temperature,
|
|
445
|
+
"max_new_tokens": self._max_new_tokens,
|
|
446
|
+
},
|
|
447
|
+
"execution_time_seconds": execution_time,
|
|
448
|
+
},
|
|
449
|
+
)
|
|
419
450
|
|
|
420
451
|
@staticmethod
|
|
421
452
|
def _iter_chunks(text: str, size: int = 800):
|
|
@@ -518,6 +549,11 @@ class AgenticTool(BaseTool):
|
|
|
518
549
|
self._llm_client = OpenRouterClient(self._model_id, self.logger)
|
|
519
550
|
elif self._api_type == "GEMINI":
|
|
520
551
|
self._llm_client = GeminiClient(self._gemini_model_id, self.logger)
|
|
552
|
+
elif self._api_type == "VLLM":
|
|
553
|
+
server_url = os.getenv("VLLM_SERVER_URL")
|
|
554
|
+
if not server_url:
|
|
555
|
+
raise ValueError("VLLM_SERVER_URL environment variable not set")
|
|
556
|
+
self._llm_client = VLLMClient(self._model_id, server_url, self.logger)
|
|
521
557
|
else:
|
|
522
558
|
raise ValueError(f"Unsupported API type: {self._api_type}")
|
|
523
559
|
|
tooluniverse/arxiv_tool.py
CHANGED
|
@@ -83,18 +83,14 @@ class ArXivTool(BaseTool):
|
|
|
83
83
|
link = link_el.get("href")
|
|
84
84
|
else:
|
|
85
85
|
link = entry.findtext("atom:id", default="", namespaces=ns)
|
|
86
|
-
published = entry.findtext(
|
|
87
|
-
"atom:published", default="", namespaces=ns
|
|
88
|
-
)
|
|
86
|
+
published = entry.findtext("atom:published", default="", namespaces=ns)
|
|
89
87
|
updated = entry.findtext("atom:updated", default="", namespaces=ns)
|
|
90
88
|
authors = [
|
|
91
89
|
a.findtext("atom:name", default="", namespaces=ns)
|
|
92
90
|
for a in entry.findall("atom:author", ns)
|
|
93
91
|
]
|
|
94
92
|
primary_category = ""
|
|
95
|
-
cat_el = entry.find(
|
|
96
|
-
"{http://arxiv.org/schemas/atom}primary_category"
|
|
97
|
-
)
|
|
93
|
+
cat_el = entry.find("{http://arxiv.org/schemas/atom}primary_category")
|
|
98
94
|
if cat_el is not None:
|
|
99
95
|
primary_category = cat_el.get("term", "")
|
|
100
96
|
|
tooluniverse/base_tool.py
CHANGED
|
@@ -1,28 +1,27 @@
|
|
|
1
1
|
from .utils import extract_function_call_json, evaluate_function_call
|
|
2
|
+
from .exceptions import (
|
|
3
|
+
ToolError,
|
|
4
|
+
ToolValidationError,
|
|
5
|
+
ToolAuthError,
|
|
6
|
+
ToolRateLimitError,
|
|
7
|
+
ToolUnavailableError,
|
|
8
|
+
ToolConfigError,
|
|
9
|
+
ToolDependencyError,
|
|
10
|
+
ToolServerError,
|
|
11
|
+
)
|
|
2
12
|
import json
|
|
3
13
|
from pathlib import Path
|
|
4
|
-
from typing import no_type_check
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class ToolExecutionError(Exception):
|
|
8
|
-
"""Base exception for tool execution errors."""
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class ValidationError(Exception):
|
|
12
|
-
"""Exception raised when input validation fails."""
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class AuthenticationError(Exception):
|
|
16
|
-
"""Exception raised when authentication fails."""
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class RateLimitError(Exception):
|
|
20
|
-
"""Exception raised when API rate limit is exceeded."""
|
|
14
|
+
from typing import no_type_check, Optional, Dict, Any
|
|
15
|
+
import hashlib
|
|
16
|
+
import inspect
|
|
21
17
|
|
|
22
18
|
|
|
23
19
|
class BaseTool:
|
|
20
|
+
STATIC_CACHE_VERSION = "1"
|
|
21
|
+
|
|
24
22
|
def __init__(self, tool_config):
|
|
25
23
|
self.tool_config = self._apply_defaults(tool_config)
|
|
24
|
+
self._cached_version_hash: Optional[str] = None
|
|
26
25
|
|
|
27
26
|
@classmethod
|
|
28
27
|
def get_default_config_file(cls):
|
|
@@ -122,12 +121,26 @@ class BaseTool:
|
|
|
122
121
|
return merged_config
|
|
123
122
|
|
|
124
123
|
@no_type_check
|
|
125
|
-
def run(self, arguments=None):
|
|
124
|
+
def run(self, arguments=None, stream_callback=None, use_cache=False, validate=True):
|
|
126
125
|
"""Execute the tool.
|
|
127
126
|
|
|
128
127
|
The default BaseTool implementation accepts an optional arguments
|
|
129
128
|
mapping to align with most concrete tool implementations which expect
|
|
130
129
|
a dictionary of inputs.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
arguments (dict, optional): Tool-specific arguments
|
|
133
|
+
stream_callback (callable, optional): Callback for streaming responses
|
|
134
|
+
use_cache (bool, optional): Whether result caching is enabled
|
|
135
|
+
validate (bool, optional): Whether parameter validation was performed
|
|
136
|
+
|
|
137
|
+
Note:
|
|
138
|
+
These additional parameters (stream_callback, use_cache, validate) are
|
|
139
|
+
passed from run_one_function() to provide context about the execution.
|
|
140
|
+
Tools can use these for optimization or special handling.
|
|
141
|
+
|
|
142
|
+
For backward compatibility, tools that don't accept these parameters
|
|
143
|
+
will still work - they will only receive the arguments parameter.
|
|
131
144
|
"""
|
|
132
145
|
|
|
133
146
|
def check_function_call(self, function_call_json):
|
|
@@ -144,12 +157,184 @@ class BaseTool:
|
|
|
144
157
|
Returns:
|
|
145
158
|
list: List of required parameters for the given endpoint.
|
|
146
159
|
"""
|
|
147
|
-
|
|
148
|
-
|
|
160
|
+
schema = self.tool_config.get("parameter", {})
|
|
161
|
+
required_params = schema.get("required", [])
|
|
162
|
+
return required_params
|
|
163
|
+
|
|
164
|
+
def validate_parameters(self, arguments: Dict[str, Any]) -> Optional[ToolError]:
|
|
165
|
+
"""
|
|
166
|
+
Validate parameters against tool schema.
|
|
149
167
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
required_params.append(param.lower())
|
|
168
|
+
This method provides standard parameter validation using jsonschema.
|
|
169
|
+
Subclasses can override this method to implement custom validation
|
|
170
|
+
logic.
|
|
154
171
|
|
|
155
|
-
|
|
172
|
+
Args:
|
|
173
|
+
arguments: Dictionary of arguments to validate
|
|
174
|
+
|
|
175
|
+
Returns:
|
|
176
|
+
ToolError if validation fails, None if validation passes
|
|
177
|
+
"""
|
|
178
|
+
schema = self.tool_config.get("parameter", {})
|
|
179
|
+
|
|
180
|
+
if not schema:
|
|
181
|
+
return None # No schema to validate against
|
|
182
|
+
|
|
183
|
+
try:
|
|
184
|
+
import jsonschema
|
|
185
|
+
|
|
186
|
+
jsonschema.validate(arguments, schema)
|
|
187
|
+
return None
|
|
188
|
+
except jsonschema.ValidationError as e:
|
|
189
|
+
return ToolValidationError(
|
|
190
|
+
f"Parameter validation failed: {e.message}",
|
|
191
|
+
details={
|
|
192
|
+
"validation_error": str(e),
|
|
193
|
+
"path": list(e.absolute_path) if e.absolute_path else [],
|
|
194
|
+
"schema": schema,
|
|
195
|
+
},
|
|
196
|
+
)
|
|
197
|
+
except Exception as e:
|
|
198
|
+
return ToolValidationError(f"Validation error: {str(e)}")
|
|
199
|
+
|
|
200
|
+
def handle_error(self, exception: Exception) -> ToolError:
|
|
201
|
+
"""
|
|
202
|
+
Classify a raw exception into a structured ToolError.
|
|
203
|
+
|
|
204
|
+
This method provides standard error classification. Subclasses can
|
|
205
|
+
override this method to implement custom error handling logic.
|
|
206
|
+
|
|
207
|
+
Args:
|
|
208
|
+
exception: The raw exception to classify
|
|
209
|
+
|
|
210
|
+
Returns:
|
|
211
|
+
Structured ToolError instance
|
|
212
|
+
"""
|
|
213
|
+
error_str = str(exception).lower()
|
|
214
|
+
|
|
215
|
+
if any(
|
|
216
|
+
keyword in error_str
|
|
217
|
+
for keyword in ["auth", "unauthorized", "401", "403", "api key", "token"]
|
|
218
|
+
):
|
|
219
|
+
return ToolAuthError(f"Authentication failed: {exception}")
|
|
220
|
+
elif any(
|
|
221
|
+
keyword in error_str
|
|
222
|
+
for keyword in ["rate limit", "429", "quota", "limit exceeded"]
|
|
223
|
+
):
|
|
224
|
+
return ToolRateLimitError(f"Rate limit exceeded: {exception}")
|
|
225
|
+
elif any(
|
|
226
|
+
keyword in error_str
|
|
227
|
+
for keyword in [
|
|
228
|
+
"unavailable",
|
|
229
|
+
"timeout",
|
|
230
|
+
"connection",
|
|
231
|
+
"network",
|
|
232
|
+
"not found",
|
|
233
|
+
"404",
|
|
234
|
+
]
|
|
235
|
+
):
|
|
236
|
+
return ToolUnavailableError(f"Tool unavailable: {exception}")
|
|
237
|
+
elif any(
|
|
238
|
+
keyword in error_str
|
|
239
|
+
for keyword in ["validation", "invalid", "schema", "parameter"]
|
|
240
|
+
):
|
|
241
|
+
return ToolValidationError(f"Validation error: {exception}")
|
|
242
|
+
elif any(
|
|
243
|
+
keyword in error_str for keyword in ["config", "configuration", "setup"]
|
|
244
|
+
):
|
|
245
|
+
return ToolConfigError(f"Configuration error: {exception}")
|
|
246
|
+
elif any(
|
|
247
|
+
keyword in error_str
|
|
248
|
+
for keyword in ["import", "module", "dependency", "package"]
|
|
249
|
+
):
|
|
250
|
+
return ToolDependencyError(f"Dependency error: {exception}")
|
|
251
|
+
else:
|
|
252
|
+
return ToolServerError(f"Unexpected error: {exception}")
|
|
253
|
+
|
|
254
|
+
def get_cache_key(self, arguments: Dict[str, Any]) -> str:
|
|
255
|
+
"""
|
|
256
|
+
Generate a cache key for this tool call.
|
|
257
|
+
|
|
258
|
+
This method provides standard cache key generation. Subclasses can
|
|
259
|
+
override this method to implement custom caching logic.
|
|
260
|
+
|
|
261
|
+
Args:
|
|
262
|
+
arguments: Dictionary of arguments for the tool call
|
|
263
|
+
|
|
264
|
+
Returns:
|
|
265
|
+
String cache key
|
|
266
|
+
"""
|
|
267
|
+
# Include tool name and arguments in cache key
|
|
268
|
+
cache_data = {
|
|
269
|
+
"tool_name": self.tool_config.get("name", self.__class__.__name__),
|
|
270
|
+
"arguments": arguments,
|
|
271
|
+
}
|
|
272
|
+
serialized = json.dumps(cache_data, sort_keys=True)
|
|
273
|
+
return hashlib.md5(serialized.encode()).hexdigest()
|
|
274
|
+
|
|
275
|
+
def supports_streaming(self) -> bool:
|
|
276
|
+
"""
|
|
277
|
+
Check if this tool supports streaming responses.
|
|
278
|
+
|
|
279
|
+
Returns:
|
|
280
|
+
True if tool supports streaming, False otherwise
|
|
281
|
+
"""
|
|
282
|
+
return self.tool_config.get("supports_streaming", False)
|
|
283
|
+
|
|
284
|
+
def supports_caching(self) -> bool:
|
|
285
|
+
"""
|
|
286
|
+
Check if this tool's results can be cached.
|
|
287
|
+
|
|
288
|
+
Returns:
|
|
289
|
+
True if tool results can be cached, False otherwise
|
|
290
|
+
"""
|
|
291
|
+
return self.tool_config.get("cacheable", True)
|
|
292
|
+
|
|
293
|
+
def get_cache_namespace(self) -> str:
|
|
294
|
+
"""Return cache namespace identifier for this tool."""
|
|
295
|
+
return self.tool_config.get("name", self.__class__.__name__)
|
|
296
|
+
|
|
297
|
+
def get_cache_version(self) -> str:
|
|
298
|
+
"""Return a stable cache version fingerprint for this tool."""
|
|
299
|
+
if self._cached_version_hash:
|
|
300
|
+
return self._cached_version_hash
|
|
301
|
+
|
|
302
|
+
hasher = hashlib.sha256()
|
|
303
|
+
hasher.update(self.STATIC_CACHE_VERSION.encode("utf-8"))
|
|
304
|
+
|
|
305
|
+
try:
|
|
306
|
+
source = inspect.getsource(self.__class__)
|
|
307
|
+
hasher.update(source.encode("utf-8"))
|
|
308
|
+
except (OSError, TypeError):
|
|
309
|
+
pass
|
|
310
|
+
|
|
311
|
+
try:
|
|
312
|
+
schema = json.dumps(self.tool_config.get("parameter", {}), sort_keys=True)
|
|
313
|
+
hasher.update(schema.encode("utf-8"))
|
|
314
|
+
except (TypeError, ValueError):
|
|
315
|
+
pass
|
|
316
|
+
|
|
317
|
+
self._cached_version_hash = hasher.hexdigest()[:16]
|
|
318
|
+
return self._cached_version_hash
|
|
319
|
+
|
|
320
|
+
def get_cache_ttl(self, result: Any = None) -> Optional[int]:
|
|
321
|
+
"""Return TTL (seconds) for cached results; None means no expiration."""
|
|
322
|
+
ttl = self.tool_config.get("cache_ttl")
|
|
323
|
+
return int(ttl) if ttl is not None else None
|
|
324
|
+
|
|
325
|
+
def get_tool_info(self) -> Dict[str, Any]:
|
|
326
|
+
"""
|
|
327
|
+
Get comprehensive information about this tool.
|
|
328
|
+
|
|
329
|
+
Returns:
|
|
330
|
+
Dictionary containing tool metadata
|
|
331
|
+
"""
|
|
332
|
+
return {
|
|
333
|
+
"name": self.tool_config.get("name", self.__class__.__name__),
|
|
334
|
+
"description": self.tool_config.get("description", ""),
|
|
335
|
+
"supports_streaming": self.supports_streaming(),
|
|
336
|
+
"supports_caching": self.supports_caching(),
|
|
337
|
+
"required_parameters": self.get_required_parameters(),
|
|
338
|
+
"parameter_schema": self.tool_config.get("parameter", {}),
|
|
339
|
+
"tool_type": self.__class__.__name__,
|
|
340
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""
|
|
2
|
+
BioGRID Database REST API Tool
|
|
3
|
+
|
|
4
|
+
This tool provides access to protein and genetic interaction data from the BioGRID database.
|
|
5
|
+
BioGRID is a comprehensive database of physical and genetic interactions.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import requests
|
|
9
|
+
from typing import Dict, Any, List
|
|
10
|
+
from .base_tool import BaseTool
|
|
11
|
+
from .tool_registry import register_tool
|
|
12
|
+
|
|
13
|
+
BIOGRID_BASE_URL = "https://webservice.thebiogrid.org"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@register_tool("BioGRIDRESTTool")
|
|
17
|
+
class BioGRIDRESTTool(BaseTool):
|
|
18
|
+
"""
|
|
19
|
+
BioGRID Database REST API tool.
|
|
20
|
+
Generic wrapper for BioGRID API endpoints defined in ppi_tools.json.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
def __init__(self, tool_config):
|
|
24
|
+
super().__init__(tool_config)
|
|
25
|
+
fields = tool_config.get("fields", {})
|
|
26
|
+
parameter = tool_config.get("parameter", {})
|
|
27
|
+
|
|
28
|
+
self.endpoint_template: str = fields.get("endpoint", "/interactions/")
|
|
29
|
+
self.required: List[str] = parameter.get("required", [])
|
|
30
|
+
self.output_format: str = fields.get("return_format", "JSON")
|
|
31
|
+
|
|
32
|
+
def _build_url(self, arguments: Dict[str, Any]) -> str | Dict[str, Any]:
|
|
33
|
+
"""Build URL for BioGRID API request."""
|
|
34
|
+
url_path = self.endpoint_template
|
|
35
|
+
return BIOGRID_BASE_URL + url_path
|
|
36
|
+
|
|
37
|
+
def _build_params(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
|
|
38
|
+
"""Build parameters for BioGRID API request."""
|
|
39
|
+
params = {"format": "json", "interSpeciesExcluded": "false"}
|
|
40
|
+
|
|
41
|
+
# Check for API key
|
|
42
|
+
api_key = arguments.get("api_key") or arguments.get("accesskey")
|
|
43
|
+
if not api_key:
|
|
44
|
+
# Try to get from environment variable
|
|
45
|
+
import os
|
|
46
|
+
|
|
47
|
+
api_key = os.getenv("BIOGRID_API_KEY")
|
|
48
|
+
|
|
49
|
+
if not api_key:
|
|
50
|
+
raise ValueError(
|
|
51
|
+
"BioGRID API key is required. Please provide 'api_key' parameter "
|
|
52
|
+
"or set BIOGRID_API_KEY environment variable. "
|
|
53
|
+
"Register at: https://webservice.thebiogrid.org/"
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
params["accesskey"] = api_key
|
|
57
|
+
|
|
58
|
+
# Map gene names to BioGRID format
|
|
59
|
+
if "gene_names" in arguments:
|
|
60
|
+
gene_names = arguments["gene_names"]
|
|
61
|
+
if isinstance(gene_names, list):
|
|
62
|
+
params["geneList"] = "|".join(gene_names)
|
|
63
|
+
else:
|
|
64
|
+
params["geneList"] = str(gene_names)
|
|
65
|
+
|
|
66
|
+
# Add other parameters
|
|
67
|
+
if "organism" in arguments:
|
|
68
|
+
# Convert organism name to taxonomy ID
|
|
69
|
+
organism = arguments["organism"]
|
|
70
|
+
if organism.lower() == "homo sapiens":
|
|
71
|
+
params["organism"] = 9606
|
|
72
|
+
elif organism.lower() == "mus musculus":
|
|
73
|
+
params["organism"] = 10090
|
|
74
|
+
else:
|
|
75
|
+
params["organism"] = organism
|
|
76
|
+
|
|
77
|
+
if "interaction_type" in arguments:
|
|
78
|
+
interaction_type = arguments["interaction_type"]
|
|
79
|
+
if interaction_type == "physical":
|
|
80
|
+
params["evidenceList"] = "physical"
|
|
81
|
+
elif interaction_type == "genetic":
|
|
82
|
+
params["evidenceList"] = "genetic"
|
|
83
|
+
# "both" means no evidence filter
|
|
84
|
+
|
|
85
|
+
if "limit" in arguments:
|
|
86
|
+
params["max"] = arguments["limit"]
|
|
87
|
+
|
|
88
|
+
return params
|
|
89
|
+
|
|
90
|
+
def _make_request(self, url: str, params: Dict[str, Any]) -> Dict[str, Any]:
|
|
91
|
+
"""Perform a GET request and handle common errors."""
|
|
92
|
+
try:
|
|
93
|
+
response = requests.get(url, params=params, timeout=30)
|
|
94
|
+
response.raise_for_status()
|
|
95
|
+
|
|
96
|
+
if self.output_format == "JSON":
|
|
97
|
+
return response.json()
|
|
98
|
+
else:
|
|
99
|
+
return {"data": response.text}
|
|
100
|
+
|
|
101
|
+
except requests.exceptions.RequestException as e:
|
|
102
|
+
return {"error": f"Request failed: {str(e)}"}
|
|
103
|
+
except Exception as e:
|
|
104
|
+
return {"error": f"Unexpected error: {str(e)}"}
|
|
105
|
+
|
|
106
|
+
def run(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
|
|
107
|
+
"""Execute the tool with given arguments."""
|
|
108
|
+
# Validate required parameters
|
|
109
|
+
for param in self.required:
|
|
110
|
+
if param not in arguments:
|
|
111
|
+
return {"error": f"Missing required parameter: {param}"}
|
|
112
|
+
|
|
113
|
+
url = self._build_url(arguments)
|
|
114
|
+
if isinstance(url, dict) and "error" in url:
|
|
115
|
+
return url
|
|
116
|
+
|
|
117
|
+
params = self._build_params(arguments)
|
|
118
|
+
return self._make_request(url, params)
|