tooluniverse 1.0.5__py3-none-any.whl → 1.0.7__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 +70 -0
- tooluniverse/agentic_tool.py +121 -15
- tooluniverse/arxiv_tool.py +109 -0
- tooluniverse/base_tool.py +174 -25
- tooluniverse/biorxiv_tool.py +116 -0
- tooluniverse/cellosaurus_tool.py +1332 -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 +155 -0
- tooluniverse/crossref_tool.py +158 -0
- tooluniverse/data/agentic_tools.json +1271 -1179
- tooluniverse/data/alphafold_tools.json +356 -105
- tooluniverse/data/arxiv_tools.json +94 -0
- tooluniverse/data/biorxiv_tools.json +75 -0
- 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 +113 -0
- tooluniverse/data/crossref_tools.json +138 -0
- tooluniverse/data/dailymed_tools.json +17 -3
- tooluniverse/data/dataset_tools.json +1031 -588
- tooluniverse/data/dblp_tools.json +144 -0
- tooluniverse/data/disease_target_score_tools.json +20 -10
- tooluniverse/data/doaj_tools.json +140 -0
- tooluniverse/data/embedding_tools.json +362 -299
- tooluniverse/data/enrichr_tools.json +34 -27
- tooluniverse/data/europe_pmc_tools.json +108 -16
- tooluniverse/data/fatcat_tools.json +77 -0
- 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/gwas_tools.json +1720 -959
- tooluniverse/data/hal_tools.json +75 -0
- 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/mcp_client_tools_example.json +122 -107
- tooluniverse/data/medlineplus_tools.json +50 -10
- tooluniverse/data/medrxiv_tools.json +75 -0
- 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 +95 -0
- tooluniverse/data/openalex_tools.json +100 -31
- tooluniverse/data/opentarget_tools.json +1457 -1372
- tooluniverse/data/osf_preprints_tools.json +81 -0
- 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 +117 -0
- tooluniverse/data/protein_structure_3d_tools.json +138 -0
- tooluniverse/data/pubchem_tools.json +37 -12
- tooluniverse/data/pubmed_tools.json +133 -0
- tooluniverse/data/pubtator_tools.json +68 -60
- tooluniverse/data/rcsb_pdb_tools.json +1532 -1221
- tooluniverse/data/semantic_scholar_tools.json +55 -22
- tooluniverse/data/special_tools.json +8 -6
- tooluniverse/data/tool_composition_tools.json +112 -82
- tooluniverse/data/unified_guideline_tools.json +707 -0
- tooluniverse/data/unpaywall_tools.json +86 -0
- tooluniverse/data/url_fetch_tools.json +102 -82
- tooluniverse/data/uspto_tools.json +49 -30
- tooluniverse/data/wikidata_sparql_tools.json +45 -0
- tooluniverse/data/xml_tools.json +3274 -3113
- tooluniverse/data/zenodo_tools.json +90 -0
- tooluniverse/dblp_tool.py +132 -0
- tooluniverse/default_config.py +30 -0
- tooluniverse/doaj_tool.py +183 -0
- tooluniverse/doctor.py +48 -0
- tooluniverse/europe_pmc_tool.py +132 -17
- tooluniverse/exceptions.py +170 -0
- tooluniverse/execute_function.py +825 -342
- tooluniverse/fatcat_tool.py +65 -0
- tooluniverse/generate_tools.py +198 -0
- tooluniverse/hal_tool.py +77 -0
- tooluniverse/llm_clients.py +283 -20
- tooluniverse/mcp_tool_registry.py +4 -1
- tooluniverse/medrxiv_tool.py +116 -0
- 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 +130 -0
- tooluniverse/openalex_tool.py +34 -0
- tooluniverse/osf_preprints_tool.py +67 -0
- tooluniverse/pmc_tool.py +179 -0
- tooluniverse/protein_structure_3d_tool.py +295 -0
- tooluniverse/pubmed_tool.py +173 -0
- 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 +228 -263
- tooluniverse/smcp_server.py +97 -55
- 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/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/CORE_search_papers.py +67 -0
- tooluniverse/tools/CallAgent.py +46 -0
- tooluniverse/tools/ChEMBL_search_similar_molecules.py +59 -0
- tooluniverse/tools/CodeOptimizer.py +55 -0
- tooluniverse/tools/CodeQualityAnalyzer.py +71 -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/DomainExpertValidator.py +63 -0
- tooluniverse/tools/DrugSafetyAnalyzer.py +59 -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/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/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/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/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 +1738 -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/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/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/unified_guideline_tools.py +1210 -0
- tooluniverse/unpaywall_tool.py +62 -0
- tooluniverse/utils.py +71 -2
- tooluniverse/visualization_tool.py +897 -0
- tooluniverse/wikidata_sparql_tool.py +60 -0
- tooluniverse/zenodo_tool.py +72 -0
- {tooluniverse-1.0.5.dist-info → tooluniverse-1.0.7.dist-info}/METADATA +12 -2
- tooluniverse-1.0.7.dist-info/RECORD +855 -0
- {tooluniverse-1.0.5.dist-info → tooluniverse-1.0.7.dist-info}/entry_points.txt +4 -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 -86
- 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.5.dist-info/RECORD +0 -198
- {tooluniverse-1.0.5.dist-info → tooluniverse-1.0.7.dist-info}/WHEEL +0 -0
- {tooluniverse-1.0.5.dist-info → tooluniverse-1.0.7.dist-info}/licenses/LICENSE +0 -0
- {tooluniverse-1.0.5.dist-info → tooluniverse-1.0.7.dist-info}/top_level.txt +0 -0
tooluniverse/__init__.py
CHANGED
|
@@ -9,6 +9,15 @@ from .default_config import default_tool_files
|
|
|
9
9
|
__version__ = version("tooluniverse")
|
|
10
10
|
from .tool_registry import register_tool, get_tool_registry
|
|
11
11
|
|
|
12
|
+
# Import tools with graceful fallback
|
|
13
|
+
try:
|
|
14
|
+
from . import tools
|
|
15
|
+
|
|
16
|
+
_TOOLS_AVAILABLE = True
|
|
17
|
+
except ImportError:
|
|
18
|
+
_TOOLS_AVAILABLE = False
|
|
19
|
+
tools = None # type: ignore
|
|
20
|
+
|
|
12
21
|
# Check if lazy loading is enabled
|
|
13
22
|
# LAZY_LOADING_ENABLED = os.getenv('TOOLUNIVERSE_LAZY_LOADING', 'true').lower() in ('true', '1', 'yes')
|
|
14
23
|
LAZY_LOADING_ENABLED = (
|
|
@@ -150,6 +159,9 @@ MCPAutoLoaderTool: Any
|
|
|
150
159
|
ADMETAITool: Any
|
|
151
160
|
AlphaFoldRESTTool: Any
|
|
152
161
|
ComposeTool: Any
|
|
162
|
+
CellosaurusSearchTool: Any
|
|
163
|
+
CellosaurusQueryConverterTool: Any
|
|
164
|
+
CellosaurusGetCellLineInfoTool: Any
|
|
153
165
|
if not LAZY_LOADING_ENABLED:
|
|
154
166
|
# Import all tool classes immediately (old behavior) with warning suppression # noqa: E501
|
|
155
167
|
with warnings.catch_warnings():
|
|
@@ -224,6 +236,25 @@ if not LAZY_LOADING_ENABLED:
|
|
|
224
236
|
ODPHPTopicSearch,
|
|
225
237
|
ODPHPOutlinkFetch,
|
|
226
238
|
)
|
|
239
|
+
from .cellosaurus_tool import (
|
|
240
|
+
CellosaurusSearchTool,
|
|
241
|
+
CellosaurusQueryConverterTool,
|
|
242
|
+
CellosaurusGetCellLineInfoTool,
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
# Literature search tools
|
|
246
|
+
from .arxiv_tool import ArXivTool
|
|
247
|
+
from .crossref_tool import CrossrefTool
|
|
248
|
+
from .dblp_tool import DBLPTool
|
|
249
|
+
from .pubmed_tool import PubMedTool
|
|
250
|
+
from .doaj_tool import DOAJTool
|
|
251
|
+
from .unpaywall_tool import UnpaywallTool
|
|
252
|
+
from .biorxiv_tool import BioRxivTool
|
|
253
|
+
from .medrxiv_tool import MedRxivTool
|
|
254
|
+
from .hal_tool import HALTool
|
|
255
|
+
from .core_tool import CoreTool
|
|
256
|
+
from .pmc_tool import PMCTool
|
|
257
|
+
from .zenodo_tool import ZenodoTool
|
|
227
258
|
else:
|
|
228
259
|
# With lazy loading, create lazy import proxies that import modules only when accessed
|
|
229
260
|
MonarchTool = _LazyImportProxy("restful_tool", "MonarchTool")
|
|
@@ -305,6 +336,28 @@ else:
|
|
|
305
336
|
ODPHPMyHealthfinder = _LazyImportProxy("odphp_tool", "ODHPHPMyHealthfinder")
|
|
306
337
|
ODPHPTopicSearch = _LazyImportProxy("odphp_tool", "ODPHPTopicSearch")
|
|
307
338
|
ODPHPOutlinkFetch = _LazyImportProxy("odphp_tool", "ODPHPOutlinkFetch")
|
|
339
|
+
CellosaurusSearchTool = _LazyImportProxy(
|
|
340
|
+
"cellosaurus_tool", "CellosaurusSearchTool"
|
|
341
|
+
)
|
|
342
|
+
CellosaurusQueryConverterTool = _LazyImportProxy(
|
|
343
|
+
"cellosaurus_tool", "CellosaurusQueryConverterTool"
|
|
344
|
+
)
|
|
345
|
+
CellosaurusGetCellLineInfoTool = _LazyImportProxy(
|
|
346
|
+
"cellosaurus_tool", "CellosaurusGetCellLineInfoTool"
|
|
347
|
+
)
|
|
348
|
+
# Literature search tools
|
|
349
|
+
ArXivTool = _LazyImportProxy("arxiv_tool", "ArXivTool")
|
|
350
|
+
CrossrefTool = _LazyImportProxy("crossref_tool", "CrossrefTool")
|
|
351
|
+
DBLPTool = _LazyImportProxy("dblp_tool", "DBLPTool")
|
|
352
|
+
PubMedTool = _LazyImportProxy("pubmed_tool", "PubMedTool")
|
|
353
|
+
DOAJTool = _LazyImportProxy("doaj_tool", "DOAJTool")
|
|
354
|
+
UnpaywallTool = _LazyImportProxy("unpaywall_tool", "UnpaywallTool")
|
|
355
|
+
BioRxivTool = _LazyImportProxy("biorxiv_tool", "BioRxivTool")
|
|
356
|
+
MedRxivTool = _LazyImportProxy("medrxiv_tool", "MedRxivTool")
|
|
357
|
+
HALTool = _LazyImportProxy("hal_tool", "HALTool")
|
|
358
|
+
CoreTool = _LazyImportProxy("core_tool", "CoreTool")
|
|
359
|
+
PMCTool = _LazyImportProxy("pmc_tool", "PMCTool")
|
|
360
|
+
ZenodoTool = _LazyImportProxy("zenodo_tool", "ZenodoTool")
|
|
308
361
|
|
|
309
362
|
__all__ = [
|
|
310
363
|
"__version__",
|
|
@@ -312,6 +365,7 @@ __all__ = [
|
|
|
312
365
|
"BaseTool",
|
|
313
366
|
"register_tool",
|
|
314
367
|
"get_tool_registry",
|
|
368
|
+
"tools",
|
|
315
369
|
"MonarchTool",
|
|
316
370
|
"MonarchDiseasesForMultiplePhenoTool",
|
|
317
371
|
"ClinicalTrialsSearchTool",
|
|
@@ -376,4 +430,20 @@ __all__ = [
|
|
|
376
430
|
"ODPHPItemList",
|
|
377
431
|
"ODPHPTopicSearch",
|
|
378
432
|
"ODPHPOutlinkFetch",
|
|
433
|
+
"CellosaurusSearchTool",
|
|
434
|
+
"CellosaurusQueryConverterTool",
|
|
435
|
+
"CellosaurusGetCellLineInfoTool",
|
|
436
|
+
# Literature search tools
|
|
437
|
+
"ArXivTool",
|
|
438
|
+
"CrossrefTool",
|
|
439
|
+
"DBLPTool",
|
|
440
|
+
"PubMedTool",
|
|
441
|
+
"DOAJTool",
|
|
442
|
+
"UnpaywallTool",
|
|
443
|
+
"BioRxivTool",
|
|
444
|
+
"MedRxivTool",
|
|
445
|
+
"HALTool",
|
|
446
|
+
"CoreTool",
|
|
447
|
+
"PMCTool",
|
|
448
|
+
"ZenodoTool",
|
|
379
449
|
]
|
tooluniverse/agentic_tool.py
CHANGED
|
@@ -3,12 +3,12 @@ from __future__ import annotations
|
|
|
3
3
|
import os
|
|
4
4
|
import json
|
|
5
5
|
from datetime import datetime
|
|
6
|
-
from typing import Any, Dict, List, Optional
|
|
6
|
+
from typing import Any, Callable, Dict, List, Optional
|
|
7
7
|
|
|
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
|
|
|
@@ -30,6 +31,8 @@ API_KEY_ENV_VARS = {
|
|
|
30
31
|
class AgenticTool(BaseTool):
|
|
31
32
|
"""Generic wrapper around LLM prompting supporting JSON-defined configs with prompts and input arguments."""
|
|
32
33
|
|
|
34
|
+
STREAM_FLAG_KEY = "_tooluniverse_stream"
|
|
35
|
+
|
|
33
36
|
@staticmethod
|
|
34
37
|
def has_any_api_keys() -> bool:
|
|
35
38
|
"""
|
|
@@ -199,7 +202,9 @@ class AgenticTool(BaseTool):
|
|
|
199
202
|
f"Tool '{self.name}' failed to initialize with all available APIs"
|
|
200
203
|
)
|
|
201
204
|
|
|
202
|
-
def _try_api(
|
|
205
|
+
def _try_api(
|
|
206
|
+
self, api_type: str, model_id: str, server_url: Optional[str] = None
|
|
207
|
+
) -> bool:
|
|
203
208
|
"""Try to initialize a specific API and model."""
|
|
204
209
|
try:
|
|
205
210
|
if api_type == "CHATGPT":
|
|
@@ -208,6 +213,12 @@ class AgenticTool(BaseTool):
|
|
|
208
213
|
self._llm_client = OpenRouterClient(model_id, self.logger)
|
|
209
214
|
elif api_type == "GEMINI":
|
|
210
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)
|
|
211
222
|
else:
|
|
212
223
|
raise ValueError(f"Unsupported API type: {api_type}")
|
|
213
224
|
|
|
@@ -241,7 +252,7 @@ class AgenticTool(BaseTool):
|
|
|
241
252
|
|
|
242
253
|
# ------------------------------------------------------------------ LLM utilities -----------
|
|
243
254
|
def _validate_model_config(self):
|
|
244
|
-
supported_api_types = ["CHATGPT", "OPENROUTER", "GEMINI"]
|
|
255
|
+
supported_api_types = ["CHATGPT", "OPENROUTER", "GEMINI", "VLLM"]
|
|
245
256
|
if self._api_type not in supported_api_types:
|
|
246
257
|
raise ValueError(
|
|
247
258
|
f"Unsupported API type: {self._api_type}. Supported types: {supported_api_types}"
|
|
@@ -250,9 +261,18 @@ class AgenticTool(BaseTool):
|
|
|
250
261
|
raise ValueError("max_new_tokens must be positive or None")
|
|
251
262
|
|
|
252
263
|
# ------------------------------------------------------------------ public API --------------
|
|
253
|
-
def run(
|
|
264
|
+
def run(
|
|
265
|
+
self,
|
|
266
|
+
arguments: Dict[str, Any],
|
|
267
|
+
stream_callback: Optional[Callable[[str], None]] = None,
|
|
268
|
+
) -> Dict[str, Any]:
|
|
254
269
|
start_time = datetime.now()
|
|
255
270
|
|
|
271
|
+
# Work on a copy so we can remove control flags without mutating caller data
|
|
272
|
+
arguments = dict(arguments or {})
|
|
273
|
+
stream_flag = bool(arguments.pop("_tooluniverse_stream", False))
|
|
274
|
+
streaming_requested = stream_flag or stream_callback is not None
|
|
275
|
+
|
|
256
276
|
# Check if tool is available before attempting to run
|
|
257
277
|
if not self._is_available:
|
|
258
278
|
error_msg = f"Tool '{self.name}' is not available due to initialization error: {self._initialization_error}"
|
|
@@ -300,16 +320,52 @@ class AgenticTool(BaseTool):
|
|
|
300
320
|
custom_format = arguments.get("response_format", None)
|
|
301
321
|
|
|
302
322
|
# Delegate to client; client handles provider-specific logic
|
|
303
|
-
response =
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
return_json=self._return_json,
|
|
308
|
-
custom_format=custom_format,
|
|
309
|
-
max_retries=self._max_retries,
|
|
310
|
-
retry_delay=self._retry_delay,
|
|
323
|
+
response = None
|
|
324
|
+
|
|
325
|
+
streaming_permitted = (
|
|
326
|
+
streaming_requested and not self._return_json and custom_format is None
|
|
311
327
|
)
|
|
312
328
|
|
|
329
|
+
if streaming_permitted and hasattr(self._llm_client, "infer_stream"):
|
|
330
|
+
try:
|
|
331
|
+
chunks_collected: List[str] = []
|
|
332
|
+
stream_iter = self._llm_client.infer_stream(
|
|
333
|
+
messages=messages,
|
|
334
|
+
temperature=self._temperature,
|
|
335
|
+
max_tokens=None,
|
|
336
|
+
return_json=self._return_json,
|
|
337
|
+
custom_format=custom_format,
|
|
338
|
+
max_retries=self._max_retries,
|
|
339
|
+
retry_delay=self._retry_delay,
|
|
340
|
+
)
|
|
341
|
+
for chunk in stream_iter:
|
|
342
|
+
if not chunk:
|
|
343
|
+
continue
|
|
344
|
+
chunks_collected.append(chunk)
|
|
345
|
+
self._emit_stream_chunk(chunk, stream_callback)
|
|
346
|
+
if chunks_collected:
|
|
347
|
+
response = "".join(chunks_collected)
|
|
348
|
+
except Exception as stream_error: # noqa: BLE001
|
|
349
|
+
self.logger.warning(
|
|
350
|
+
f"Streaming failed for tool '{self.name}': {stream_error}. Falling back to buffered response."
|
|
351
|
+
)
|
|
352
|
+
response = None
|
|
353
|
+
|
|
354
|
+
if response is None:
|
|
355
|
+
response = self._llm_client.infer(
|
|
356
|
+
messages=messages,
|
|
357
|
+
temperature=self._temperature,
|
|
358
|
+
max_tokens=None, # client resolves per-model defaults/env
|
|
359
|
+
return_json=self._return_json,
|
|
360
|
+
custom_format=custom_format,
|
|
361
|
+
max_retries=self._max_retries,
|
|
362
|
+
retry_delay=self._retry_delay,
|
|
363
|
+
)
|
|
364
|
+
|
|
365
|
+
if streaming_requested and response:
|
|
366
|
+
for chunk in self._iter_chunks(response):
|
|
367
|
+
self._emit_stream_chunk(chunk, stream_callback)
|
|
368
|
+
|
|
313
369
|
end_time = datetime.now()
|
|
314
370
|
execution_time = (end_time - start_time).total_seconds()
|
|
315
371
|
|
|
@@ -338,7 +394,8 @@ class AgenticTool(BaseTool):
|
|
|
338
394
|
}
|
|
339
395
|
else:
|
|
340
396
|
return response
|
|
341
|
-
|
|
397
|
+
|
|
398
|
+
except Exception as e: # noqa: BLE001
|
|
342
399
|
end_time = datetime.now()
|
|
343
400
|
execution_time = (end_time - start_time).total_seconds()
|
|
344
401
|
self.logger.error(f"Error executing {self.name}: {str(e)}")
|
|
@@ -359,13 +416,57 @@ class AgenticTool(BaseTool):
|
|
|
359
416
|
"model_info": {
|
|
360
417
|
"api_type": self._api_type,
|
|
361
418
|
"model_id": self._model_id,
|
|
419
|
+
"temperature": self._temperature,
|
|
420
|
+
"max_new_tokens": self._max_new_tokens,
|
|
362
421
|
},
|
|
363
422
|
"execution_time_seconds": execution_time,
|
|
364
423
|
"timestamp": start_time.isoformat(),
|
|
365
424
|
},
|
|
366
425
|
}
|
|
367
426
|
else:
|
|
368
|
-
|
|
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
|
+
)
|
|
450
|
+
|
|
451
|
+
@staticmethod
|
|
452
|
+
def _iter_chunks(text: str, size: int = 800):
|
|
453
|
+
if not text:
|
|
454
|
+
return
|
|
455
|
+
for idx in range(0, len(text), size):
|
|
456
|
+
yield text[idx : idx + size]
|
|
457
|
+
|
|
458
|
+
def _emit_stream_chunk(
|
|
459
|
+
self, chunk: Optional[str], stream_callback: Optional[Callable[[str], None]]
|
|
460
|
+
) -> None:
|
|
461
|
+
if not stream_callback or not chunk:
|
|
462
|
+
return
|
|
463
|
+
try:
|
|
464
|
+
stream_callback(chunk)
|
|
465
|
+
except Exception as callback_error: # noqa: BLE001
|
|
466
|
+
# Streaming callbacks should not break tool execution; log and continue
|
|
467
|
+
self.logger.debug(
|
|
468
|
+
f"Stream callback for tool '{self.name}' raised an exception: {callback_error}"
|
|
469
|
+
)
|
|
369
470
|
|
|
370
471
|
# ------------------------------------------------------------------ helpers -----------------
|
|
371
472
|
def _validate_arguments(self, arguments: Dict[str, Any]):
|
|
@@ -448,6 +549,11 @@ class AgenticTool(BaseTool):
|
|
|
448
549
|
self._llm_client = OpenRouterClient(self._model_id, self.logger)
|
|
449
550
|
elif self._api_type == "GEMINI":
|
|
450
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)
|
|
451
557
|
else:
|
|
452
558
|
raise ValueError(f"Unsupported API type: {self._api_type}")
|
|
453
559
|
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import requests
|
|
2
|
+
import xml.etree.ElementTree as ET
|
|
3
|
+
from .base_tool import BaseTool
|
|
4
|
+
from .tool_registry import register_tool
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@register_tool("ArXivTool")
|
|
8
|
+
class ArXivTool(BaseTool):
|
|
9
|
+
"""
|
|
10
|
+
Search arXiv for papers by keyword using the public arXiv API.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
def __init__(
|
|
14
|
+
self,
|
|
15
|
+
tool_config,
|
|
16
|
+
base_url="http://export.arxiv.org/api/query",
|
|
17
|
+
):
|
|
18
|
+
super().__init__(tool_config)
|
|
19
|
+
self.base_url = base_url
|
|
20
|
+
|
|
21
|
+
def run(self, arguments):
|
|
22
|
+
query = arguments.get("query")
|
|
23
|
+
limit = int(arguments.get("limit", 10))
|
|
24
|
+
# sort_by: relevance | lastUpdatedDate | submittedDate
|
|
25
|
+
sort_by = arguments.get("sort_by", "relevance")
|
|
26
|
+
# sort_order: ascending | descending
|
|
27
|
+
sort_order = arguments.get("sort_order", "descending")
|
|
28
|
+
|
|
29
|
+
if not query:
|
|
30
|
+
return {"error": "`query` parameter is required."}
|
|
31
|
+
|
|
32
|
+
return self._search(query, limit, sort_by, sort_order)
|
|
33
|
+
|
|
34
|
+
def _search(self, query, limit, sort_by, sort_order):
|
|
35
|
+
params = {
|
|
36
|
+
"search_query": f"all:{query}",
|
|
37
|
+
"start": 0,
|
|
38
|
+
"max_results": max(1, min(limit, 200)),
|
|
39
|
+
"sortBy": sort_by,
|
|
40
|
+
"sortOrder": sort_order,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
try:
|
|
44
|
+
response = requests.get(self.base_url, params=params, timeout=20)
|
|
45
|
+
except requests.RequestException as e:
|
|
46
|
+
return {
|
|
47
|
+
"error": "Network error calling arXiv API",
|
|
48
|
+
"reason": str(e),
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if response.status_code != 200:
|
|
52
|
+
return {
|
|
53
|
+
"error": f"arXiv API error {response.status_code}",
|
|
54
|
+
"reason": response.reason,
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
# Parse Atom XML
|
|
58
|
+
try:
|
|
59
|
+
root = ET.fromstring(response.text)
|
|
60
|
+
except ET.ParseError as e:
|
|
61
|
+
return {
|
|
62
|
+
"error": "Failed to parse arXiv response",
|
|
63
|
+
"reason": str(e),
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
ns = {"atom": "http://www.w3.org/2005/Atom"}
|
|
67
|
+
entries = []
|
|
68
|
+
for entry in root.findall("atom:entry", ns):
|
|
69
|
+
title_text = entry.findtext(
|
|
70
|
+
"atom:title",
|
|
71
|
+
default="",
|
|
72
|
+
namespaces=ns,
|
|
73
|
+
)
|
|
74
|
+
title = (title_text or "").strip()
|
|
75
|
+
summary_text = entry.findtext(
|
|
76
|
+
"atom:summary",
|
|
77
|
+
default="",
|
|
78
|
+
namespaces=ns,
|
|
79
|
+
)
|
|
80
|
+
summary = (summary_text or "").strip()
|
|
81
|
+
link_el = entry.find("atom:link[@type='text/html']", ns)
|
|
82
|
+
if link_el is not None:
|
|
83
|
+
link = link_el.get("href")
|
|
84
|
+
else:
|
|
85
|
+
link = entry.findtext("atom:id", default="", namespaces=ns)
|
|
86
|
+
published = entry.findtext("atom:published", default="", namespaces=ns)
|
|
87
|
+
updated = entry.findtext("atom:updated", default="", namespaces=ns)
|
|
88
|
+
authors = [
|
|
89
|
+
a.findtext("atom:name", default="", namespaces=ns)
|
|
90
|
+
for a in entry.findall("atom:author", ns)
|
|
91
|
+
]
|
|
92
|
+
primary_category = ""
|
|
93
|
+
cat_el = entry.find("{http://arxiv.org/schemas/atom}primary_category")
|
|
94
|
+
if cat_el is not None:
|
|
95
|
+
primary_category = cat_el.get("term", "")
|
|
96
|
+
|
|
97
|
+
entries.append(
|
|
98
|
+
{
|
|
99
|
+
"title": title,
|
|
100
|
+
"abstract": summary,
|
|
101
|
+
"authors": authors,
|
|
102
|
+
"published": published,
|
|
103
|
+
"updated": updated,
|
|
104
|
+
"category": primary_category,
|
|
105
|
+
"url": link,
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
return entries
|
tooluniverse/base_tool.py
CHANGED
|
@@ -1,23 +1,18 @@
|
|
|
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
|
|
21
16
|
|
|
22
17
|
|
|
23
18
|
class BaseTool:
|
|
@@ -122,12 +117,26 @@ class BaseTool:
|
|
|
122
117
|
return merged_config
|
|
123
118
|
|
|
124
119
|
@no_type_check
|
|
125
|
-
def run(self, arguments=None):
|
|
120
|
+
def run(self, arguments=None, stream_callback=None, use_cache=False, validate=True):
|
|
126
121
|
"""Execute the tool.
|
|
127
122
|
|
|
128
123
|
The default BaseTool implementation accepts an optional arguments
|
|
129
124
|
mapping to align with most concrete tool implementations which expect
|
|
130
125
|
a dictionary of inputs.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
arguments (dict, optional): Tool-specific arguments
|
|
129
|
+
stream_callback (callable, optional): Callback for streaming responses
|
|
130
|
+
use_cache (bool, optional): Whether result caching is enabled
|
|
131
|
+
validate (bool, optional): Whether parameter validation was performed
|
|
132
|
+
|
|
133
|
+
Note:
|
|
134
|
+
These additional parameters (stream_callback, use_cache, validate) are
|
|
135
|
+
passed from run_one_function() to provide context about the execution.
|
|
136
|
+
Tools can use these for optimization or special handling.
|
|
137
|
+
|
|
138
|
+
For backward compatibility, tools that don't accept these parameters
|
|
139
|
+
will still work - they will only receive the arguments parameter.
|
|
131
140
|
"""
|
|
132
141
|
|
|
133
142
|
def check_function_call(self, function_call_json):
|
|
@@ -144,12 +153,152 @@ class BaseTool:
|
|
|
144
153
|
Returns:
|
|
145
154
|
list: List of required parameters for the given endpoint.
|
|
146
155
|
"""
|
|
147
|
-
|
|
148
|
-
|
|
156
|
+
schema = self.tool_config.get("parameter", {})
|
|
157
|
+
required_params = schema.get("required", [])
|
|
158
|
+
return required_params
|
|
159
|
+
|
|
160
|
+
def validate_parameters(self, arguments: Dict[str, Any]) -> Optional[ToolError]:
|
|
161
|
+
"""
|
|
162
|
+
Validate parameters against tool schema.
|
|
149
163
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
required_params.append(param.lower())
|
|
164
|
+
This method provides standard parameter validation using jsonschema.
|
|
165
|
+
Subclasses can override this method to implement custom validation
|
|
166
|
+
logic.
|
|
154
167
|
|
|
155
|
-
|
|
168
|
+
Args:
|
|
169
|
+
arguments: Dictionary of arguments to validate
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
ToolError if validation fails, None if validation passes
|
|
173
|
+
"""
|
|
174
|
+
schema = self.tool_config.get("parameter", {})
|
|
175
|
+
|
|
176
|
+
if not schema:
|
|
177
|
+
return None # No schema to validate against
|
|
178
|
+
|
|
179
|
+
try:
|
|
180
|
+
import jsonschema
|
|
181
|
+
|
|
182
|
+
jsonschema.validate(arguments, schema)
|
|
183
|
+
return None
|
|
184
|
+
except jsonschema.ValidationError as e:
|
|
185
|
+
return ToolValidationError(
|
|
186
|
+
f"Parameter validation failed: {e.message}",
|
|
187
|
+
details={
|
|
188
|
+
"validation_error": str(e),
|
|
189
|
+
"path": list(e.absolute_path) if e.absolute_path else [],
|
|
190
|
+
"schema": schema,
|
|
191
|
+
},
|
|
192
|
+
)
|
|
193
|
+
except Exception as e:
|
|
194
|
+
return ToolValidationError(f"Validation error: {str(e)}")
|
|
195
|
+
|
|
196
|
+
def handle_error(self, exception: Exception) -> ToolError:
|
|
197
|
+
"""
|
|
198
|
+
Classify a raw exception into a structured ToolError.
|
|
199
|
+
|
|
200
|
+
This method provides standard error classification. Subclasses can
|
|
201
|
+
override this method to implement custom error handling logic.
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
exception: The raw exception to classify
|
|
205
|
+
|
|
206
|
+
Returns:
|
|
207
|
+
Structured ToolError instance
|
|
208
|
+
"""
|
|
209
|
+
error_str = str(exception).lower()
|
|
210
|
+
|
|
211
|
+
if any(
|
|
212
|
+
keyword in error_str
|
|
213
|
+
for keyword in ["auth", "unauthorized", "401", "403", "api key", "token"]
|
|
214
|
+
):
|
|
215
|
+
return ToolAuthError(f"Authentication failed: {exception}")
|
|
216
|
+
elif any(
|
|
217
|
+
keyword in error_str
|
|
218
|
+
for keyword in ["rate limit", "429", "quota", "limit exceeded"]
|
|
219
|
+
):
|
|
220
|
+
return ToolRateLimitError(f"Rate limit exceeded: {exception}")
|
|
221
|
+
elif any(
|
|
222
|
+
keyword in error_str
|
|
223
|
+
for keyword in [
|
|
224
|
+
"unavailable",
|
|
225
|
+
"timeout",
|
|
226
|
+
"connection",
|
|
227
|
+
"network",
|
|
228
|
+
"not found",
|
|
229
|
+
"404",
|
|
230
|
+
]
|
|
231
|
+
):
|
|
232
|
+
return ToolUnavailableError(f"Tool unavailable: {exception}")
|
|
233
|
+
elif any(
|
|
234
|
+
keyword in error_str
|
|
235
|
+
for keyword in ["validation", "invalid", "schema", "parameter"]
|
|
236
|
+
):
|
|
237
|
+
return ToolValidationError(f"Validation error: {exception}")
|
|
238
|
+
elif any(
|
|
239
|
+
keyword in error_str for keyword in ["config", "configuration", "setup"]
|
|
240
|
+
):
|
|
241
|
+
return ToolConfigError(f"Configuration error: {exception}")
|
|
242
|
+
elif any(
|
|
243
|
+
keyword in error_str
|
|
244
|
+
for keyword in ["import", "module", "dependency", "package"]
|
|
245
|
+
):
|
|
246
|
+
return ToolDependencyError(f"Dependency error: {exception}")
|
|
247
|
+
else:
|
|
248
|
+
return ToolServerError(f"Unexpected error: {exception}")
|
|
249
|
+
|
|
250
|
+
def get_cache_key(self, arguments: Dict[str, Any]) -> str:
|
|
251
|
+
"""
|
|
252
|
+
Generate a cache key for this tool call.
|
|
253
|
+
|
|
254
|
+
This method provides standard cache key generation. Subclasses can
|
|
255
|
+
override this method to implement custom caching logic.
|
|
256
|
+
|
|
257
|
+
Args:
|
|
258
|
+
arguments: Dictionary of arguments for the tool call
|
|
259
|
+
|
|
260
|
+
Returns:
|
|
261
|
+
String cache key
|
|
262
|
+
"""
|
|
263
|
+
# Include tool name and arguments in cache key
|
|
264
|
+
cache_data = {
|
|
265
|
+
"tool_name": self.tool_config.get("name", self.__class__.__name__),
|
|
266
|
+
"arguments": arguments,
|
|
267
|
+
}
|
|
268
|
+
serialized = json.dumps(cache_data, sort_keys=True)
|
|
269
|
+
return hashlib.md5(serialized.encode()).hexdigest()
|
|
270
|
+
|
|
271
|
+
def supports_streaming(self) -> bool:
|
|
272
|
+
"""
|
|
273
|
+
Check if this tool supports streaming responses.
|
|
274
|
+
|
|
275
|
+
Returns:
|
|
276
|
+
True if tool supports streaming, False otherwise
|
|
277
|
+
"""
|
|
278
|
+
return self.tool_config.get("supports_streaming", False)
|
|
279
|
+
|
|
280
|
+
def supports_caching(self) -> bool:
|
|
281
|
+
"""
|
|
282
|
+
Check if this tool's results can be cached.
|
|
283
|
+
|
|
284
|
+
Returns:
|
|
285
|
+
True if tool results can be cached, False otherwise
|
|
286
|
+
"""
|
|
287
|
+
return self.tool_config.get("cacheable", True)
|
|
288
|
+
|
|
289
|
+
def get_tool_info(self) -> Dict[str, Any]:
|
|
290
|
+
"""
|
|
291
|
+
Get comprehensive information about this tool.
|
|
292
|
+
|
|
293
|
+
Returns:
|
|
294
|
+
Dictionary containing tool metadata
|
|
295
|
+
"""
|
|
296
|
+
return {
|
|
297
|
+
"name": self.tool_config.get("name", self.__class__.__name__),
|
|
298
|
+
"description": self.tool_config.get("description", ""),
|
|
299
|
+
"supports_streaming": self.supports_streaming(),
|
|
300
|
+
"supports_caching": self.supports_caching(),
|
|
301
|
+
"required_parameters": self.get_required_parameters(),
|
|
302
|
+
"parameter_schema": self.tool_config.get("parameter", {}),
|
|
303
|
+
"tool_type": self.__class__.__name__,
|
|
304
|
+
}
|