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.

Files changed (824) hide show
  1. tooluniverse/__init__.py +70 -0
  2. tooluniverse/agentic_tool.py +121 -15
  3. tooluniverse/arxiv_tool.py +109 -0
  4. tooluniverse/base_tool.py +174 -25
  5. tooluniverse/biorxiv_tool.py +116 -0
  6. tooluniverse/cellosaurus_tool.py +1332 -0
  7. tooluniverse/compose_scripts/enhanced_multi_agent_literature_search.py +310 -0
  8. tooluniverse/compose_scripts/multi_agent_literature_search.py +794 -0
  9. tooluniverse/compose_scripts/tool_graph_generation.py +68 -35
  10. tooluniverse/compose_scripts/tool_metadata_generator.py +205 -105
  11. tooluniverse/compose_tool.py +93 -8
  12. tooluniverse/core_tool.py +155 -0
  13. tooluniverse/crossref_tool.py +158 -0
  14. tooluniverse/data/agentic_tools.json +1271 -1179
  15. tooluniverse/data/alphafold_tools.json +356 -105
  16. tooluniverse/data/arxiv_tools.json +94 -0
  17. tooluniverse/data/biorxiv_tools.json +75 -0
  18. tooluniverse/data/cellosaurus_tools.json +260 -0
  19. tooluniverse/data/chembl_tools.json +27 -12
  20. tooluniverse/data/clinicaltrials_gov_tools.json +377 -302
  21. tooluniverse/data/compose_tools.json +123 -16
  22. tooluniverse/data/core_tools.json +113 -0
  23. tooluniverse/data/crossref_tools.json +138 -0
  24. tooluniverse/data/dailymed_tools.json +17 -3
  25. tooluniverse/data/dataset_tools.json +1031 -588
  26. tooluniverse/data/dblp_tools.json +144 -0
  27. tooluniverse/data/disease_target_score_tools.json +20 -10
  28. tooluniverse/data/doaj_tools.json +140 -0
  29. tooluniverse/data/embedding_tools.json +362 -299
  30. tooluniverse/data/enrichr_tools.json +34 -27
  31. tooluniverse/data/europe_pmc_tools.json +108 -16
  32. tooluniverse/data/fatcat_tools.json +77 -0
  33. tooluniverse/data/fda_drug_adverse_event_tools.json +1061 -445
  34. tooluniverse/data/fda_drug_labeling_tools.json +6858 -6901
  35. tooluniverse/data/finder_tools.json +32 -37
  36. tooluniverse/data/gene_ontology_tools.json +19 -7
  37. tooluniverse/data/gwas_tools.json +1720 -959
  38. tooluniverse/data/hal_tools.json +75 -0
  39. tooluniverse/data/hpa_tools.json +53 -14
  40. tooluniverse/data/humanbase_tools.json +51 -43
  41. tooluniverse/data/idmap_tools.json +76 -70
  42. tooluniverse/data/literature_search_tools.json +306 -0
  43. tooluniverse/data/mcp_client_tools_example.json +122 -107
  44. tooluniverse/data/medlineplus_tools.json +50 -10
  45. tooluniverse/data/medrxiv_tools.json +75 -0
  46. tooluniverse/data/molecule_2d_tools.json +134 -0
  47. tooluniverse/data/molecule_3d_tools.json +164 -0
  48. tooluniverse/data/monarch_tools.json +112 -110
  49. tooluniverse/data/odphp_tools.json +389 -119
  50. tooluniverse/data/openaire_tools.json +95 -0
  51. tooluniverse/data/openalex_tools.json +100 -31
  52. tooluniverse/data/opentarget_tools.json +1457 -1372
  53. tooluniverse/data/osf_preprints_tools.json +81 -0
  54. tooluniverse/data/packages/bioinformatics_core_tools.json +40 -10
  55. tooluniverse/data/packages/cheminformatics_tools.json +20 -5
  56. tooluniverse/data/packages/genomics_tools.json +36 -9
  57. tooluniverse/data/packages/machine_learning_tools.json +36 -9
  58. tooluniverse/data/packages/scientific_computing_tools.json +20 -5
  59. tooluniverse/data/packages/single_cell_tools.json +20 -5
  60. tooluniverse/data/packages/structural_biology_tools.json +16 -4
  61. tooluniverse/data/packages/visualization_tools.json +20 -5
  62. tooluniverse/data/pmc_tools.json +117 -0
  63. tooluniverse/data/protein_structure_3d_tools.json +138 -0
  64. tooluniverse/data/pubchem_tools.json +37 -12
  65. tooluniverse/data/pubmed_tools.json +133 -0
  66. tooluniverse/data/pubtator_tools.json +68 -60
  67. tooluniverse/data/rcsb_pdb_tools.json +1532 -1221
  68. tooluniverse/data/semantic_scholar_tools.json +55 -22
  69. tooluniverse/data/special_tools.json +8 -6
  70. tooluniverse/data/tool_composition_tools.json +112 -82
  71. tooluniverse/data/unified_guideline_tools.json +707 -0
  72. tooluniverse/data/unpaywall_tools.json +86 -0
  73. tooluniverse/data/url_fetch_tools.json +102 -82
  74. tooluniverse/data/uspto_tools.json +49 -30
  75. tooluniverse/data/wikidata_sparql_tools.json +45 -0
  76. tooluniverse/data/xml_tools.json +3274 -3113
  77. tooluniverse/data/zenodo_tools.json +90 -0
  78. tooluniverse/dblp_tool.py +132 -0
  79. tooluniverse/default_config.py +30 -0
  80. tooluniverse/doaj_tool.py +183 -0
  81. tooluniverse/doctor.py +48 -0
  82. tooluniverse/europe_pmc_tool.py +132 -17
  83. tooluniverse/exceptions.py +170 -0
  84. tooluniverse/execute_function.py +825 -342
  85. tooluniverse/fatcat_tool.py +65 -0
  86. tooluniverse/generate_tools.py +198 -0
  87. tooluniverse/hal_tool.py +77 -0
  88. tooluniverse/llm_clients.py +283 -20
  89. tooluniverse/mcp_tool_registry.py +4 -1
  90. tooluniverse/medrxiv_tool.py +116 -0
  91. tooluniverse/memory_manager.py +166 -0
  92. tooluniverse/molecule_2d_tool.py +274 -0
  93. tooluniverse/molecule_3d_tool.py +441 -0
  94. tooluniverse/odphp_tool.py +49 -14
  95. tooluniverse/openaire_tool.py +130 -0
  96. tooluniverse/openalex_tool.py +34 -0
  97. tooluniverse/osf_preprints_tool.py +67 -0
  98. tooluniverse/pmc_tool.py +179 -0
  99. tooluniverse/protein_structure_3d_tool.py +295 -0
  100. tooluniverse/pubmed_tool.py +173 -0
  101. tooluniverse/remote/boltz/boltz_mcp_server.py +3 -1
  102. tooluniverse/remote/uspto_downloader/uspto_downloader_mcp_server.py +3 -1
  103. tooluniverse/semantic_scholar_tool.py +40 -10
  104. tooluniverse/smcp.py +228 -263
  105. tooluniverse/smcp_server.py +97 -55
  106. tooluniverse/tool_registry.py +35 -3
  107. tooluniverse/tools/ADMETAI_predict_BBB_penetrance.py +46 -0
  108. tooluniverse/tools/ADMETAI_predict_CYP_interactions.py +46 -0
  109. tooluniverse/tools/ADMETAI_predict_bioavailability.py +46 -0
  110. tooluniverse/tools/ADMETAI_predict_clearance_distribution.py +49 -0
  111. tooluniverse/tools/ADMETAI_predict_nuclear_receptor_activity.py +49 -0
  112. tooluniverse/tools/ADMETAI_predict_physicochemical_properties.py +49 -0
  113. tooluniverse/tools/ADMETAI_predict_solubility_lipophilicity_hydration.py +49 -0
  114. tooluniverse/tools/ADMETAI_predict_stress_response.py +46 -0
  115. tooluniverse/tools/ADMETAI_predict_toxicity.py +46 -0
  116. tooluniverse/tools/AdvancedCodeQualityAnalyzer.py +63 -0
  117. tooluniverse/tools/AdverseEventICDMapper.py +46 -0
  118. tooluniverse/tools/AdverseEventPredictionQuestionGenerator.py +52 -0
  119. tooluniverse/tools/AdverseEventPredictionQuestionGeneratorWithContext.py +59 -0
  120. tooluniverse/tools/ArXiv_search_papers.py +63 -0
  121. tooluniverse/tools/ArgumentDescriptionOptimizer.py +55 -0
  122. tooluniverse/tools/BioRxiv_search_preprints.py +52 -0
  123. tooluniverse/tools/BiomarkerDiscoveryWorkflow.py +55 -0
  124. tooluniverse/tools/CORE_search_papers.py +67 -0
  125. tooluniverse/tools/CallAgent.py +46 -0
  126. tooluniverse/tools/ChEMBL_search_similar_molecules.py +59 -0
  127. tooluniverse/tools/CodeOptimizer.py +55 -0
  128. tooluniverse/tools/CodeQualityAnalyzer.py +71 -0
  129. tooluniverse/tools/ComprehensiveDrugDiscoveryPipeline.py +49 -0
  130. tooluniverse/tools/Crossref_search_works.py +55 -0
  131. tooluniverse/tools/DBLP_search_publications.py +52 -0
  132. tooluniverse/tools/DOAJ_search_articles.py +55 -0
  133. tooluniverse/tools/DailyMed_get_spl_by_setid.py +52 -0
  134. tooluniverse/tools/DailyMed_search_spls.py +79 -0
  135. tooluniverse/tools/DataAnalysisValidityReviewer.py +49 -0
  136. tooluniverse/tools/DescriptionAnalyzer.py +55 -0
  137. tooluniverse/tools/DescriptionQualityEvaluator.py +59 -0
  138. tooluniverse/tools/DomainExpertValidator.py +63 -0
  139. tooluniverse/tools/DrugSafetyAnalyzer.py +59 -0
  140. tooluniverse/tools/EthicalComplianceReviewer.py +49 -0
  141. tooluniverse/tools/EuropePMC_Guidelines_Search.py +52 -0
  142. tooluniverse/tools/EuropePMC_search_articles.py +52 -0
  143. tooluniverse/tools/ExperimentalDesignScorer.py +55 -0
  144. tooluniverse/tools/FAERS_count_additive_administration_routes.py +52 -0
  145. tooluniverse/tools/FAERS_count_additive_adverse_reactions.py +71 -0
  146. tooluniverse/tools/FAERS_count_additive_event_reports_by_country.py +63 -0
  147. tooluniverse/tools/FAERS_count_additive_reaction_outcomes.py +63 -0
  148. tooluniverse/tools/FAERS_count_additive_reports_by_reporter_country.py +63 -0
  149. tooluniverse/tools/FAERS_count_additive_seriousness_classification.py +63 -0
  150. tooluniverse/tools/FAERS_count_country_by_drug_event.py +63 -0
  151. tooluniverse/tools/FAERS_count_death_related_by_drug.py +49 -0
  152. tooluniverse/tools/FAERS_count_drug_routes_by_event.py +52 -0
  153. tooluniverse/tools/FAERS_count_drugs_by_drug_event.py +63 -0
  154. tooluniverse/tools/FAERS_count_outcomes_by_drug_event.py +63 -0
  155. tooluniverse/tools/FAERS_count_patient_age_distribution.py +49 -0
  156. tooluniverse/tools/FAERS_count_reactions_by_drug_event.py +71 -0
  157. tooluniverse/tools/FAERS_count_reportercountry_by_drug_event.py +63 -0
  158. tooluniverse/tools/FAERS_count_seriousness_by_drug_event.py +63 -0
  159. tooluniverse/tools/FDA_get_abuse_dependence_info_by_drug_name.py +55 -0
  160. tooluniverse/tools/FDA_get_abuse_info_by_drug_name.py +55 -0
  161. tooluniverse/tools/FDA_get_accessories_info_by_drug_name.py +55 -0
  162. tooluniverse/tools/FDA_get_active_ingredient_info_by_drug_name.py +55 -0
  163. tooluniverse/tools/FDA_get_adverse_reactions_by_drug_name.py +55 -0
  164. tooluniverse/tools/FDA_get_alarms_by_drug_name.py +55 -0
  165. tooluniverse/tools/FDA_get_animal_pharmacology_info_by_drug_name.py +55 -0
  166. tooluniverse/tools/FDA_get_assembly_installation_info_by_drug_name.py +55 -0
  167. tooluniverse/tools/FDA_get_boxed_warning_info_by_drug_name.py +55 -0
  168. tooluniverse/tools/FDA_get_brand_name_generic_name.py +52 -0
  169. tooluniverse/tools/FDA_get_calibration_instructions_by_drug_name.py +55 -0
  170. tooluniverse/tools/FDA_get_carcinogenic_mutagenic_fertility_by_drug_name.py +55 -0
  171. tooluniverse/tools/FDA_get_child_safety_info_by_drug_name.py +55 -0
  172. tooluniverse/tools/FDA_get_clinical_pharmacology_by_drug_name.py +55 -0
  173. tooluniverse/tools/FDA_get_clinical_studies_info_by_drug_name.py +55 -0
  174. tooluniverse/tools/FDA_get_contact_for_questions_info_by_drug_name.py +55 -0
  175. tooluniverse/tools/FDA_get_contraindications_by_drug_name.py +55 -0
  176. tooluniverse/tools/FDA_get_controlled_substance_DEA_schedule_info_by_drug_name.py +55 -0
  177. tooluniverse/tools/FDA_get_dear_health_care_provider_letter_info_by_drug_name.py +55 -0
  178. tooluniverse/tools/FDA_get_dependence_info_by_drug_name.py +55 -0
  179. tooluniverse/tools/FDA_get_disposal_info_by_drug_name.py +55 -0
  180. tooluniverse/tools/FDA_get_do_not_use_info_by_drug_name.py +55 -0
  181. tooluniverse/tools/FDA_get_document_id_by_drug_name.py +55 -0
  182. tooluniverse/tools/FDA_get_dosage_and_storage_information_by_drug_name.py +55 -0
  183. tooluniverse/tools/FDA_get_dosage_forms_and_strengths_by_drug_name.py +55 -0
  184. tooluniverse/tools/FDA_get_drug_generic_name.py +46 -0
  185. tooluniverse/tools/FDA_get_drug_interactions_by_drug_name.py +55 -0
  186. tooluniverse/tools/FDA_get_drug_name_by_SPL_ID.py +55 -0
  187. tooluniverse/tools/FDA_get_drug_name_by_adverse_reaction.py +59 -0
  188. tooluniverse/tools/FDA_get_drug_name_by_calibration_instructions.py +59 -0
  189. tooluniverse/tools/FDA_get_drug_name_by_dependence_info.py +59 -0
  190. tooluniverse/tools/FDA_get_drug_name_by_document_id.py +55 -0
  191. tooluniverse/tools/FDA_get_drug_name_by_dosage_info.py +55 -0
  192. tooluniverse/tools/FDA_get_drug_name_by_environmental_warning.py +59 -0
  193. tooluniverse/tools/FDA_get_drug_name_by_inactive_ingredient.py +59 -0
  194. tooluniverse/tools/FDA_get_drug_name_by_info_on_conditions_for_doctor_consultation.py +55 -0
  195. tooluniverse/tools/FDA_get_drug_name_by_labor_and_delivery_info.py +59 -0
  196. tooluniverse/tools/FDA_get_drug_name_by_microbiology.py +59 -0
  197. tooluniverse/tools/FDA_get_drug_name_by_other_safety_info.py +55 -0
  198. tooluniverse/tools/FDA_get_drug_name_by_pharmacodynamics.py +59 -0
  199. tooluniverse/tools/FDA_get_drug_name_by_pharmacogenomics.py +59 -0
  200. tooluniverse/tools/FDA_get_drug_name_by_precautions.py +55 -0
  201. tooluniverse/tools/FDA_get_drug_name_by_pregnancy_or_breastfeeding_info.py +59 -0
  202. tooluniverse/tools/FDA_get_drug_name_by_principal_display_panel.py +59 -0
  203. tooluniverse/tools/FDA_get_drug_name_by_reference.py +55 -0
  204. tooluniverse/tools/FDA_get_drug_name_by_set_id.py +55 -0
  205. tooluniverse/tools/FDA_get_drug_name_by_stop_use_info.py +55 -0
  206. tooluniverse/tools/FDA_get_drug_name_by_storage_and_handling_info.py +55 -0
  207. tooluniverse/tools/FDA_get_drug_name_by_warnings.py +55 -0
  208. tooluniverse/tools/FDA_get_drug_name_from_patient_package_insert.py +59 -0
  209. tooluniverse/tools/FDA_get_drug_names_by_abuse_dependence_info.py +55 -0
  210. tooluniverse/tools/FDA_get_drug_names_by_abuse_info.py +63 -0
  211. tooluniverse/tools/FDA_get_drug_names_by_accessories.py +63 -0
  212. tooluniverse/tools/FDA_get_drug_names_by_active_ingredient.py +63 -0
  213. tooluniverse/tools/FDA_get_drug_names_by_alarm.py +63 -0
  214. tooluniverse/tools/FDA_get_drug_names_by_animal_pharmacology_info.py +63 -0
  215. tooluniverse/tools/FDA_get_drug_names_by_application_number_NDC_number.py +59 -0
  216. tooluniverse/tools/FDA_get_drug_names_by_assembly_installation_info.py +63 -0
  217. tooluniverse/tools/FDA_get_drug_names_by_boxed_warning.py +63 -0
  218. tooluniverse/tools/FDA_get_drug_names_by_child_safety_info.py +63 -0
  219. tooluniverse/tools/FDA_get_drug_names_by_clinical_pharmacology.py +63 -0
  220. tooluniverse/tools/FDA_get_drug_names_by_clinical_studies.py +63 -0
  221. tooluniverse/tools/FDA_get_drug_names_by_consulting_doctor_pharmacist_info.py +63 -0
  222. tooluniverse/tools/FDA_get_drug_names_by_contraindications.py +63 -0
  223. tooluniverse/tools/FDA_get_drug_names_by_controlled_substance_DEA_schedule.py +63 -0
  224. tooluniverse/tools/FDA_get_drug_names_by_dear_health_care_provider_letter_info.py +63 -0
  225. tooluniverse/tools/FDA_get_drug_names_by_disposal_info.py +63 -0
  226. tooluniverse/tools/FDA_get_drug_names_by_dosage_forms_and_strengths_info.py +63 -0
  227. tooluniverse/tools/FDA_get_drug_names_by_drug_interactions.py +63 -0
  228. tooluniverse/tools/FDA_get_drug_names_by_effective_time.py +63 -0
  229. tooluniverse/tools/FDA_get_drug_names_by_food_safety_warnings.py +63 -0
  230. tooluniverse/tools/FDA_get_drug_names_by_general_precautions.py +63 -0
  231. tooluniverse/tools/FDA_get_drug_names_by_geriatric_use.py +63 -0
  232. tooluniverse/tools/FDA_get_drug_names_by_health_claim.py +63 -0
  233. tooluniverse/tools/FDA_get_drug_names_by_indication.py +55 -0
  234. tooluniverse/tools/FDA_get_drug_names_by_info_for_nursing_mothers.py +63 -0
  235. tooluniverse/tools/FDA_get_drug_names_by_information_for_owners_or_caregivers.py +63 -0
  236. tooluniverse/tools/FDA_get_drug_names_by_ingredient.py +63 -0
  237. tooluniverse/tools/FDA_get_drug_names_by_instructions_for_use.py +63 -0
  238. tooluniverse/tools/FDA_get_drug_names_by_lab_test_interference.py +63 -0
  239. tooluniverse/tools/FDA_get_drug_names_by_lab_tests.py +63 -0
  240. tooluniverse/tools/FDA_get_drug_names_by_mechanism_of_action.py +63 -0
  241. tooluniverse/tools/FDA_get_drug_names_by_medication_guide.py +63 -0
  242. tooluniverse/tools/FDA_get_drug_names_by_nonclinical_toxicology_info.py +63 -0
  243. tooluniverse/tools/FDA_get_drug_names_by_nonteratogenic_effects.py +63 -0
  244. tooluniverse/tools/FDA_get_drug_names_by_overdosage_info.py +63 -0
  245. tooluniverse/tools/FDA_get_drug_names_by_pediatric_use.py +63 -0
  246. tooluniverse/tools/FDA_get_drug_names_by_pharmacokinetics.py +63 -0
  247. tooluniverse/tools/FDA_get_drug_names_by_population_use.py +63 -0
  248. tooluniverse/tools/FDA_get_drug_names_by_pregnancy_effects_info.py +63 -0
  249. tooluniverse/tools/FDA_get_drug_names_by_residue_warning.py +63 -0
  250. tooluniverse/tools/FDA_get_drug_names_by_risk.py +63 -0
  251. tooluniverse/tools/FDA_get_drug_names_by_route.py +63 -0
  252. tooluniverse/tools/FDA_get_drug_names_by_safe_handling_warning.py +63 -0
  253. tooluniverse/tools/FDA_get_drug_names_by_safety_summary.py +63 -0
  254. tooluniverse/tools/FDA_get_drug_names_by_spl_indexing_data_elements.py +63 -0
  255. tooluniverse/tools/FDA_get_drug_names_by_teratogenic_effects.py +63 -0
  256. tooluniverse/tools/FDA_get_drug_names_by_user_safety_warning.py +63 -0
  257. tooluniverse/tools/FDA_get_drug_names_by_warnings_and_cautions.py +63 -0
  258. tooluniverse/tools/FDA_get_drugs_by_carcinogenic_mutagenic_fertility.py +63 -0
  259. tooluniverse/tools/FDA_get_effective_time_by_drug_name.py +55 -0
  260. tooluniverse/tools/FDA_get_environmental_warning_by_drug_name.py +55 -0
  261. tooluniverse/tools/FDA_get_general_precautions_by_drug_name.py +55 -0
  262. tooluniverse/tools/FDA_get_geriatric_use_info_by_drug_name.py +55 -0
  263. tooluniverse/tools/FDA_get_health_claims_by_drug_name.py +55 -0
  264. tooluniverse/tools/FDA_get_inactive_ingredient_info_by_drug_name.py +55 -0
  265. tooluniverse/tools/FDA_get_indications_by_drug_name.py +55 -0
  266. tooluniverse/tools/FDA_get_info_for_nursing_mothers_by_drug_name.py +55 -0
  267. tooluniverse/tools/FDA_get_info_for_patients_by_drug_name.py +55 -0
  268. tooluniverse/tools/FDA_get_info_on_conditions_for_doctor_consultation_by_drug_name.py +55 -0
  269. tooluniverse/tools/FDA_get_info_on_consulting_doctor_pharmacist_by_drug_name.py +55 -0
  270. tooluniverse/tools/FDA_get_information_for_owners_or_caregivers_by_drug_name.py +55 -0
  271. tooluniverse/tools/FDA_get_ingredients_by_drug_name.py +55 -0
  272. tooluniverse/tools/FDA_get_instructions_for_use_by_drug_name.py +55 -0
  273. tooluniverse/tools/FDA_get_lab_test_interference_info_by_drug_name.py +55 -0
  274. tooluniverse/tools/FDA_get_lab_tests_by_drug_name.py +55 -0
  275. tooluniverse/tools/FDA_get_labor_and_delivery_info_by_drug_name.py +55 -0
  276. tooluniverse/tools/FDA_get_manufacturer_name_NDC_number_by_drug_name.py +55 -0
  277. tooluniverse/tools/FDA_get_mechanism_of_action_by_drug_name.py +55 -0
  278. tooluniverse/tools/FDA_get_medication_guide_info_by_drug_name.py +55 -0
  279. tooluniverse/tools/FDA_get_microbiology_info_by_drug_name.py +55 -0
  280. tooluniverse/tools/FDA_get_nonclinical_toxicology_info_by_drug_name.py +55 -0
  281. tooluniverse/tools/FDA_get_nonteratogenic_effects_by_drug_name.py +55 -0
  282. tooluniverse/tools/FDA_get_other_safety_info_by_drug_name.py +55 -0
  283. tooluniverse/tools/FDA_get_overdosage_info_by_drug_name.py +55 -0
  284. tooluniverse/tools/FDA_get_patient_package_insert_from_drug_name.py +55 -0
  285. tooluniverse/tools/FDA_get_pediatric_use_info_by_drug_name.py +55 -0
  286. tooluniverse/tools/FDA_get_pharmacodynamics_by_drug_name.py +55 -0
  287. tooluniverse/tools/FDA_get_pharmacogenomics_info_by_drug_name.py +55 -0
  288. tooluniverse/tools/FDA_get_pharmacokinetics_by_drug_name.py +55 -0
  289. tooluniverse/tools/FDA_get_population_use_info_by_drug_name.py +55 -0
  290. tooluniverse/tools/FDA_get_precautions_by_drug_name.py +55 -0
  291. tooluniverse/tools/FDA_get_pregnancy_effects_info_by_drug_name.py +55 -0
  292. tooluniverse/tools/FDA_get_pregnancy_or_breastfeeding_info_by_drug_name.py +55 -0
  293. tooluniverse/tools/FDA_get_principal_display_panel_by_drug_name.py +55 -0
  294. tooluniverse/tools/FDA_get_purpose_info_by_drug_name.py +55 -0
  295. tooluniverse/tools/FDA_get_recent_changes_by_drug_name.py +55 -0
  296. tooluniverse/tools/FDA_get_reference_info_by_drug_name.py +55 -0
  297. tooluniverse/tools/FDA_get_residue_warning_by_drug_name.py +55 -0
  298. tooluniverse/tools/FDA_get_risk_info_by_drug_name.py +55 -0
  299. tooluniverse/tools/FDA_get_route_info_by_drug_name.py +55 -0
  300. tooluniverse/tools/FDA_get_safe_handling_warnings_by_drug_name.py +55 -0
  301. tooluniverse/tools/FDA_get_safety_summary_by_drug_name.py +55 -0
  302. tooluniverse/tools/FDA_get_spl_indexing_data_elements_by_drug_name.py +55 -0
  303. tooluniverse/tools/FDA_get_spl_unclassified_section_by_drug_name.py +55 -0
  304. tooluniverse/tools/FDA_get_stop_use_info_by_drug_name.py +55 -0
  305. tooluniverse/tools/FDA_get_storage_and_handling_info_by_drug_name.py +55 -0
  306. tooluniverse/tools/FDA_get_teratogenic_effects_by_drug_name.py +55 -0
  307. tooluniverse/tools/FDA_get_user_safety_warning_by_drug_names.py +55 -0
  308. tooluniverse/tools/FDA_get_warnings_and_cautions_by_drug_name.py +55 -0
  309. tooluniverse/tools/FDA_get_warnings_by_drug_name.py +55 -0
  310. tooluniverse/tools/FDA_get_when_using_info.py +55 -0
  311. tooluniverse/tools/FDA_retrieve_device_use_by_drug_name.py +55 -0
  312. tooluniverse/tools/FDA_retrieve_drug_name_by_device_use.py +59 -0
  313. tooluniverse/tools/FDA_retrieve_drug_names_by_patient_medication_info.py +55 -0
  314. tooluniverse/tools/FDA_retrieve_patient_medication_info_by_drug_name.py +55 -0
  315. tooluniverse/tools/Fatcat_search_scholar.py +52 -0
  316. tooluniverse/tools/Finish.py +44 -0
  317. tooluniverse/tools/GO_get_annotations_for_gene.py +46 -0
  318. tooluniverse/tools/GO_get_genes_for_term.py +55 -0
  319. tooluniverse/tools/GO_get_term_by_id.py +46 -0
  320. tooluniverse/tools/GO_get_term_details.py +46 -0
  321. tooluniverse/tools/GO_search_terms.py +46 -0
  322. tooluniverse/tools/HAL_search_archive.py +52 -0
  323. tooluniverse/tools/HPA_get_biological_processes_by_gene.py +52 -0
  324. tooluniverse/tools/HPA_get_cancer_prognostics_by_gene.py +49 -0
  325. tooluniverse/tools/HPA_get_comparative_expression_by_gene_and_cellline.py +52 -0
  326. tooluniverse/tools/HPA_get_comprehensive_gene_details_by_ensembl_id.py +63 -0
  327. tooluniverse/tools/HPA_get_contextual_biological_process_analysis.py +52 -0
  328. tooluniverse/tools/HPA_get_disease_expression_by_gene_tissue_disease.py +59 -0
  329. tooluniverse/tools/HPA_get_gene_basic_info_by_ensembl_id.py +49 -0
  330. tooluniverse/tools/HPA_get_gene_tsv_data_by_ensembl_id.py +49 -0
  331. tooluniverse/tools/HPA_get_protein_interactions_by_gene.py +49 -0
  332. tooluniverse/tools/HPA_get_rna_expression_by_source.py +59 -0
  333. tooluniverse/tools/HPA_get_rna_expression_in_specific_tissues.py +52 -0
  334. tooluniverse/tools/HPA_get_subcellular_location.py +46 -0
  335. tooluniverse/tools/HPA_search_genes_by_query.py +49 -0
  336. tooluniverse/tools/HypothesisGenerator.py +63 -0
  337. tooluniverse/tools/LabelGenerator.py +67 -0
  338. tooluniverse/tools/LiteratureContextReviewer.py +55 -0
  339. tooluniverse/tools/LiteratureSearchTool.py +49 -0
  340. tooluniverse/tools/MedRxiv_search_preprints.py +52 -0
  341. tooluniverse/tools/MedicalLiteratureReviewer.py +71 -0
  342. tooluniverse/tools/MedicalTermNormalizer.py +46 -0
  343. tooluniverse/tools/MedlinePlus_connect_lookup_by_code.py +67 -0
  344. tooluniverse/tools/MedlinePlus_get_genetics_condition_by_name.py +52 -0
  345. tooluniverse/tools/MedlinePlus_get_genetics_gene_by_name.py +52 -0
  346. tooluniverse/tools/MedlinePlus_get_genetics_index.py +44 -0
  347. tooluniverse/tools/MedlinePlus_search_topics_by_keyword.py +55 -0
  348. tooluniverse/tools/MethodologyRigorReviewer.py +49 -0
  349. tooluniverse/tools/MultiAgentLiteratureSearch.py +59 -0
  350. tooluniverse/tools/NICE_Clinical_Guidelines_Search.py +52 -0
  351. tooluniverse/tools/NICE_Guideline_Full_Text.py +46 -0
  352. tooluniverse/tools/NoveltySignificanceReviewer.py +59 -0
  353. tooluniverse/tools/OSF_search_preprints.py +59 -0
  354. tooluniverse/tools/OSL_get_efo_id_by_disease_name.py +46 -0
  355. tooluniverse/tools/OpenAIRE_search_publications.py +55 -0
  356. tooluniverse/tools/OpenAlex_Guidelines_Search.py +63 -0
  357. tooluniverse/tools/OpenTargets_drug_pharmacogenomics_data.py +52 -0
  358. tooluniverse/tools/OpenTargets_get_approved_indications_by_drug_chemblId.py +49 -0
  359. tooluniverse/tools/OpenTargets_get_associated_diseases_by_drug_chemblId.py +49 -0
  360. tooluniverse/tools/OpenTargets_get_associated_drugs_by_disease_efoId.py +52 -0
  361. tooluniverse/tools/OpenTargets_get_associated_drugs_by_target_ensemblID.py +55 -0
  362. tooluniverse/tools/OpenTargets_get_associated_phenotypes_by_disease_efoId.py +49 -0
  363. tooluniverse/tools/OpenTargets_get_associated_targets_by_disease_efoId.py +49 -0
  364. tooluniverse/tools/OpenTargets_get_associated_targets_by_drug_chemblId.py +49 -0
  365. tooluniverse/tools/OpenTargets_get_biological_mouse_models_by_ensemblID.py +49 -0
  366. tooluniverse/tools/OpenTargets_get_chemical_probes_by_target_ensemblID.py +49 -0
  367. tooluniverse/tools/OpenTargets_get_disease_ancestors_parents_by_efoId.py +49 -0
  368. tooluniverse/tools/OpenTargets_get_disease_descendants_children_by_efoId.py +49 -0
  369. tooluniverse/tools/OpenTargets_get_disease_description_by_efoId.py +49 -0
  370. tooluniverse/tools/OpenTargets_get_disease_id_description_by_name.py +49 -0
  371. tooluniverse/tools/OpenTargets_get_disease_ids_by_efoId.py +46 -0
  372. tooluniverse/tools/OpenTargets_get_disease_ids_by_name.py +46 -0
  373. tooluniverse/tools/OpenTargets_get_disease_locations_by_efoId.py +49 -0
  374. tooluniverse/tools/OpenTargets_get_disease_synonyms_by_efoId.py +49 -0
  375. tooluniverse/tools/OpenTargets_get_disease_therapeutic_areas_by_efoId.py +49 -0
  376. tooluniverse/tools/OpenTargets_get_diseases_phenotypes_by_target_ensembl.py +49 -0
  377. tooluniverse/tools/OpenTargets_get_drug_adverse_events_by_chemblId.py +52 -0
  378. tooluniverse/tools/OpenTargets_get_drug_approval_status_by_chemblId.py +49 -0
  379. tooluniverse/tools/OpenTargets_get_drug_chembId_by_generic_name.py +49 -0
  380. tooluniverse/tools/OpenTargets_get_drug_description_by_chemblId.py +49 -0
  381. tooluniverse/tools/OpenTargets_get_drug_id_description_by_name.py +49 -0
  382. tooluniverse/tools/OpenTargets_get_drug_indications_by_chemblId.py +49 -0
  383. tooluniverse/tools/OpenTargets_get_drug_mechanisms_of_action_by_chemblId.py +49 -0
  384. tooluniverse/tools/OpenTargets_get_drug_synonyms_by_chemblId.py +49 -0
  385. tooluniverse/tools/OpenTargets_get_drug_trade_names_by_chemblId.py +49 -0
  386. tooluniverse/tools/OpenTargets_get_drug_warnings_by_chemblId.py +49 -0
  387. tooluniverse/tools/OpenTargets_get_drug_withdrawn_blackbox_status_by_chemblId.py +49 -0
  388. tooluniverse/tools/OpenTargets_get_gene_ontology_terms_by_goID.py +49 -0
  389. tooluniverse/tools/OpenTargets_get_known_drugs_by_drug_chemblId.py +49 -0
  390. tooluniverse/tools/OpenTargets_get_parent_child_molecules_by_drug_chembl_ID.py +49 -0
  391. tooluniverse/tools/OpenTargets_get_publications_by_disease_efoId.py +71 -0
  392. tooluniverse/tools/OpenTargets_get_publications_by_drug_chemblId.py +71 -0
  393. tooluniverse/tools/OpenTargets_get_publications_by_target_ensemblID.py +71 -0
  394. tooluniverse/tools/OpenTargets_get_similar_entities_by_disease_efoId.py +55 -0
  395. tooluniverse/tools/OpenTargets_get_similar_entities_by_drug_chemblId.py +55 -0
  396. tooluniverse/tools/OpenTargets_get_similar_entities_by_target_ensemblID.py +55 -0
  397. tooluniverse/tools/OpenTargets_get_target_classes_by_ensemblID.py +49 -0
  398. tooluniverse/tools/OpenTargets_get_target_constraint_info_by_ensemblID.py +49 -0
  399. tooluniverse/tools/OpenTargets_get_target_enabling_packages_by_ensemblID.py +49 -0
  400. tooluniverse/tools/OpenTargets_get_target_gene_ontology_by_ensemblID.py +49 -0
  401. tooluniverse/tools/OpenTargets_get_target_genomic_location_by_ensemblID.py +49 -0
  402. tooluniverse/tools/OpenTargets_get_target_homologues_by_ensemblID.py +49 -0
  403. tooluniverse/tools/OpenTargets_get_target_id_description_by_name.py +49 -0
  404. tooluniverse/tools/OpenTargets_get_target_interactions_by_ensemblID.py +52 -0
  405. tooluniverse/tools/OpenTargets_get_target_safety_profile_by_ensemblID.py +49 -0
  406. tooluniverse/tools/OpenTargets_get_target_subcellular_locations_by_ensemblID.py +49 -0
  407. tooluniverse/tools/OpenTargets_get_target_synonyms_by_ensemblID.py +49 -0
  408. tooluniverse/tools/OpenTargets_get_target_tractability_by_ensemblID.py +49 -0
  409. tooluniverse/tools/OpenTargets_map_any_disease_id_to_all_other_ids.py +49 -0
  410. tooluniverse/tools/OpenTargets_multi_entity_search_by_query_string.py +59 -0
  411. tooluniverse/tools/OpenTargets_search_category_counts_by_query_string.py +49 -0
  412. tooluniverse/tools/OpenTargets_target_disease_evidence.py +52 -0
  413. tooluniverse/tools/OutputSummarizationComposer.py +71 -0
  414. tooluniverse/tools/PMC_search_papers.py +67 -0
  415. tooluniverse/tools/ProtocolOptimizer.py +49 -0
  416. tooluniverse/tools/PubChem_get_CID_by_SMILES.py +46 -0
  417. tooluniverse/tools/PubChem_get_CID_by_compound_name.py +46 -0
  418. tooluniverse/tools/PubChem_get_associated_patents_by_CID.py +46 -0
  419. tooluniverse/tools/PubChem_get_compound_2D_image_by_CID.py +52 -0
  420. tooluniverse/tools/PubChem_get_compound_properties_by_CID.py +46 -0
  421. tooluniverse/tools/PubChem_get_compound_synonyms_by_CID.py +46 -0
  422. tooluniverse/tools/PubChem_get_compound_xrefs_by_CID.py +52 -0
  423. tooluniverse/tools/PubChem_search_compounds_by_similarity.py +52 -0
  424. tooluniverse/tools/PubChem_search_compounds_by_substructure.py +49 -0
  425. tooluniverse/tools/PubMed_Guidelines_Search.py +55 -0
  426. tooluniverse/tools/PubMed_search_articles.py +55 -0
  427. tooluniverse/tools/PubTator3_EntityAutocomplete.py +59 -0
  428. tooluniverse/tools/PubTator3_LiteratureSearch.py +55 -0
  429. tooluniverse/tools/QuestionRephraser.py +52 -0
  430. tooluniverse/tools/Reactome_get_pathway_reactions.py +46 -0
  431. tooluniverse/tools/ReproducibilityTransparencyReviewer.py +49 -0
  432. tooluniverse/tools/ResultsInterpretationReviewer.py +55 -0
  433. tooluniverse/tools/ScientificTextSummarizer.py +59 -0
  434. tooluniverse/tools/SemanticScholar_search_papers.py +55 -0
  435. tooluniverse/tools/TRIP_Database_Guidelines_Search.py +55 -0
  436. tooluniverse/tools/TestCaseGenerator.py +46 -0
  437. tooluniverse/tools/ToolCompatibilityAnalyzer.py +59 -0
  438. tooluniverse/tools/ToolDescriptionOptimizer.py +67 -0
  439. tooluniverse/tools/ToolDiscover.py +63 -0
  440. tooluniverse/tools/ToolGraphComposer.py +71 -0
  441. tooluniverse/tools/ToolGraphGenerationPipeline.py +63 -0
  442. tooluniverse/tools/ToolImplementationGenerator.py +67 -0
  443. tooluniverse/tools/ToolMetadataGenerationPipeline.py +63 -0
  444. tooluniverse/tools/ToolMetadataGenerator.py +55 -0
  445. tooluniverse/tools/ToolMetadataStandardizer.py +52 -0
  446. tooluniverse/tools/ToolOptimizer.py +59 -0
  447. tooluniverse/tools/ToolOutputSummarizer.py +67 -0
  448. tooluniverse/tools/ToolQualityEvaluator.py +59 -0
  449. tooluniverse/tools/ToolRelationshipDetector.py +52 -0
  450. tooluniverse/tools/ToolSpecificationGenerator.py +67 -0
  451. tooluniverse/tools/ToolSpecificationOptimizer.py +63 -0
  452. tooluniverse/tools/Tool_Finder.py +67 -0
  453. tooluniverse/tools/Tool_Finder_Keyword.py +67 -0
  454. tooluniverse/tools/Tool_Finder_LLM.py +67 -0
  455. tooluniverse/tools/Tool_RAG.py +49 -0
  456. tooluniverse/tools/UniProt_get_alternative_names_by_accession.py +49 -0
  457. tooluniverse/tools/UniProt_get_disease_variants_by_accession.py +49 -0
  458. tooluniverse/tools/UniProt_get_entry_by_accession.py +49 -0
  459. tooluniverse/tools/UniProt_get_function_by_accession.py +49 -0
  460. tooluniverse/tools/UniProt_get_isoform_ids_by_accession.py +49 -0
  461. tooluniverse/tools/UniProt_get_organism_by_accession.py +49 -0
  462. tooluniverse/tools/UniProt_get_ptm_processing_by_accession.py +49 -0
  463. tooluniverse/tools/UniProt_get_recommended_name_by_accession.py +49 -0
  464. tooluniverse/tools/UniProt_get_sequence_by_accession.py +49 -0
  465. tooluniverse/tools/UniProt_get_subcellular_location_by_accession.py +49 -0
  466. tooluniverse/tools/Unpaywall_check_oa_status.py +52 -0
  467. tooluniverse/tools/WHO_Guideline_Full_Text.py +46 -0
  468. tooluniverse/tools/WHO_Guidelines_Search.py +52 -0
  469. tooluniverse/tools/Wikidata_SPARQL_query.py +52 -0
  470. tooluniverse/tools/WritingPresentationReviewer.py +49 -0
  471. tooluniverse/tools/Zenodo_search_records.py +59 -0
  472. tooluniverse/tools/__init__.py +1738 -0
  473. tooluniverse/tools/_shared_client.py +138 -0
  474. tooluniverse/tools/alphafold_get_annotations.py +52 -0
  475. tooluniverse/tools/alphafold_get_prediction.py +55 -0
  476. tooluniverse/tools/alphafold_get_summary.py +46 -0
  477. tooluniverse/tools/call_agentic_human.py +46 -0
  478. tooluniverse/tools/cancer_biomarkers_disease_target_score.py +52 -0
  479. tooluniverse/tools/cancer_gene_census_disease_target_score.py +52 -0
  480. tooluniverse/tools/cellosaurus_get_cell_line_info.py +55 -0
  481. tooluniverse/tools/cellosaurus_query_converter.py +52 -0
  482. tooluniverse/tools/cellosaurus_search_cell_lines.py +55 -0
  483. tooluniverse/tools/chembl_disease_target_score.py +52 -0
  484. tooluniverse/tools/dict_search.py +67 -0
  485. tooluniverse/tools/dili_search.py +67 -0
  486. tooluniverse/tools/diqt_search.py +67 -0
  487. tooluniverse/tools/disease_target_score.py +59 -0
  488. tooluniverse/tools/drugbank_filter_drugs_by_name.py +55 -0
  489. tooluniverse/tools/drugbank_full_search.py +67 -0
  490. tooluniverse/tools/drugbank_get_drug_basic_info_by_drug_name_or_drugbank_id.py +63 -0
  491. tooluniverse/tools/drugbank_get_drug_chemistry_by_drug_name_or_drugbank_id.py +63 -0
  492. tooluniverse/tools/drugbank_get_drug_interactions_by_drug_name_or_drugbank_id.py +63 -0
  493. tooluniverse/tools/drugbank_get_drug_name_and_description_by_indication.py +63 -0
  494. tooluniverse/tools/drugbank_get_drug_name_and_description_by_pathway_name.py +63 -0
  495. tooluniverse/tools/drugbank_get_drug_name_and_description_by_target_name.py +63 -0
  496. tooluniverse/tools/drugbank_get_drug_name_description_pharmacology_by_mechanism_of_action.py +63 -0
  497. tooluniverse/tools/drugbank_get_drug_pathways_and_reactions_by_drug_name_or_drugbank_id.py +63 -0
  498. tooluniverse/tools/drugbank_get_drug_products_by_name_or_drugbank_id.py +63 -0
  499. tooluniverse/tools/drugbank_get_drug_references_by_drug_name_or_drugbank_id.py +63 -0
  500. tooluniverse/tools/drugbank_get_indications_by_drug_name_or_drugbank_id.py +63 -0
  501. tooluniverse/tools/drugbank_get_pharmacology_by_drug_name_or_drugbank_id.py +63 -0
  502. tooluniverse/tools/drugbank_get_safety_by_drug_name_or_drugbank_id.py +63 -0
  503. tooluniverse/tools/drugbank_get_targets_by_drug_name_or_drugbank_id.py +63 -0
  504. tooluniverse/tools/drugbank_links_search.py +67 -0
  505. tooluniverse/tools/drugbank_vocab_filter.py +63 -0
  506. tooluniverse/tools/drugbank_vocab_search.py +67 -0
  507. tooluniverse/tools/embedding_database_add.py +63 -0
  508. tooluniverse/tools/embedding_database_create.py +71 -0
  509. tooluniverse/tools/embedding_database_load.py +63 -0
  510. tooluniverse/tools/embedding_database_search.py +67 -0
  511. tooluniverse/tools/embedding_sync_download.py +63 -0
  512. tooluniverse/tools/embedding_sync_upload.py +71 -0
  513. tooluniverse/tools/enrichr_gene_enrichment_analysis.py +52 -0
  514. tooluniverse/tools/europepmc_disease_target_score.py +52 -0
  515. tooluniverse/tools/eva_disease_target_score.py +52 -0
  516. tooluniverse/tools/eva_somatic_disease_target_score.py +52 -0
  517. tooluniverse/tools/expression_atlas_disease_target_score.py +52 -0
  518. tooluniverse/tools/extract_clinical_trial_adverse_events.py +59 -0
  519. tooluniverse/tools/extract_clinical_trial_outcomes.py +52 -0
  520. tooluniverse/tools/genomics_england_disease_target_score.py +52 -0
  521. tooluniverse/tools/get_HPO_ID_by_phenotype.py +55 -0
  522. tooluniverse/tools/get_albumentations_info.py +44 -0
  523. tooluniverse/tools/get_altair_info.py +44 -0
  524. tooluniverse/tools/get_anndata_info.py +49 -0
  525. tooluniverse/tools/get_arboreto_info.py +46 -0
  526. tooluniverse/tools/get_arxiv_info.py +46 -0
  527. tooluniverse/tools/get_ase_info.py +46 -0
  528. tooluniverse/tools/get_assembly_info_by_pdb_id.py +46 -0
  529. tooluniverse/tools/get_assembly_summary.py +46 -0
  530. tooluniverse/tools/get_astropy_info.py +44 -0
  531. tooluniverse/tools/get_binding_affinity_by_pdb_id.py +46 -0
  532. tooluniverse/tools/get_biopandas_info.py +49 -0
  533. tooluniverse/tools/get_biopython_info.py +49 -0
  534. tooluniverse/tools/get_bioservices_info.py +44 -0
  535. tooluniverse/tools/get_biotite_info.py +49 -0
  536. tooluniverse/tools/get_bokeh_info.py +44 -0
  537. tooluniverse/tools/get_brian2_info.py +44 -0
  538. tooluniverse/tools/get_cartopy_info.py +44 -0
  539. tooluniverse/tools/get_catboost_info.py +44 -0
  540. tooluniverse/tools/get_cellpose_info.py +49 -0
  541. tooluniverse/tools/get_cellrank_info.py +44 -0
  542. tooluniverse/tools/get_cellxgene_census_info.py +46 -0
  543. tooluniverse/tools/get_cftime_info.py +44 -0
  544. tooluniverse/tools/get_chem_comp_audit_info.py +46 -0
  545. tooluniverse/tools/get_chem_comp_charge_and_ambiguity.py +46 -0
  546. tooluniverse/tools/get_chembl_webresource_client_info.py +44 -0
  547. tooluniverse/tools/get_citation_info_by_pdb_id.py +46 -0
  548. tooluniverse/tools/get_clair3_info.py +46 -0
  549. tooluniverse/tools/get_clinical_trial_conditions_and_interventions.py +55 -0
  550. tooluniverse/tools/get_clinical_trial_descriptions.py +52 -0
  551. tooluniverse/tools/get_clinical_trial_eligibility_criteria.py +55 -0
  552. tooluniverse/tools/get_clinical_trial_locations.py +52 -0
  553. tooluniverse/tools/get_clinical_trial_outcome_measures.py +52 -0
  554. tooluniverse/tools/get_clinical_trial_references.py +52 -0
  555. tooluniverse/tools/get_clinical_trial_status_and_dates.py +52 -0
  556. tooluniverse/tools/get_cobra_info.py +46 -0
  557. tooluniverse/tools/get_cobrapy_info.py +46 -0
  558. tooluniverse/tools/get_cooler_info.py +49 -0
  559. tooluniverse/tools/get_core_refinement_statistics.py +46 -0
  560. tooluniverse/tools/get_cryosparc_tools_info.py +46 -0
  561. tooluniverse/tools/get_crystal_growth_conditions_by_pdb_id.py +49 -0
  562. tooluniverse/tools/get_crystallization_ph_by_pdb_id.py +46 -0
  563. tooluniverse/tools/get_crystallographic_properties_by_pdb_id.py +49 -0
  564. tooluniverse/tools/get_cupy_info.py +44 -0
  565. tooluniverse/tools/get_cyvcf2_info.py +49 -0
  566. tooluniverse/tools/get_dask_info.py +44 -0
  567. tooluniverse/tools/get_datamol_info.py +44 -0
  568. tooluniverse/tools/get_datashader_info.py +44 -0
  569. tooluniverse/tools/get_deepchem_info.py +49 -0
  570. tooluniverse/tools/get_deeppurpose_info.py +46 -0
  571. tooluniverse/tools/get_deeptools_info.py +46 -0
  572. tooluniverse/tools/get_deepxde_info.py +49 -0
  573. tooluniverse/tools/get_dendropy_info.py +44 -0
  574. tooluniverse/tools/get_descriptastorus_info.py +46 -0
  575. tooluniverse/tools/get_diffdock_info.py +46 -0
  576. tooluniverse/tools/get_dscribe_info.py +49 -0
  577. tooluniverse/tools/get_ec_number_by_entity_id.py +46 -0
  578. tooluniverse/tools/get_elephant_info.py +44 -0
  579. tooluniverse/tools/get_em_3d_fitting_and_reconstruction_details.py +49 -0
  580. tooluniverse/tools/get_emdb_ids_by_pdb_id.py +46 -0
  581. tooluniverse/tools/get_episcanpy_info.py +44 -0
  582. tooluniverse/tools/get_ete3_info.py +44 -0
  583. tooluniverse/tools/get_faiss_info.py +46 -0
  584. tooluniverse/tools/get_fanc_info.py +46 -0
  585. tooluniverse/tools/get_flask_info.py +46 -0
  586. tooluniverse/tools/get_flowio_info.py +46 -0
  587. tooluniverse/tools/get_flowkit_info.py +46 -0
  588. tooluniverse/tools/get_flowutils_info.py +46 -0
  589. tooluniverse/tools/get_freesasa_info.py +44 -0
  590. tooluniverse/tools/get_galpy_info.py +44 -0
  591. tooluniverse/tools/get_gene_name_by_entity_id.py +46 -0
  592. tooluniverse/tools/get_geopandas_info.py +44 -0
  593. tooluniverse/tools/get_gget_info.py +46 -0
  594. tooluniverse/tools/get_googlesearch_python_info.py +46 -0
  595. tooluniverse/tools/get_gseapy_info.py +49 -0
  596. tooluniverse/tools/get_h5py_info.py +46 -0
  597. tooluniverse/tools/get_harmony_pytorch_info.py +46 -0
  598. tooluniverse/tools/get_hmmlearn_info.py +46 -0
  599. tooluniverse/tools/get_holoviews_info.py +44 -0
  600. tooluniverse/tools/get_host_organism_by_pdb_id.py +46 -0
  601. tooluniverse/tools/get_htmd_info.py +44 -0
  602. tooluniverse/tools/get_hyperopt_info.py +49 -0
  603. tooluniverse/tools/get_igraph_info.py +49 -0
  604. tooluniverse/tools/get_imageio_info.py +44 -0
  605. tooluniverse/tools/get_imbalanced_learn_info.py +44 -0
  606. tooluniverse/tools/get_jcvi_info.py +46 -0
  607. tooluniverse/tools/get_joblib_info.py +44 -0
  608. tooluniverse/tools/get_joint_associated_diseases_by_HPO_ID_list.py +55 -0
  609. tooluniverse/tools/get_khmer_info.py +46 -0
  610. tooluniverse/tools/get_kipoiseq_info.py +44 -0
  611. tooluniverse/tools/get_lifelines_info.py +49 -0
  612. tooluniverse/tools/get_ligand_bond_count_by_pdb_id.py +46 -0
  613. tooluniverse/tools/get_ligand_smiles_by_chem_comp_id.py +49 -0
  614. tooluniverse/tools/get_lightgbm_info.py +44 -0
  615. tooluniverse/tools/get_loompy_info.py +46 -0
  616. tooluniverse/tools/get_mageck_info.py +46 -0
  617. tooluniverse/tools/get_matplotlib_info.py +49 -0
  618. tooluniverse/tools/get_mdanalysis_info.py +46 -0
  619. tooluniverse/tools/get_mdtraj_info.py +44 -0
  620. tooluniverse/tools/get_mne_info.py +44 -0
  621. tooluniverse/tools/get_molfeat_info.py +44 -0
  622. tooluniverse/tools/get_molvs_info.py +44 -0
  623. tooluniverse/tools/get_mordred_info.py +44 -0
  624. tooluniverse/tools/get_msprime_info.py +49 -0
  625. tooluniverse/tools/get_mudata_info.py +49 -0
  626. tooluniverse/tools/get_mutation_annotations_by_pdb_id.py +46 -0
  627. tooluniverse/tools/get_neo_info.py +44 -0
  628. tooluniverse/tools/get_netcdf4_info.py +44 -0
  629. tooluniverse/tools/get_networkx_info.py +46 -0
  630. tooluniverse/tools/get_nglview_info.py +44 -0
  631. tooluniverse/tools/get_nilearn_info.py +44 -0
  632. tooluniverse/tools/get_numba_info.py +46 -0
  633. tooluniverse/tools/get_numpy_info.py +46 -0
  634. tooluniverse/tools/get_oligosaccharide_descriptors_by_entity_id.py +49 -0
  635. tooluniverse/tools/get_openbabel_info.py +49 -0
  636. tooluniverse/tools/get_openchem_info.py +46 -0
  637. tooluniverse/tools/get_opencv_info.py +49 -0
  638. tooluniverse/tools/get_openmm_info.py +49 -0
  639. tooluniverse/tools/get_optlang_info.py +46 -0
  640. tooluniverse/tools/get_optuna_info.py +44 -0
  641. tooluniverse/tools/get_palantir_info.py +44 -0
  642. tooluniverse/tools/get_pandas_info.py +49 -0
  643. tooluniverse/tools/get_patsy_info.py +44 -0
  644. tooluniverse/tools/get_pdbfixer_info.py +46 -0
  645. tooluniverse/tools/get_phenotype_by_HPO_ID.py +46 -0
  646. tooluniverse/tools/get_pillow_info.py +44 -0
  647. tooluniverse/tools/get_plantcv_info.py +46 -0
  648. tooluniverse/tools/get_plip_info.py +46 -0
  649. tooluniverse/tools/get_plotly_info.py +44 -0
  650. tooluniverse/tools/get_poliastro_info.py +46 -0
  651. tooluniverse/tools/get_polymer_entity_annotations.py +49 -0
  652. tooluniverse/tools/get_polymer_entity_count_by_pdb_id.py +46 -0
  653. tooluniverse/tools/get_polymer_entity_ids_by_pdb_id.py +46 -0
  654. tooluniverse/tools/get_polymer_entity_type_by_entity_id.py +49 -0
  655. tooluniverse/tools/get_polymer_molecular_weight_by_entity_id.py +49 -0
  656. tooluniverse/tools/get_poretools_info.py +44 -0
  657. tooluniverse/tools/get_prody_info.py +46 -0
  658. tooluniverse/tools/get_protein_classification_by_pdb_id.py +49 -0
  659. tooluniverse/tools/get_protein_metadata_by_pdb_id.py +46 -0
  660. tooluniverse/tools/get_pubchempy_info.py +44 -0
  661. tooluniverse/tools/get_pybedtools_info.py +49 -0
  662. tooluniverse/tools/get_pybigwig_info.py +46 -0
  663. tooluniverse/tools/get_pydeseq2_info.py +46 -0
  664. tooluniverse/tools/get_pyensembl_info.py +44 -0
  665. tooluniverse/tools/get_pyephem_info.py +44 -0
  666. tooluniverse/tools/get_pyfaidx_info.py +49 -0
  667. tooluniverse/tools/get_pyfasta_info.py +44 -0
  668. tooluniverse/tools/get_pykalman_info.py +46 -0
  669. tooluniverse/tools/get_pyliftover_info.py +49 -0
  670. tooluniverse/tools/get_pymassspec_info.py +46 -0
  671. tooluniverse/tools/get_pymed_info.py +46 -0
  672. tooluniverse/tools/get_pymzml_info.py +46 -0
  673. tooluniverse/tools/get_pypdf2_info.py +46 -0
  674. tooluniverse/tools/get_pyranges_info.py +49 -0
  675. tooluniverse/tools/get_pyrosetta_info.py +44 -0
  676. tooluniverse/tools/get_pysam_info.py +46 -0
  677. tooluniverse/tools/get_pyscenic_info.py +46 -0
  678. tooluniverse/tools/get_pyscf_info.py +46 -0
  679. tooluniverse/tools/get_pyscreener_info.py +46 -0
  680. tooluniverse/tools/get_pytdc_info.py +46 -0
  681. tooluniverse/tools/get_python_libsbml_info.py +46 -0
  682. tooluniverse/tools/get_pytorch_info.py +49 -0
  683. tooluniverse/tools/get_pyvcf_info.py +44 -0
  684. tooluniverse/tools/get_pyvis_info.py +44 -0
  685. tooluniverse/tools/get_qutip_info.py +44 -0
  686. tooluniverse/tools/get_rasterio_info.py +44 -0
  687. tooluniverse/tools/get_rdkit_info.py +46 -0
  688. tooluniverse/tools/get_refinement_resolution_by_pdb_id.py +49 -0
  689. tooluniverse/tools/get_release_deposit_dates_by_pdb_id.py +49 -0
  690. tooluniverse/tools/get_reportlab_info.py +49 -0
  691. tooluniverse/tools/get_requests_info.py +49 -0
  692. tooluniverse/tools/get_ruptures_info.py +46 -0
  693. tooluniverse/tools/get_scanorama_info.py +44 -0
  694. tooluniverse/tools/get_scanpy_info.py +49 -0
  695. tooluniverse/tools/get_schnetpack_info.py +49 -0
  696. tooluniverse/tools/get_scholarly_info.py +46 -0
  697. tooluniverse/tools/get_scikit_bio_info.py +49 -0
  698. tooluniverse/tools/get_scikit_image_info.py +46 -0
  699. tooluniverse/tools/get_scikit_learn_info.py +49 -0
  700. tooluniverse/tools/get_scipy_info.py +46 -0
  701. tooluniverse/tools/get_scrublet_info.py +49 -0
  702. tooluniverse/tools/get_scvelo_info.py +49 -0
  703. tooluniverse/tools/get_scvi_tools_info.py +44 -0
  704. tooluniverse/tools/get_seaborn_info.py +49 -0
  705. tooluniverse/tools/get_sequence_by_pdb_id.py +46 -0
  706. tooluniverse/tools/get_sequence_lengths_by_pdb_id.py +46 -0
  707. tooluniverse/tools/get_sequence_positional_features_by_instance_id.py +49 -0
  708. tooluniverse/tools/get_skopt_info.py +44 -0
  709. tooluniverse/tools/get_souporcell_info.py +46 -0
  710. tooluniverse/tools/get_source_organism_by_pdb_id.py +46 -0
  711. tooluniverse/tools/get_space_group_by_pdb_id.py +46 -0
  712. tooluniverse/tools/get_statsmodels_info.py +49 -0
  713. tooluniverse/tools/get_structure_determination_software_by_pdb_id.py +49 -0
  714. tooluniverse/tools/get_structure_title_by_pdb_id.py +46 -0
  715. tooluniverse/tools/get_structure_validation_metrics_by_pdb_id.py +49 -0
  716. tooluniverse/tools/get_sunpy_info.py +44 -0
  717. tooluniverse/tools/get_sympy_info.py +46 -0
  718. tooluniverse/tools/get_target_cofactor_info.py +46 -0
  719. tooluniverse/tools/get_taxonomy_by_pdb_id.py +46 -0
  720. tooluniverse/tools/get_tiledb_info.py +46 -0
  721. tooluniverse/tools/get_tiledbsoma_info.py +46 -0
  722. tooluniverse/tools/get_torch_geometric_info.py +49 -0
  723. tooluniverse/tools/get_tqdm_info.py +46 -0
  724. tooluniverse/tools/get_trackpy_info.py +46 -0
  725. tooluniverse/tools/get_tskit_info.py +46 -0
  726. tooluniverse/tools/get_umap_learn_info.py +49 -0
  727. tooluniverse/tools/get_uniprot_accession_by_entity_id.py +49 -0
  728. tooluniverse/tools/get_velocyto_info.py +44 -0
  729. tooluniverse/tools/get_viennarna_info.py +49 -0
  730. tooluniverse/tools/get_webpage_text_from_url.py +52 -0
  731. tooluniverse/tools/get_webpage_title.py +49 -0
  732. tooluniverse/tools/get_xarray_info.py +44 -0
  733. tooluniverse/tools/get_xesmf_info.py +44 -0
  734. tooluniverse/tools/get_xgboost_info.py +44 -0
  735. tooluniverse/tools/get_zarr_info.py +44 -0
  736. tooluniverse/tools/gwas_get_association_by_id.py +49 -0
  737. tooluniverse/tools/gwas_get_associations_for_snp.py +67 -0
  738. tooluniverse/tools/gwas_get_associations_for_study.py +55 -0
  739. tooluniverse/tools/gwas_get_associations_for_trait.py +55 -0
  740. tooluniverse/tools/gwas_get_snp_by_id.py +46 -0
  741. tooluniverse/tools/gwas_get_snps_for_gene.py +55 -0
  742. tooluniverse/tools/gwas_get_studies_for_trait.py +75 -0
  743. tooluniverse/tools/gwas_get_study_by_id.py +46 -0
  744. tooluniverse/tools/gwas_get_variants_for_trait.py +55 -0
  745. tooluniverse/tools/gwas_search_associations.py +75 -0
  746. tooluniverse/tools/gwas_search_snps.py +63 -0
  747. tooluniverse/tools/gwas_search_studies.py +75 -0
  748. tooluniverse/tools/humanbase_ppi_analysis.py +67 -0
  749. tooluniverse/tools/mesh_get_subjects_by_pharmacological_action.py +63 -0
  750. tooluniverse/tools/mesh_get_subjects_by_subject_id.py +63 -0
  751. tooluniverse/tools/mesh_get_subjects_by_subject_name.py +63 -0
  752. tooluniverse/tools/mesh_get_subjects_by_subject_scope_or_definition.py +63 -0
  753. tooluniverse/tools/odphp_itemlist.py +49 -0
  754. tooluniverse/tools/odphp_myhealthfinder.py +67 -0
  755. tooluniverse/tools/odphp_outlink_fetch.py +59 -0
  756. tooluniverse/tools/odphp_topicsearch.py +67 -0
  757. tooluniverse/tools/openalex_literature_search.py +67 -0
  758. tooluniverse/tools/reactome_disease_target_score.py +52 -0
  759. tooluniverse/tools/search_clinical_trials.py +67 -0
  760. tooluniverse/tools/visualize_molecule_2d.py +83 -0
  761. tooluniverse/tools/visualize_molecule_3d.py +91 -0
  762. tooluniverse/tools/visualize_protein_structure_3d.py +79 -0
  763. tooluniverse/unified_guideline_tools.py +1210 -0
  764. tooluniverse/unpaywall_tool.py +62 -0
  765. tooluniverse/utils.py +71 -2
  766. tooluniverse/visualization_tool.py +897 -0
  767. tooluniverse/wikidata_sparql_tool.py +60 -0
  768. tooluniverse/zenodo_tool.py +72 -0
  769. {tooluniverse-1.0.5.dist-info → tooluniverse-1.0.7.dist-info}/METADATA +12 -2
  770. tooluniverse-1.0.7.dist-info/RECORD +855 -0
  771. {tooluniverse-1.0.5.dist-info → tooluniverse-1.0.7.dist-info}/entry_points.txt +4 -0
  772. tooluniverse/test/list_azure_openai_models.py +0 -210
  773. tooluniverse/test/mcp_server_test.py +0 -0
  774. tooluniverse/test/test_admetai_tool.py +0 -370
  775. tooluniverse/test/test_agentic_tool.py +0 -129
  776. tooluniverse/test/test_agentic_tool_azure_models.py +0 -91
  777. tooluniverse/test/test_alphafold_tool.py +0 -108
  778. tooluniverse/test/test_api_key_validation_min.py +0 -64
  779. tooluniverse/test/test_chem_tool.py +0 -37
  780. tooluniverse/test/test_claude_sdk.py +0 -86
  781. tooluniverse/test/test_compose_lieraturereview.py +0 -63
  782. tooluniverse/test/test_compose_tool.py +0 -448
  783. tooluniverse/test/test_dailymed.py +0 -69
  784. tooluniverse/test/test_dataset_tool.py +0 -200
  785. tooluniverse/test/test_disease_target_score.py +0 -56
  786. tooluniverse/test/test_drugbank_filter_examples.py +0 -179
  787. tooluniverse/test/test_efo.py +0 -31
  788. tooluniverse/test/test_enrichr_tool.py +0 -21
  789. tooluniverse/test/test_europe_pmc_tool.py +0 -20
  790. tooluniverse/test/test_fda_adv.py +0 -95
  791. tooluniverse/test/test_fda_drug_labeling.py +0 -91
  792. tooluniverse/test/test_gene_ontology_tools.py +0 -66
  793. tooluniverse/test/test_global_fallback.py +0 -288
  794. tooluniverse/test/test_gwas_tool.py +0 -139
  795. tooluniverse/test/test_hooks_direct.py +0 -219
  796. tooluniverse/test/test_hpa.py +0 -625
  797. tooluniverse/test/test_humanbase_tool.py +0 -20
  798. tooluniverse/test/test_idmap_tools.py +0 -61
  799. tooluniverse/test/test_list_built_in_tools.py +0 -33
  800. tooluniverse/test/test_mcp_server.py +0 -211
  801. tooluniverse/test/test_mcp_tool.py +0 -247
  802. tooluniverse/test/test_medlineplus.py +0 -220
  803. tooluniverse/test/test_odphp_tool.py +0 -166
  804. tooluniverse/test/test_openalex_tool.py +0 -32
  805. tooluniverse/test/test_openrouter_client.py +0 -288
  806. tooluniverse/test/test_opentargets.py +0 -28
  807. tooluniverse/test/test_pubchem_tool.py +0 -116
  808. tooluniverse/test/test_pubtator_tool.py +0 -37
  809. tooluniverse/test/test_rcsb_pdb_tool.py +0 -86
  810. tooluniverse/test/test_reactome.py +0 -54
  811. tooluniverse/test/test_semantic_scholar_tool.py +0 -24
  812. tooluniverse/test/test_software_tools.py +0 -147
  813. tooluniverse/test/test_stdio_hooks.py +0 -285
  814. tooluniverse/test/test_tool_description_optimizer.py +0 -49
  815. tooluniverse/test/test_tool_finder.py +0 -26
  816. tooluniverse/test/test_tool_finder_llm.py +0 -252
  817. tooluniverse/test/test_tools_find.py +0 -195
  818. tooluniverse/test/test_uniprot_tools.py +0 -74
  819. tooluniverse/test/test_uspto_tool.py +0 -72
  820. tooluniverse/test/test_xml_tool.py +0 -113
  821. tooluniverse-1.0.5.dist-info/RECORD +0 -198
  822. {tooluniverse-1.0.5.dist-info → tooluniverse-1.0.7.dist-info}/WHEEL +0 -0
  823. {tooluniverse-1.0.5.dist-info → tooluniverse-1.0.7.dist-info}/licenses/LICENSE +0 -0
  824. {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
  ]
@@ -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(self, api_type: str, model_id: str) -> bool:
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(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
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 = self._llm_client.infer(
304
- messages=messages,
305
- temperature=self._temperature,
306
- max_tokens=None, # client resolves per-model defaults/env
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
- except Exception as e:
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
- return "error: " + str(e) + " error_type: " + type(e).__name__
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
- required_params = []
148
- parameters = self.tool_config.get("parameter", {}).get("properties", {})
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
- # Check each parameter to see if it is required
151
- for param, details in parameters.items():
152
- if details.get("required", False):
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
- return required_params
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
+ }