tooluniverse 1.0.6__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 (823) hide show
  1. tooluniverse/__init__.py +31 -0
  2. tooluniverse/agentic_tool.py +40 -4
  3. tooluniverse/arxiv_tool.py +2 -6
  4. tooluniverse/base_tool.py +174 -25
  5. tooluniverse/biorxiv_tool.py +35 -16
  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 +46 -44
  13. tooluniverse/crossref_tool.py +89 -4
  14. tooluniverse/data/agentic_tools.json +1271 -1179
  15. tooluniverse/data/alphafold_tools.json +356 -105
  16. tooluniverse/data/arxiv_tools.json +88 -81
  17. tooluniverse/data/biorxiv_tools.json +69 -64
  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 +107 -99
  23. tooluniverse/data/crossref_tools.json +131 -63
  24. tooluniverse/data/dailymed_tools.json +17 -3
  25. tooluniverse/data/dataset_tools.json +1031 -588
  26. tooluniverse/data/dblp_tools.json +135 -64
  27. tooluniverse/data/disease_target_score_tools.json +20 -10
  28. tooluniverse/data/doaj_tools.json +133 -87
  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 +71 -66
  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 +69 -64
  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 +69 -64
  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 +89 -79
  51. tooluniverse/data/openalex_tools.json +100 -31
  52. tooluniverse/data/opentarget_tools.json +1457 -1372
  53. tooluniverse/data/osf_preprints_tools.json +77 -73
  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 +111 -103
  63. tooluniverse/data/protein_structure_3d_tools.json +138 -0
  64. tooluniverse/data/pubchem_tools.json +37 -12
  65. tooluniverse/data/pubmed_tools.json +126 -58
  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/url_fetch_tools.json +102 -82
  73. tooluniverse/data/uspto_tools.json +49 -30
  74. tooluniverse/data/wikidata_sparql_tools.json +42 -39
  75. tooluniverse/data/xml_tools.json +3274 -3113
  76. tooluniverse/data/zenodo_tools.json +84 -76
  77. tooluniverse/dblp_tool.py +76 -6
  78. tooluniverse/default_config.py +13 -0
  79. tooluniverse/doaj_tool.py +76 -17
  80. tooluniverse/doctor.py +48 -0
  81. tooluniverse/europe_pmc_tool.py +132 -17
  82. tooluniverse/exceptions.py +170 -0
  83. tooluniverse/execute_function.py +784 -362
  84. tooluniverse/fatcat_tool.py +0 -1
  85. tooluniverse/generate_tools.py +198 -0
  86. tooluniverse/hal_tool.py +1 -1
  87. tooluniverse/llm_clients.py +101 -124
  88. tooluniverse/mcp_tool_registry.py +4 -1
  89. tooluniverse/medrxiv_tool.py +32 -13
  90. tooluniverse/memory_manager.py +166 -0
  91. tooluniverse/molecule_2d_tool.py +274 -0
  92. tooluniverse/molecule_3d_tool.py +441 -0
  93. tooluniverse/odphp_tool.py +49 -14
  94. tooluniverse/openaire_tool.py +5 -20
  95. tooluniverse/openalex_tool.py +34 -0
  96. tooluniverse/osf_preprints_tool.py +1 -1
  97. tooluniverse/pmc_tool.py +54 -56
  98. tooluniverse/protein_structure_3d_tool.py +295 -0
  99. tooluniverse/pubmed_tool.py +69 -6
  100. tooluniverse/remote/boltz/boltz_mcp_server.py +3 -1
  101. tooluniverse/remote/uspto_downloader/uspto_downloader_mcp_server.py +3 -1
  102. tooluniverse/semantic_scholar_tool.py +40 -10
  103. tooluniverse/smcp.py +140 -205
  104. tooluniverse/smcp_server.py +97 -55
  105. tooluniverse/tool_registry.py +35 -3
  106. tooluniverse/tools/ADMETAI_predict_BBB_penetrance.py +46 -0
  107. tooluniverse/tools/ADMETAI_predict_CYP_interactions.py +46 -0
  108. tooluniverse/tools/ADMETAI_predict_bioavailability.py +46 -0
  109. tooluniverse/tools/ADMETAI_predict_clearance_distribution.py +49 -0
  110. tooluniverse/tools/ADMETAI_predict_nuclear_receptor_activity.py +49 -0
  111. tooluniverse/tools/ADMETAI_predict_physicochemical_properties.py +49 -0
  112. tooluniverse/tools/ADMETAI_predict_solubility_lipophilicity_hydration.py +49 -0
  113. tooluniverse/tools/ADMETAI_predict_stress_response.py +46 -0
  114. tooluniverse/tools/ADMETAI_predict_toxicity.py +46 -0
  115. tooluniverse/tools/AdvancedCodeQualityAnalyzer.py +63 -0
  116. tooluniverse/tools/AdverseEventICDMapper.py +46 -0
  117. tooluniverse/tools/AdverseEventPredictionQuestionGenerator.py +52 -0
  118. tooluniverse/tools/AdverseEventPredictionQuestionGeneratorWithContext.py +59 -0
  119. tooluniverse/tools/ArXiv_search_papers.py +63 -0
  120. tooluniverse/tools/ArgumentDescriptionOptimizer.py +55 -0
  121. tooluniverse/tools/BioRxiv_search_preprints.py +52 -0
  122. tooluniverse/tools/BiomarkerDiscoveryWorkflow.py +55 -0
  123. tooluniverse/tools/CORE_search_papers.py +67 -0
  124. tooluniverse/tools/CallAgent.py +46 -0
  125. tooluniverse/tools/ChEMBL_search_similar_molecules.py +59 -0
  126. tooluniverse/tools/CodeOptimizer.py +55 -0
  127. tooluniverse/tools/CodeQualityAnalyzer.py +71 -0
  128. tooluniverse/tools/ComprehensiveDrugDiscoveryPipeline.py +49 -0
  129. tooluniverse/tools/Crossref_search_works.py +55 -0
  130. tooluniverse/tools/DBLP_search_publications.py +52 -0
  131. tooluniverse/tools/DOAJ_search_articles.py +55 -0
  132. tooluniverse/tools/DailyMed_get_spl_by_setid.py +52 -0
  133. tooluniverse/tools/DailyMed_search_spls.py +79 -0
  134. tooluniverse/tools/DataAnalysisValidityReviewer.py +49 -0
  135. tooluniverse/tools/DescriptionAnalyzer.py +55 -0
  136. tooluniverse/tools/DescriptionQualityEvaluator.py +59 -0
  137. tooluniverse/tools/DomainExpertValidator.py +63 -0
  138. tooluniverse/tools/DrugSafetyAnalyzer.py +59 -0
  139. tooluniverse/tools/EthicalComplianceReviewer.py +49 -0
  140. tooluniverse/tools/EuropePMC_Guidelines_Search.py +52 -0
  141. tooluniverse/tools/EuropePMC_search_articles.py +52 -0
  142. tooluniverse/tools/ExperimentalDesignScorer.py +55 -0
  143. tooluniverse/tools/FAERS_count_additive_administration_routes.py +52 -0
  144. tooluniverse/tools/FAERS_count_additive_adverse_reactions.py +71 -0
  145. tooluniverse/tools/FAERS_count_additive_event_reports_by_country.py +63 -0
  146. tooluniverse/tools/FAERS_count_additive_reaction_outcomes.py +63 -0
  147. tooluniverse/tools/FAERS_count_additive_reports_by_reporter_country.py +63 -0
  148. tooluniverse/tools/FAERS_count_additive_seriousness_classification.py +63 -0
  149. tooluniverse/tools/FAERS_count_country_by_drug_event.py +63 -0
  150. tooluniverse/tools/FAERS_count_death_related_by_drug.py +49 -0
  151. tooluniverse/tools/FAERS_count_drug_routes_by_event.py +52 -0
  152. tooluniverse/tools/FAERS_count_drugs_by_drug_event.py +63 -0
  153. tooluniverse/tools/FAERS_count_outcomes_by_drug_event.py +63 -0
  154. tooluniverse/tools/FAERS_count_patient_age_distribution.py +49 -0
  155. tooluniverse/tools/FAERS_count_reactions_by_drug_event.py +71 -0
  156. tooluniverse/tools/FAERS_count_reportercountry_by_drug_event.py +63 -0
  157. tooluniverse/tools/FAERS_count_seriousness_by_drug_event.py +63 -0
  158. tooluniverse/tools/FDA_get_abuse_dependence_info_by_drug_name.py +55 -0
  159. tooluniverse/tools/FDA_get_abuse_info_by_drug_name.py +55 -0
  160. tooluniverse/tools/FDA_get_accessories_info_by_drug_name.py +55 -0
  161. tooluniverse/tools/FDA_get_active_ingredient_info_by_drug_name.py +55 -0
  162. tooluniverse/tools/FDA_get_adverse_reactions_by_drug_name.py +55 -0
  163. tooluniverse/tools/FDA_get_alarms_by_drug_name.py +55 -0
  164. tooluniverse/tools/FDA_get_animal_pharmacology_info_by_drug_name.py +55 -0
  165. tooluniverse/tools/FDA_get_assembly_installation_info_by_drug_name.py +55 -0
  166. tooluniverse/tools/FDA_get_boxed_warning_info_by_drug_name.py +55 -0
  167. tooluniverse/tools/FDA_get_brand_name_generic_name.py +52 -0
  168. tooluniverse/tools/FDA_get_calibration_instructions_by_drug_name.py +55 -0
  169. tooluniverse/tools/FDA_get_carcinogenic_mutagenic_fertility_by_drug_name.py +55 -0
  170. tooluniverse/tools/FDA_get_child_safety_info_by_drug_name.py +55 -0
  171. tooluniverse/tools/FDA_get_clinical_pharmacology_by_drug_name.py +55 -0
  172. tooluniverse/tools/FDA_get_clinical_studies_info_by_drug_name.py +55 -0
  173. tooluniverse/tools/FDA_get_contact_for_questions_info_by_drug_name.py +55 -0
  174. tooluniverse/tools/FDA_get_contraindications_by_drug_name.py +55 -0
  175. tooluniverse/tools/FDA_get_controlled_substance_DEA_schedule_info_by_drug_name.py +55 -0
  176. tooluniverse/tools/FDA_get_dear_health_care_provider_letter_info_by_drug_name.py +55 -0
  177. tooluniverse/tools/FDA_get_dependence_info_by_drug_name.py +55 -0
  178. tooluniverse/tools/FDA_get_disposal_info_by_drug_name.py +55 -0
  179. tooluniverse/tools/FDA_get_do_not_use_info_by_drug_name.py +55 -0
  180. tooluniverse/tools/FDA_get_document_id_by_drug_name.py +55 -0
  181. tooluniverse/tools/FDA_get_dosage_and_storage_information_by_drug_name.py +55 -0
  182. tooluniverse/tools/FDA_get_dosage_forms_and_strengths_by_drug_name.py +55 -0
  183. tooluniverse/tools/FDA_get_drug_generic_name.py +46 -0
  184. tooluniverse/tools/FDA_get_drug_interactions_by_drug_name.py +55 -0
  185. tooluniverse/tools/FDA_get_drug_name_by_SPL_ID.py +55 -0
  186. tooluniverse/tools/FDA_get_drug_name_by_adverse_reaction.py +59 -0
  187. tooluniverse/tools/FDA_get_drug_name_by_calibration_instructions.py +59 -0
  188. tooluniverse/tools/FDA_get_drug_name_by_dependence_info.py +59 -0
  189. tooluniverse/tools/FDA_get_drug_name_by_document_id.py +55 -0
  190. tooluniverse/tools/FDA_get_drug_name_by_dosage_info.py +55 -0
  191. tooluniverse/tools/FDA_get_drug_name_by_environmental_warning.py +59 -0
  192. tooluniverse/tools/FDA_get_drug_name_by_inactive_ingredient.py +59 -0
  193. tooluniverse/tools/FDA_get_drug_name_by_info_on_conditions_for_doctor_consultation.py +55 -0
  194. tooluniverse/tools/FDA_get_drug_name_by_labor_and_delivery_info.py +59 -0
  195. tooluniverse/tools/FDA_get_drug_name_by_microbiology.py +59 -0
  196. tooluniverse/tools/FDA_get_drug_name_by_other_safety_info.py +55 -0
  197. tooluniverse/tools/FDA_get_drug_name_by_pharmacodynamics.py +59 -0
  198. tooluniverse/tools/FDA_get_drug_name_by_pharmacogenomics.py +59 -0
  199. tooluniverse/tools/FDA_get_drug_name_by_precautions.py +55 -0
  200. tooluniverse/tools/FDA_get_drug_name_by_pregnancy_or_breastfeeding_info.py +59 -0
  201. tooluniverse/tools/FDA_get_drug_name_by_principal_display_panel.py +59 -0
  202. tooluniverse/tools/FDA_get_drug_name_by_reference.py +55 -0
  203. tooluniverse/tools/FDA_get_drug_name_by_set_id.py +55 -0
  204. tooluniverse/tools/FDA_get_drug_name_by_stop_use_info.py +55 -0
  205. tooluniverse/tools/FDA_get_drug_name_by_storage_and_handling_info.py +55 -0
  206. tooluniverse/tools/FDA_get_drug_name_by_warnings.py +55 -0
  207. tooluniverse/tools/FDA_get_drug_name_from_patient_package_insert.py +59 -0
  208. tooluniverse/tools/FDA_get_drug_names_by_abuse_dependence_info.py +55 -0
  209. tooluniverse/tools/FDA_get_drug_names_by_abuse_info.py +63 -0
  210. tooluniverse/tools/FDA_get_drug_names_by_accessories.py +63 -0
  211. tooluniverse/tools/FDA_get_drug_names_by_active_ingredient.py +63 -0
  212. tooluniverse/tools/FDA_get_drug_names_by_alarm.py +63 -0
  213. tooluniverse/tools/FDA_get_drug_names_by_animal_pharmacology_info.py +63 -0
  214. tooluniverse/tools/FDA_get_drug_names_by_application_number_NDC_number.py +59 -0
  215. tooluniverse/tools/FDA_get_drug_names_by_assembly_installation_info.py +63 -0
  216. tooluniverse/tools/FDA_get_drug_names_by_boxed_warning.py +63 -0
  217. tooluniverse/tools/FDA_get_drug_names_by_child_safety_info.py +63 -0
  218. tooluniverse/tools/FDA_get_drug_names_by_clinical_pharmacology.py +63 -0
  219. tooluniverse/tools/FDA_get_drug_names_by_clinical_studies.py +63 -0
  220. tooluniverse/tools/FDA_get_drug_names_by_consulting_doctor_pharmacist_info.py +63 -0
  221. tooluniverse/tools/FDA_get_drug_names_by_contraindications.py +63 -0
  222. tooluniverse/tools/FDA_get_drug_names_by_controlled_substance_DEA_schedule.py +63 -0
  223. tooluniverse/tools/FDA_get_drug_names_by_dear_health_care_provider_letter_info.py +63 -0
  224. tooluniverse/tools/FDA_get_drug_names_by_disposal_info.py +63 -0
  225. tooluniverse/tools/FDA_get_drug_names_by_dosage_forms_and_strengths_info.py +63 -0
  226. tooluniverse/tools/FDA_get_drug_names_by_drug_interactions.py +63 -0
  227. tooluniverse/tools/FDA_get_drug_names_by_effective_time.py +63 -0
  228. tooluniverse/tools/FDA_get_drug_names_by_food_safety_warnings.py +63 -0
  229. tooluniverse/tools/FDA_get_drug_names_by_general_precautions.py +63 -0
  230. tooluniverse/tools/FDA_get_drug_names_by_geriatric_use.py +63 -0
  231. tooluniverse/tools/FDA_get_drug_names_by_health_claim.py +63 -0
  232. tooluniverse/tools/FDA_get_drug_names_by_indication.py +55 -0
  233. tooluniverse/tools/FDA_get_drug_names_by_info_for_nursing_mothers.py +63 -0
  234. tooluniverse/tools/FDA_get_drug_names_by_information_for_owners_or_caregivers.py +63 -0
  235. tooluniverse/tools/FDA_get_drug_names_by_ingredient.py +63 -0
  236. tooluniverse/tools/FDA_get_drug_names_by_instructions_for_use.py +63 -0
  237. tooluniverse/tools/FDA_get_drug_names_by_lab_test_interference.py +63 -0
  238. tooluniverse/tools/FDA_get_drug_names_by_lab_tests.py +63 -0
  239. tooluniverse/tools/FDA_get_drug_names_by_mechanism_of_action.py +63 -0
  240. tooluniverse/tools/FDA_get_drug_names_by_medication_guide.py +63 -0
  241. tooluniverse/tools/FDA_get_drug_names_by_nonclinical_toxicology_info.py +63 -0
  242. tooluniverse/tools/FDA_get_drug_names_by_nonteratogenic_effects.py +63 -0
  243. tooluniverse/tools/FDA_get_drug_names_by_overdosage_info.py +63 -0
  244. tooluniverse/tools/FDA_get_drug_names_by_pediatric_use.py +63 -0
  245. tooluniverse/tools/FDA_get_drug_names_by_pharmacokinetics.py +63 -0
  246. tooluniverse/tools/FDA_get_drug_names_by_population_use.py +63 -0
  247. tooluniverse/tools/FDA_get_drug_names_by_pregnancy_effects_info.py +63 -0
  248. tooluniverse/tools/FDA_get_drug_names_by_residue_warning.py +63 -0
  249. tooluniverse/tools/FDA_get_drug_names_by_risk.py +63 -0
  250. tooluniverse/tools/FDA_get_drug_names_by_route.py +63 -0
  251. tooluniverse/tools/FDA_get_drug_names_by_safe_handling_warning.py +63 -0
  252. tooluniverse/tools/FDA_get_drug_names_by_safety_summary.py +63 -0
  253. tooluniverse/tools/FDA_get_drug_names_by_spl_indexing_data_elements.py +63 -0
  254. tooluniverse/tools/FDA_get_drug_names_by_teratogenic_effects.py +63 -0
  255. tooluniverse/tools/FDA_get_drug_names_by_user_safety_warning.py +63 -0
  256. tooluniverse/tools/FDA_get_drug_names_by_warnings_and_cautions.py +63 -0
  257. tooluniverse/tools/FDA_get_drugs_by_carcinogenic_mutagenic_fertility.py +63 -0
  258. tooluniverse/tools/FDA_get_effective_time_by_drug_name.py +55 -0
  259. tooluniverse/tools/FDA_get_environmental_warning_by_drug_name.py +55 -0
  260. tooluniverse/tools/FDA_get_general_precautions_by_drug_name.py +55 -0
  261. tooluniverse/tools/FDA_get_geriatric_use_info_by_drug_name.py +55 -0
  262. tooluniverse/tools/FDA_get_health_claims_by_drug_name.py +55 -0
  263. tooluniverse/tools/FDA_get_inactive_ingredient_info_by_drug_name.py +55 -0
  264. tooluniverse/tools/FDA_get_indications_by_drug_name.py +55 -0
  265. tooluniverse/tools/FDA_get_info_for_nursing_mothers_by_drug_name.py +55 -0
  266. tooluniverse/tools/FDA_get_info_for_patients_by_drug_name.py +55 -0
  267. tooluniverse/tools/FDA_get_info_on_conditions_for_doctor_consultation_by_drug_name.py +55 -0
  268. tooluniverse/tools/FDA_get_info_on_consulting_doctor_pharmacist_by_drug_name.py +55 -0
  269. tooluniverse/tools/FDA_get_information_for_owners_or_caregivers_by_drug_name.py +55 -0
  270. tooluniverse/tools/FDA_get_ingredients_by_drug_name.py +55 -0
  271. tooluniverse/tools/FDA_get_instructions_for_use_by_drug_name.py +55 -0
  272. tooluniverse/tools/FDA_get_lab_test_interference_info_by_drug_name.py +55 -0
  273. tooluniverse/tools/FDA_get_lab_tests_by_drug_name.py +55 -0
  274. tooluniverse/tools/FDA_get_labor_and_delivery_info_by_drug_name.py +55 -0
  275. tooluniverse/tools/FDA_get_manufacturer_name_NDC_number_by_drug_name.py +55 -0
  276. tooluniverse/tools/FDA_get_mechanism_of_action_by_drug_name.py +55 -0
  277. tooluniverse/tools/FDA_get_medication_guide_info_by_drug_name.py +55 -0
  278. tooluniverse/tools/FDA_get_microbiology_info_by_drug_name.py +55 -0
  279. tooluniverse/tools/FDA_get_nonclinical_toxicology_info_by_drug_name.py +55 -0
  280. tooluniverse/tools/FDA_get_nonteratogenic_effects_by_drug_name.py +55 -0
  281. tooluniverse/tools/FDA_get_other_safety_info_by_drug_name.py +55 -0
  282. tooluniverse/tools/FDA_get_overdosage_info_by_drug_name.py +55 -0
  283. tooluniverse/tools/FDA_get_patient_package_insert_from_drug_name.py +55 -0
  284. tooluniverse/tools/FDA_get_pediatric_use_info_by_drug_name.py +55 -0
  285. tooluniverse/tools/FDA_get_pharmacodynamics_by_drug_name.py +55 -0
  286. tooluniverse/tools/FDA_get_pharmacogenomics_info_by_drug_name.py +55 -0
  287. tooluniverse/tools/FDA_get_pharmacokinetics_by_drug_name.py +55 -0
  288. tooluniverse/tools/FDA_get_population_use_info_by_drug_name.py +55 -0
  289. tooluniverse/tools/FDA_get_precautions_by_drug_name.py +55 -0
  290. tooluniverse/tools/FDA_get_pregnancy_effects_info_by_drug_name.py +55 -0
  291. tooluniverse/tools/FDA_get_pregnancy_or_breastfeeding_info_by_drug_name.py +55 -0
  292. tooluniverse/tools/FDA_get_principal_display_panel_by_drug_name.py +55 -0
  293. tooluniverse/tools/FDA_get_purpose_info_by_drug_name.py +55 -0
  294. tooluniverse/tools/FDA_get_recent_changes_by_drug_name.py +55 -0
  295. tooluniverse/tools/FDA_get_reference_info_by_drug_name.py +55 -0
  296. tooluniverse/tools/FDA_get_residue_warning_by_drug_name.py +55 -0
  297. tooluniverse/tools/FDA_get_risk_info_by_drug_name.py +55 -0
  298. tooluniverse/tools/FDA_get_route_info_by_drug_name.py +55 -0
  299. tooluniverse/tools/FDA_get_safe_handling_warnings_by_drug_name.py +55 -0
  300. tooluniverse/tools/FDA_get_safety_summary_by_drug_name.py +55 -0
  301. tooluniverse/tools/FDA_get_spl_indexing_data_elements_by_drug_name.py +55 -0
  302. tooluniverse/tools/FDA_get_spl_unclassified_section_by_drug_name.py +55 -0
  303. tooluniverse/tools/FDA_get_stop_use_info_by_drug_name.py +55 -0
  304. tooluniverse/tools/FDA_get_storage_and_handling_info_by_drug_name.py +55 -0
  305. tooluniverse/tools/FDA_get_teratogenic_effects_by_drug_name.py +55 -0
  306. tooluniverse/tools/FDA_get_user_safety_warning_by_drug_names.py +55 -0
  307. tooluniverse/tools/FDA_get_warnings_and_cautions_by_drug_name.py +55 -0
  308. tooluniverse/tools/FDA_get_warnings_by_drug_name.py +55 -0
  309. tooluniverse/tools/FDA_get_when_using_info.py +55 -0
  310. tooluniverse/tools/FDA_retrieve_device_use_by_drug_name.py +55 -0
  311. tooluniverse/tools/FDA_retrieve_drug_name_by_device_use.py +59 -0
  312. tooluniverse/tools/FDA_retrieve_drug_names_by_patient_medication_info.py +55 -0
  313. tooluniverse/tools/FDA_retrieve_patient_medication_info_by_drug_name.py +55 -0
  314. tooluniverse/tools/Fatcat_search_scholar.py +52 -0
  315. tooluniverse/tools/Finish.py +44 -0
  316. tooluniverse/tools/GO_get_annotations_for_gene.py +46 -0
  317. tooluniverse/tools/GO_get_genes_for_term.py +55 -0
  318. tooluniverse/tools/GO_get_term_by_id.py +46 -0
  319. tooluniverse/tools/GO_get_term_details.py +46 -0
  320. tooluniverse/tools/GO_search_terms.py +46 -0
  321. tooluniverse/tools/HAL_search_archive.py +52 -0
  322. tooluniverse/tools/HPA_get_biological_processes_by_gene.py +52 -0
  323. tooluniverse/tools/HPA_get_cancer_prognostics_by_gene.py +49 -0
  324. tooluniverse/tools/HPA_get_comparative_expression_by_gene_and_cellline.py +52 -0
  325. tooluniverse/tools/HPA_get_comprehensive_gene_details_by_ensembl_id.py +63 -0
  326. tooluniverse/tools/HPA_get_contextual_biological_process_analysis.py +52 -0
  327. tooluniverse/tools/HPA_get_disease_expression_by_gene_tissue_disease.py +59 -0
  328. tooluniverse/tools/HPA_get_gene_basic_info_by_ensembl_id.py +49 -0
  329. tooluniverse/tools/HPA_get_gene_tsv_data_by_ensembl_id.py +49 -0
  330. tooluniverse/tools/HPA_get_protein_interactions_by_gene.py +49 -0
  331. tooluniverse/tools/HPA_get_rna_expression_by_source.py +59 -0
  332. tooluniverse/tools/HPA_get_rna_expression_in_specific_tissues.py +52 -0
  333. tooluniverse/tools/HPA_get_subcellular_location.py +46 -0
  334. tooluniverse/tools/HPA_search_genes_by_query.py +49 -0
  335. tooluniverse/tools/HypothesisGenerator.py +63 -0
  336. tooluniverse/tools/LabelGenerator.py +67 -0
  337. tooluniverse/tools/LiteratureContextReviewer.py +55 -0
  338. tooluniverse/tools/LiteratureSearchTool.py +49 -0
  339. tooluniverse/tools/MedRxiv_search_preprints.py +52 -0
  340. tooluniverse/tools/MedicalLiteratureReviewer.py +71 -0
  341. tooluniverse/tools/MedicalTermNormalizer.py +46 -0
  342. tooluniverse/tools/MedlinePlus_connect_lookup_by_code.py +67 -0
  343. tooluniverse/tools/MedlinePlus_get_genetics_condition_by_name.py +52 -0
  344. tooluniverse/tools/MedlinePlus_get_genetics_gene_by_name.py +52 -0
  345. tooluniverse/tools/MedlinePlus_get_genetics_index.py +44 -0
  346. tooluniverse/tools/MedlinePlus_search_topics_by_keyword.py +55 -0
  347. tooluniverse/tools/MethodologyRigorReviewer.py +49 -0
  348. tooluniverse/tools/MultiAgentLiteratureSearch.py +59 -0
  349. tooluniverse/tools/NICE_Clinical_Guidelines_Search.py +52 -0
  350. tooluniverse/tools/NICE_Guideline_Full_Text.py +46 -0
  351. tooluniverse/tools/NoveltySignificanceReviewer.py +59 -0
  352. tooluniverse/tools/OSF_search_preprints.py +59 -0
  353. tooluniverse/tools/OSL_get_efo_id_by_disease_name.py +46 -0
  354. tooluniverse/tools/OpenAIRE_search_publications.py +55 -0
  355. tooluniverse/tools/OpenAlex_Guidelines_Search.py +63 -0
  356. tooluniverse/tools/OpenTargets_drug_pharmacogenomics_data.py +52 -0
  357. tooluniverse/tools/OpenTargets_get_approved_indications_by_drug_chemblId.py +49 -0
  358. tooluniverse/tools/OpenTargets_get_associated_diseases_by_drug_chemblId.py +49 -0
  359. tooluniverse/tools/OpenTargets_get_associated_drugs_by_disease_efoId.py +52 -0
  360. tooluniverse/tools/OpenTargets_get_associated_drugs_by_target_ensemblID.py +55 -0
  361. tooluniverse/tools/OpenTargets_get_associated_phenotypes_by_disease_efoId.py +49 -0
  362. tooluniverse/tools/OpenTargets_get_associated_targets_by_disease_efoId.py +49 -0
  363. tooluniverse/tools/OpenTargets_get_associated_targets_by_drug_chemblId.py +49 -0
  364. tooluniverse/tools/OpenTargets_get_biological_mouse_models_by_ensemblID.py +49 -0
  365. tooluniverse/tools/OpenTargets_get_chemical_probes_by_target_ensemblID.py +49 -0
  366. tooluniverse/tools/OpenTargets_get_disease_ancestors_parents_by_efoId.py +49 -0
  367. tooluniverse/tools/OpenTargets_get_disease_descendants_children_by_efoId.py +49 -0
  368. tooluniverse/tools/OpenTargets_get_disease_description_by_efoId.py +49 -0
  369. tooluniverse/tools/OpenTargets_get_disease_id_description_by_name.py +49 -0
  370. tooluniverse/tools/OpenTargets_get_disease_ids_by_efoId.py +46 -0
  371. tooluniverse/tools/OpenTargets_get_disease_ids_by_name.py +46 -0
  372. tooluniverse/tools/OpenTargets_get_disease_locations_by_efoId.py +49 -0
  373. tooluniverse/tools/OpenTargets_get_disease_synonyms_by_efoId.py +49 -0
  374. tooluniverse/tools/OpenTargets_get_disease_therapeutic_areas_by_efoId.py +49 -0
  375. tooluniverse/tools/OpenTargets_get_diseases_phenotypes_by_target_ensembl.py +49 -0
  376. tooluniverse/tools/OpenTargets_get_drug_adverse_events_by_chemblId.py +52 -0
  377. tooluniverse/tools/OpenTargets_get_drug_approval_status_by_chemblId.py +49 -0
  378. tooluniverse/tools/OpenTargets_get_drug_chembId_by_generic_name.py +49 -0
  379. tooluniverse/tools/OpenTargets_get_drug_description_by_chemblId.py +49 -0
  380. tooluniverse/tools/OpenTargets_get_drug_id_description_by_name.py +49 -0
  381. tooluniverse/tools/OpenTargets_get_drug_indications_by_chemblId.py +49 -0
  382. tooluniverse/tools/OpenTargets_get_drug_mechanisms_of_action_by_chemblId.py +49 -0
  383. tooluniverse/tools/OpenTargets_get_drug_synonyms_by_chemblId.py +49 -0
  384. tooluniverse/tools/OpenTargets_get_drug_trade_names_by_chemblId.py +49 -0
  385. tooluniverse/tools/OpenTargets_get_drug_warnings_by_chemblId.py +49 -0
  386. tooluniverse/tools/OpenTargets_get_drug_withdrawn_blackbox_status_by_chemblId.py +49 -0
  387. tooluniverse/tools/OpenTargets_get_gene_ontology_terms_by_goID.py +49 -0
  388. tooluniverse/tools/OpenTargets_get_known_drugs_by_drug_chemblId.py +49 -0
  389. tooluniverse/tools/OpenTargets_get_parent_child_molecules_by_drug_chembl_ID.py +49 -0
  390. tooluniverse/tools/OpenTargets_get_publications_by_disease_efoId.py +71 -0
  391. tooluniverse/tools/OpenTargets_get_publications_by_drug_chemblId.py +71 -0
  392. tooluniverse/tools/OpenTargets_get_publications_by_target_ensemblID.py +71 -0
  393. tooluniverse/tools/OpenTargets_get_similar_entities_by_disease_efoId.py +55 -0
  394. tooluniverse/tools/OpenTargets_get_similar_entities_by_drug_chemblId.py +55 -0
  395. tooluniverse/tools/OpenTargets_get_similar_entities_by_target_ensemblID.py +55 -0
  396. tooluniverse/tools/OpenTargets_get_target_classes_by_ensemblID.py +49 -0
  397. tooluniverse/tools/OpenTargets_get_target_constraint_info_by_ensemblID.py +49 -0
  398. tooluniverse/tools/OpenTargets_get_target_enabling_packages_by_ensemblID.py +49 -0
  399. tooluniverse/tools/OpenTargets_get_target_gene_ontology_by_ensemblID.py +49 -0
  400. tooluniverse/tools/OpenTargets_get_target_genomic_location_by_ensemblID.py +49 -0
  401. tooluniverse/tools/OpenTargets_get_target_homologues_by_ensemblID.py +49 -0
  402. tooluniverse/tools/OpenTargets_get_target_id_description_by_name.py +49 -0
  403. tooluniverse/tools/OpenTargets_get_target_interactions_by_ensemblID.py +52 -0
  404. tooluniverse/tools/OpenTargets_get_target_safety_profile_by_ensemblID.py +49 -0
  405. tooluniverse/tools/OpenTargets_get_target_subcellular_locations_by_ensemblID.py +49 -0
  406. tooluniverse/tools/OpenTargets_get_target_synonyms_by_ensemblID.py +49 -0
  407. tooluniverse/tools/OpenTargets_get_target_tractability_by_ensemblID.py +49 -0
  408. tooluniverse/tools/OpenTargets_map_any_disease_id_to_all_other_ids.py +49 -0
  409. tooluniverse/tools/OpenTargets_multi_entity_search_by_query_string.py +59 -0
  410. tooluniverse/tools/OpenTargets_search_category_counts_by_query_string.py +49 -0
  411. tooluniverse/tools/OpenTargets_target_disease_evidence.py +52 -0
  412. tooluniverse/tools/OutputSummarizationComposer.py +71 -0
  413. tooluniverse/tools/PMC_search_papers.py +67 -0
  414. tooluniverse/tools/ProtocolOptimizer.py +49 -0
  415. tooluniverse/tools/PubChem_get_CID_by_SMILES.py +46 -0
  416. tooluniverse/tools/PubChem_get_CID_by_compound_name.py +46 -0
  417. tooluniverse/tools/PubChem_get_associated_patents_by_CID.py +46 -0
  418. tooluniverse/tools/PubChem_get_compound_2D_image_by_CID.py +52 -0
  419. tooluniverse/tools/PubChem_get_compound_properties_by_CID.py +46 -0
  420. tooluniverse/tools/PubChem_get_compound_synonyms_by_CID.py +46 -0
  421. tooluniverse/tools/PubChem_get_compound_xrefs_by_CID.py +52 -0
  422. tooluniverse/tools/PubChem_search_compounds_by_similarity.py +52 -0
  423. tooluniverse/tools/PubChem_search_compounds_by_substructure.py +49 -0
  424. tooluniverse/tools/PubMed_Guidelines_Search.py +55 -0
  425. tooluniverse/tools/PubMed_search_articles.py +55 -0
  426. tooluniverse/tools/PubTator3_EntityAutocomplete.py +59 -0
  427. tooluniverse/tools/PubTator3_LiteratureSearch.py +55 -0
  428. tooluniverse/tools/QuestionRephraser.py +52 -0
  429. tooluniverse/tools/Reactome_get_pathway_reactions.py +46 -0
  430. tooluniverse/tools/ReproducibilityTransparencyReviewer.py +49 -0
  431. tooluniverse/tools/ResultsInterpretationReviewer.py +55 -0
  432. tooluniverse/tools/ScientificTextSummarizer.py +59 -0
  433. tooluniverse/tools/SemanticScholar_search_papers.py +55 -0
  434. tooluniverse/tools/TRIP_Database_Guidelines_Search.py +55 -0
  435. tooluniverse/tools/TestCaseGenerator.py +46 -0
  436. tooluniverse/tools/ToolCompatibilityAnalyzer.py +59 -0
  437. tooluniverse/tools/ToolDescriptionOptimizer.py +67 -0
  438. tooluniverse/tools/ToolDiscover.py +63 -0
  439. tooluniverse/tools/ToolGraphComposer.py +71 -0
  440. tooluniverse/tools/ToolGraphGenerationPipeline.py +63 -0
  441. tooluniverse/tools/ToolImplementationGenerator.py +67 -0
  442. tooluniverse/tools/ToolMetadataGenerationPipeline.py +63 -0
  443. tooluniverse/tools/ToolMetadataGenerator.py +55 -0
  444. tooluniverse/tools/ToolMetadataStandardizer.py +52 -0
  445. tooluniverse/tools/ToolOptimizer.py +59 -0
  446. tooluniverse/tools/ToolOutputSummarizer.py +67 -0
  447. tooluniverse/tools/ToolQualityEvaluator.py +59 -0
  448. tooluniverse/tools/ToolRelationshipDetector.py +52 -0
  449. tooluniverse/tools/ToolSpecificationGenerator.py +67 -0
  450. tooluniverse/tools/ToolSpecificationOptimizer.py +63 -0
  451. tooluniverse/tools/Tool_Finder.py +67 -0
  452. tooluniverse/tools/Tool_Finder_Keyword.py +67 -0
  453. tooluniverse/tools/Tool_Finder_LLM.py +67 -0
  454. tooluniverse/tools/Tool_RAG.py +49 -0
  455. tooluniverse/tools/UniProt_get_alternative_names_by_accession.py +49 -0
  456. tooluniverse/tools/UniProt_get_disease_variants_by_accession.py +49 -0
  457. tooluniverse/tools/UniProt_get_entry_by_accession.py +49 -0
  458. tooluniverse/tools/UniProt_get_function_by_accession.py +49 -0
  459. tooluniverse/tools/UniProt_get_isoform_ids_by_accession.py +49 -0
  460. tooluniverse/tools/UniProt_get_organism_by_accession.py +49 -0
  461. tooluniverse/tools/UniProt_get_ptm_processing_by_accession.py +49 -0
  462. tooluniverse/tools/UniProt_get_recommended_name_by_accession.py +49 -0
  463. tooluniverse/tools/UniProt_get_sequence_by_accession.py +49 -0
  464. tooluniverse/tools/UniProt_get_subcellular_location_by_accession.py +49 -0
  465. tooluniverse/tools/Unpaywall_check_oa_status.py +52 -0
  466. tooluniverse/tools/WHO_Guideline_Full_Text.py +46 -0
  467. tooluniverse/tools/WHO_Guidelines_Search.py +52 -0
  468. tooluniverse/tools/Wikidata_SPARQL_query.py +52 -0
  469. tooluniverse/tools/WritingPresentationReviewer.py +49 -0
  470. tooluniverse/tools/Zenodo_search_records.py +59 -0
  471. tooluniverse/tools/__init__.py +1738 -0
  472. tooluniverse/tools/_shared_client.py +138 -0
  473. tooluniverse/tools/alphafold_get_annotations.py +52 -0
  474. tooluniverse/tools/alphafold_get_prediction.py +55 -0
  475. tooluniverse/tools/alphafold_get_summary.py +46 -0
  476. tooluniverse/tools/call_agentic_human.py +46 -0
  477. tooluniverse/tools/cancer_biomarkers_disease_target_score.py +52 -0
  478. tooluniverse/tools/cancer_gene_census_disease_target_score.py +52 -0
  479. tooluniverse/tools/cellosaurus_get_cell_line_info.py +55 -0
  480. tooluniverse/tools/cellosaurus_query_converter.py +52 -0
  481. tooluniverse/tools/cellosaurus_search_cell_lines.py +55 -0
  482. tooluniverse/tools/chembl_disease_target_score.py +52 -0
  483. tooluniverse/tools/dict_search.py +67 -0
  484. tooluniverse/tools/dili_search.py +67 -0
  485. tooluniverse/tools/diqt_search.py +67 -0
  486. tooluniverse/tools/disease_target_score.py +59 -0
  487. tooluniverse/tools/drugbank_filter_drugs_by_name.py +55 -0
  488. tooluniverse/tools/drugbank_full_search.py +67 -0
  489. tooluniverse/tools/drugbank_get_drug_basic_info_by_drug_name_or_drugbank_id.py +63 -0
  490. tooluniverse/tools/drugbank_get_drug_chemistry_by_drug_name_or_drugbank_id.py +63 -0
  491. tooluniverse/tools/drugbank_get_drug_interactions_by_drug_name_or_drugbank_id.py +63 -0
  492. tooluniverse/tools/drugbank_get_drug_name_and_description_by_indication.py +63 -0
  493. tooluniverse/tools/drugbank_get_drug_name_and_description_by_pathway_name.py +63 -0
  494. tooluniverse/tools/drugbank_get_drug_name_and_description_by_target_name.py +63 -0
  495. tooluniverse/tools/drugbank_get_drug_name_description_pharmacology_by_mechanism_of_action.py +63 -0
  496. tooluniverse/tools/drugbank_get_drug_pathways_and_reactions_by_drug_name_or_drugbank_id.py +63 -0
  497. tooluniverse/tools/drugbank_get_drug_products_by_name_or_drugbank_id.py +63 -0
  498. tooluniverse/tools/drugbank_get_drug_references_by_drug_name_or_drugbank_id.py +63 -0
  499. tooluniverse/tools/drugbank_get_indications_by_drug_name_or_drugbank_id.py +63 -0
  500. tooluniverse/tools/drugbank_get_pharmacology_by_drug_name_or_drugbank_id.py +63 -0
  501. tooluniverse/tools/drugbank_get_safety_by_drug_name_or_drugbank_id.py +63 -0
  502. tooluniverse/tools/drugbank_get_targets_by_drug_name_or_drugbank_id.py +63 -0
  503. tooluniverse/tools/drugbank_links_search.py +67 -0
  504. tooluniverse/tools/drugbank_vocab_filter.py +63 -0
  505. tooluniverse/tools/drugbank_vocab_search.py +67 -0
  506. tooluniverse/tools/embedding_database_add.py +63 -0
  507. tooluniverse/tools/embedding_database_create.py +71 -0
  508. tooluniverse/tools/embedding_database_load.py +63 -0
  509. tooluniverse/tools/embedding_database_search.py +67 -0
  510. tooluniverse/tools/embedding_sync_download.py +63 -0
  511. tooluniverse/tools/embedding_sync_upload.py +71 -0
  512. tooluniverse/tools/enrichr_gene_enrichment_analysis.py +52 -0
  513. tooluniverse/tools/europepmc_disease_target_score.py +52 -0
  514. tooluniverse/tools/eva_disease_target_score.py +52 -0
  515. tooluniverse/tools/eva_somatic_disease_target_score.py +52 -0
  516. tooluniverse/tools/expression_atlas_disease_target_score.py +52 -0
  517. tooluniverse/tools/extract_clinical_trial_adverse_events.py +59 -0
  518. tooluniverse/tools/extract_clinical_trial_outcomes.py +52 -0
  519. tooluniverse/tools/genomics_england_disease_target_score.py +52 -0
  520. tooluniverse/tools/get_HPO_ID_by_phenotype.py +55 -0
  521. tooluniverse/tools/get_albumentations_info.py +44 -0
  522. tooluniverse/tools/get_altair_info.py +44 -0
  523. tooluniverse/tools/get_anndata_info.py +49 -0
  524. tooluniverse/tools/get_arboreto_info.py +46 -0
  525. tooluniverse/tools/get_arxiv_info.py +46 -0
  526. tooluniverse/tools/get_ase_info.py +46 -0
  527. tooluniverse/tools/get_assembly_info_by_pdb_id.py +46 -0
  528. tooluniverse/tools/get_assembly_summary.py +46 -0
  529. tooluniverse/tools/get_astropy_info.py +44 -0
  530. tooluniverse/tools/get_binding_affinity_by_pdb_id.py +46 -0
  531. tooluniverse/tools/get_biopandas_info.py +49 -0
  532. tooluniverse/tools/get_biopython_info.py +49 -0
  533. tooluniverse/tools/get_bioservices_info.py +44 -0
  534. tooluniverse/tools/get_biotite_info.py +49 -0
  535. tooluniverse/tools/get_bokeh_info.py +44 -0
  536. tooluniverse/tools/get_brian2_info.py +44 -0
  537. tooluniverse/tools/get_cartopy_info.py +44 -0
  538. tooluniverse/tools/get_catboost_info.py +44 -0
  539. tooluniverse/tools/get_cellpose_info.py +49 -0
  540. tooluniverse/tools/get_cellrank_info.py +44 -0
  541. tooluniverse/tools/get_cellxgene_census_info.py +46 -0
  542. tooluniverse/tools/get_cftime_info.py +44 -0
  543. tooluniverse/tools/get_chem_comp_audit_info.py +46 -0
  544. tooluniverse/tools/get_chem_comp_charge_and_ambiguity.py +46 -0
  545. tooluniverse/tools/get_chembl_webresource_client_info.py +44 -0
  546. tooluniverse/tools/get_citation_info_by_pdb_id.py +46 -0
  547. tooluniverse/tools/get_clair3_info.py +46 -0
  548. tooluniverse/tools/get_clinical_trial_conditions_and_interventions.py +55 -0
  549. tooluniverse/tools/get_clinical_trial_descriptions.py +52 -0
  550. tooluniverse/tools/get_clinical_trial_eligibility_criteria.py +55 -0
  551. tooluniverse/tools/get_clinical_trial_locations.py +52 -0
  552. tooluniverse/tools/get_clinical_trial_outcome_measures.py +52 -0
  553. tooluniverse/tools/get_clinical_trial_references.py +52 -0
  554. tooluniverse/tools/get_clinical_trial_status_and_dates.py +52 -0
  555. tooluniverse/tools/get_cobra_info.py +46 -0
  556. tooluniverse/tools/get_cobrapy_info.py +46 -0
  557. tooluniverse/tools/get_cooler_info.py +49 -0
  558. tooluniverse/tools/get_core_refinement_statistics.py +46 -0
  559. tooluniverse/tools/get_cryosparc_tools_info.py +46 -0
  560. tooluniverse/tools/get_crystal_growth_conditions_by_pdb_id.py +49 -0
  561. tooluniverse/tools/get_crystallization_ph_by_pdb_id.py +46 -0
  562. tooluniverse/tools/get_crystallographic_properties_by_pdb_id.py +49 -0
  563. tooluniverse/tools/get_cupy_info.py +44 -0
  564. tooluniverse/tools/get_cyvcf2_info.py +49 -0
  565. tooluniverse/tools/get_dask_info.py +44 -0
  566. tooluniverse/tools/get_datamol_info.py +44 -0
  567. tooluniverse/tools/get_datashader_info.py +44 -0
  568. tooluniverse/tools/get_deepchem_info.py +49 -0
  569. tooluniverse/tools/get_deeppurpose_info.py +46 -0
  570. tooluniverse/tools/get_deeptools_info.py +46 -0
  571. tooluniverse/tools/get_deepxde_info.py +49 -0
  572. tooluniverse/tools/get_dendropy_info.py +44 -0
  573. tooluniverse/tools/get_descriptastorus_info.py +46 -0
  574. tooluniverse/tools/get_diffdock_info.py +46 -0
  575. tooluniverse/tools/get_dscribe_info.py +49 -0
  576. tooluniverse/tools/get_ec_number_by_entity_id.py +46 -0
  577. tooluniverse/tools/get_elephant_info.py +44 -0
  578. tooluniverse/tools/get_em_3d_fitting_and_reconstruction_details.py +49 -0
  579. tooluniverse/tools/get_emdb_ids_by_pdb_id.py +46 -0
  580. tooluniverse/tools/get_episcanpy_info.py +44 -0
  581. tooluniverse/tools/get_ete3_info.py +44 -0
  582. tooluniverse/tools/get_faiss_info.py +46 -0
  583. tooluniverse/tools/get_fanc_info.py +46 -0
  584. tooluniverse/tools/get_flask_info.py +46 -0
  585. tooluniverse/tools/get_flowio_info.py +46 -0
  586. tooluniverse/tools/get_flowkit_info.py +46 -0
  587. tooluniverse/tools/get_flowutils_info.py +46 -0
  588. tooluniverse/tools/get_freesasa_info.py +44 -0
  589. tooluniverse/tools/get_galpy_info.py +44 -0
  590. tooluniverse/tools/get_gene_name_by_entity_id.py +46 -0
  591. tooluniverse/tools/get_geopandas_info.py +44 -0
  592. tooluniverse/tools/get_gget_info.py +46 -0
  593. tooluniverse/tools/get_googlesearch_python_info.py +46 -0
  594. tooluniverse/tools/get_gseapy_info.py +49 -0
  595. tooluniverse/tools/get_h5py_info.py +46 -0
  596. tooluniverse/tools/get_harmony_pytorch_info.py +46 -0
  597. tooluniverse/tools/get_hmmlearn_info.py +46 -0
  598. tooluniverse/tools/get_holoviews_info.py +44 -0
  599. tooluniverse/tools/get_host_organism_by_pdb_id.py +46 -0
  600. tooluniverse/tools/get_htmd_info.py +44 -0
  601. tooluniverse/tools/get_hyperopt_info.py +49 -0
  602. tooluniverse/tools/get_igraph_info.py +49 -0
  603. tooluniverse/tools/get_imageio_info.py +44 -0
  604. tooluniverse/tools/get_imbalanced_learn_info.py +44 -0
  605. tooluniverse/tools/get_jcvi_info.py +46 -0
  606. tooluniverse/tools/get_joblib_info.py +44 -0
  607. tooluniverse/tools/get_joint_associated_diseases_by_HPO_ID_list.py +55 -0
  608. tooluniverse/tools/get_khmer_info.py +46 -0
  609. tooluniverse/tools/get_kipoiseq_info.py +44 -0
  610. tooluniverse/tools/get_lifelines_info.py +49 -0
  611. tooluniverse/tools/get_ligand_bond_count_by_pdb_id.py +46 -0
  612. tooluniverse/tools/get_ligand_smiles_by_chem_comp_id.py +49 -0
  613. tooluniverse/tools/get_lightgbm_info.py +44 -0
  614. tooluniverse/tools/get_loompy_info.py +46 -0
  615. tooluniverse/tools/get_mageck_info.py +46 -0
  616. tooluniverse/tools/get_matplotlib_info.py +49 -0
  617. tooluniverse/tools/get_mdanalysis_info.py +46 -0
  618. tooluniverse/tools/get_mdtraj_info.py +44 -0
  619. tooluniverse/tools/get_mne_info.py +44 -0
  620. tooluniverse/tools/get_molfeat_info.py +44 -0
  621. tooluniverse/tools/get_molvs_info.py +44 -0
  622. tooluniverse/tools/get_mordred_info.py +44 -0
  623. tooluniverse/tools/get_msprime_info.py +49 -0
  624. tooluniverse/tools/get_mudata_info.py +49 -0
  625. tooluniverse/tools/get_mutation_annotations_by_pdb_id.py +46 -0
  626. tooluniverse/tools/get_neo_info.py +44 -0
  627. tooluniverse/tools/get_netcdf4_info.py +44 -0
  628. tooluniverse/tools/get_networkx_info.py +46 -0
  629. tooluniverse/tools/get_nglview_info.py +44 -0
  630. tooluniverse/tools/get_nilearn_info.py +44 -0
  631. tooluniverse/tools/get_numba_info.py +46 -0
  632. tooluniverse/tools/get_numpy_info.py +46 -0
  633. tooluniverse/tools/get_oligosaccharide_descriptors_by_entity_id.py +49 -0
  634. tooluniverse/tools/get_openbabel_info.py +49 -0
  635. tooluniverse/tools/get_openchem_info.py +46 -0
  636. tooluniverse/tools/get_opencv_info.py +49 -0
  637. tooluniverse/tools/get_openmm_info.py +49 -0
  638. tooluniverse/tools/get_optlang_info.py +46 -0
  639. tooluniverse/tools/get_optuna_info.py +44 -0
  640. tooluniverse/tools/get_palantir_info.py +44 -0
  641. tooluniverse/tools/get_pandas_info.py +49 -0
  642. tooluniverse/tools/get_patsy_info.py +44 -0
  643. tooluniverse/tools/get_pdbfixer_info.py +46 -0
  644. tooluniverse/tools/get_phenotype_by_HPO_ID.py +46 -0
  645. tooluniverse/tools/get_pillow_info.py +44 -0
  646. tooluniverse/tools/get_plantcv_info.py +46 -0
  647. tooluniverse/tools/get_plip_info.py +46 -0
  648. tooluniverse/tools/get_plotly_info.py +44 -0
  649. tooluniverse/tools/get_poliastro_info.py +46 -0
  650. tooluniverse/tools/get_polymer_entity_annotations.py +49 -0
  651. tooluniverse/tools/get_polymer_entity_count_by_pdb_id.py +46 -0
  652. tooluniverse/tools/get_polymer_entity_ids_by_pdb_id.py +46 -0
  653. tooluniverse/tools/get_polymer_entity_type_by_entity_id.py +49 -0
  654. tooluniverse/tools/get_polymer_molecular_weight_by_entity_id.py +49 -0
  655. tooluniverse/tools/get_poretools_info.py +44 -0
  656. tooluniverse/tools/get_prody_info.py +46 -0
  657. tooluniverse/tools/get_protein_classification_by_pdb_id.py +49 -0
  658. tooluniverse/tools/get_protein_metadata_by_pdb_id.py +46 -0
  659. tooluniverse/tools/get_pubchempy_info.py +44 -0
  660. tooluniverse/tools/get_pybedtools_info.py +49 -0
  661. tooluniverse/tools/get_pybigwig_info.py +46 -0
  662. tooluniverse/tools/get_pydeseq2_info.py +46 -0
  663. tooluniverse/tools/get_pyensembl_info.py +44 -0
  664. tooluniverse/tools/get_pyephem_info.py +44 -0
  665. tooluniverse/tools/get_pyfaidx_info.py +49 -0
  666. tooluniverse/tools/get_pyfasta_info.py +44 -0
  667. tooluniverse/tools/get_pykalman_info.py +46 -0
  668. tooluniverse/tools/get_pyliftover_info.py +49 -0
  669. tooluniverse/tools/get_pymassspec_info.py +46 -0
  670. tooluniverse/tools/get_pymed_info.py +46 -0
  671. tooluniverse/tools/get_pymzml_info.py +46 -0
  672. tooluniverse/tools/get_pypdf2_info.py +46 -0
  673. tooluniverse/tools/get_pyranges_info.py +49 -0
  674. tooluniverse/tools/get_pyrosetta_info.py +44 -0
  675. tooluniverse/tools/get_pysam_info.py +46 -0
  676. tooluniverse/tools/get_pyscenic_info.py +46 -0
  677. tooluniverse/tools/get_pyscf_info.py +46 -0
  678. tooluniverse/tools/get_pyscreener_info.py +46 -0
  679. tooluniverse/tools/get_pytdc_info.py +46 -0
  680. tooluniverse/tools/get_python_libsbml_info.py +46 -0
  681. tooluniverse/tools/get_pytorch_info.py +49 -0
  682. tooluniverse/tools/get_pyvcf_info.py +44 -0
  683. tooluniverse/tools/get_pyvis_info.py +44 -0
  684. tooluniverse/tools/get_qutip_info.py +44 -0
  685. tooluniverse/tools/get_rasterio_info.py +44 -0
  686. tooluniverse/tools/get_rdkit_info.py +46 -0
  687. tooluniverse/tools/get_refinement_resolution_by_pdb_id.py +49 -0
  688. tooluniverse/tools/get_release_deposit_dates_by_pdb_id.py +49 -0
  689. tooluniverse/tools/get_reportlab_info.py +49 -0
  690. tooluniverse/tools/get_requests_info.py +49 -0
  691. tooluniverse/tools/get_ruptures_info.py +46 -0
  692. tooluniverse/tools/get_scanorama_info.py +44 -0
  693. tooluniverse/tools/get_scanpy_info.py +49 -0
  694. tooluniverse/tools/get_schnetpack_info.py +49 -0
  695. tooluniverse/tools/get_scholarly_info.py +46 -0
  696. tooluniverse/tools/get_scikit_bio_info.py +49 -0
  697. tooluniverse/tools/get_scikit_image_info.py +46 -0
  698. tooluniverse/tools/get_scikit_learn_info.py +49 -0
  699. tooluniverse/tools/get_scipy_info.py +46 -0
  700. tooluniverse/tools/get_scrublet_info.py +49 -0
  701. tooluniverse/tools/get_scvelo_info.py +49 -0
  702. tooluniverse/tools/get_scvi_tools_info.py +44 -0
  703. tooluniverse/tools/get_seaborn_info.py +49 -0
  704. tooluniverse/tools/get_sequence_by_pdb_id.py +46 -0
  705. tooluniverse/tools/get_sequence_lengths_by_pdb_id.py +46 -0
  706. tooluniverse/tools/get_sequence_positional_features_by_instance_id.py +49 -0
  707. tooluniverse/tools/get_skopt_info.py +44 -0
  708. tooluniverse/tools/get_souporcell_info.py +46 -0
  709. tooluniverse/tools/get_source_organism_by_pdb_id.py +46 -0
  710. tooluniverse/tools/get_space_group_by_pdb_id.py +46 -0
  711. tooluniverse/tools/get_statsmodels_info.py +49 -0
  712. tooluniverse/tools/get_structure_determination_software_by_pdb_id.py +49 -0
  713. tooluniverse/tools/get_structure_title_by_pdb_id.py +46 -0
  714. tooluniverse/tools/get_structure_validation_metrics_by_pdb_id.py +49 -0
  715. tooluniverse/tools/get_sunpy_info.py +44 -0
  716. tooluniverse/tools/get_sympy_info.py +46 -0
  717. tooluniverse/tools/get_target_cofactor_info.py +46 -0
  718. tooluniverse/tools/get_taxonomy_by_pdb_id.py +46 -0
  719. tooluniverse/tools/get_tiledb_info.py +46 -0
  720. tooluniverse/tools/get_tiledbsoma_info.py +46 -0
  721. tooluniverse/tools/get_torch_geometric_info.py +49 -0
  722. tooluniverse/tools/get_tqdm_info.py +46 -0
  723. tooluniverse/tools/get_trackpy_info.py +46 -0
  724. tooluniverse/tools/get_tskit_info.py +46 -0
  725. tooluniverse/tools/get_umap_learn_info.py +49 -0
  726. tooluniverse/tools/get_uniprot_accession_by_entity_id.py +49 -0
  727. tooluniverse/tools/get_velocyto_info.py +44 -0
  728. tooluniverse/tools/get_viennarna_info.py +49 -0
  729. tooluniverse/tools/get_webpage_text_from_url.py +52 -0
  730. tooluniverse/tools/get_webpage_title.py +49 -0
  731. tooluniverse/tools/get_xarray_info.py +44 -0
  732. tooluniverse/tools/get_xesmf_info.py +44 -0
  733. tooluniverse/tools/get_xgboost_info.py +44 -0
  734. tooluniverse/tools/get_zarr_info.py +44 -0
  735. tooluniverse/tools/gwas_get_association_by_id.py +49 -0
  736. tooluniverse/tools/gwas_get_associations_for_snp.py +67 -0
  737. tooluniverse/tools/gwas_get_associations_for_study.py +55 -0
  738. tooluniverse/tools/gwas_get_associations_for_trait.py +55 -0
  739. tooluniverse/tools/gwas_get_snp_by_id.py +46 -0
  740. tooluniverse/tools/gwas_get_snps_for_gene.py +55 -0
  741. tooluniverse/tools/gwas_get_studies_for_trait.py +75 -0
  742. tooluniverse/tools/gwas_get_study_by_id.py +46 -0
  743. tooluniverse/tools/gwas_get_variants_for_trait.py +55 -0
  744. tooluniverse/tools/gwas_search_associations.py +75 -0
  745. tooluniverse/tools/gwas_search_snps.py +63 -0
  746. tooluniverse/tools/gwas_search_studies.py +75 -0
  747. tooluniverse/tools/humanbase_ppi_analysis.py +67 -0
  748. tooluniverse/tools/mesh_get_subjects_by_pharmacological_action.py +63 -0
  749. tooluniverse/tools/mesh_get_subjects_by_subject_id.py +63 -0
  750. tooluniverse/tools/mesh_get_subjects_by_subject_name.py +63 -0
  751. tooluniverse/tools/mesh_get_subjects_by_subject_scope_or_definition.py +63 -0
  752. tooluniverse/tools/odphp_itemlist.py +49 -0
  753. tooluniverse/tools/odphp_myhealthfinder.py +67 -0
  754. tooluniverse/tools/odphp_outlink_fetch.py +59 -0
  755. tooluniverse/tools/odphp_topicsearch.py +67 -0
  756. tooluniverse/tools/openalex_literature_search.py +67 -0
  757. tooluniverse/tools/reactome_disease_target_score.py +52 -0
  758. tooluniverse/tools/search_clinical_trials.py +67 -0
  759. tooluniverse/tools/visualize_molecule_2d.py +83 -0
  760. tooluniverse/tools/visualize_molecule_3d.py +91 -0
  761. tooluniverse/tools/visualize_protein_structure_3d.py +79 -0
  762. tooluniverse/unified_guideline_tools.py +1210 -0
  763. tooluniverse/unpaywall_tool.py +0 -1
  764. tooluniverse/utils.py +71 -2
  765. tooluniverse/visualization_tool.py +897 -0
  766. tooluniverse/wikidata_sparql_tool.py +1 -2
  767. tooluniverse/zenodo_tool.py +1 -3
  768. {tooluniverse-1.0.6.dist-info → tooluniverse-1.0.7.dist-info}/METADATA +11 -2
  769. tooluniverse-1.0.7.dist-info/RECORD +855 -0
  770. {tooluniverse-1.0.6.dist-info → tooluniverse-1.0.7.dist-info}/entry_points.txt +3 -0
  771. tooluniverse/test/list_azure_openai_models.py +0 -210
  772. tooluniverse/test/mcp_server_test.py +0 -0
  773. tooluniverse/test/test_admetai_tool.py +0 -370
  774. tooluniverse/test/test_agentic_tool.py +0 -129
  775. tooluniverse/test/test_agentic_tool_azure_models.py +0 -91
  776. tooluniverse/test/test_alphafold_tool.py +0 -108
  777. tooluniverse/test/test_api_key_validation_min.py +0 -64
  778. tooluniverse/test/test_chem_tool.py +0 -37
  779. tooluniverse/test/test_claude_sdk.py +0 -93
  780. tooluniverse/test/test_compose_lieraturereview.py +0 -63
  781. tooluniverse/test/test_compose_tool.py +0 -448
  782. tooluniverse/test/test_dailymed.py +0 -69
  783. tooluniverse/test/test_dataset_tool.py +0 -200
  784. tooluniverse/test/test_disease_target_score.py +0 -56
  785. tooluniverse/test/test_drugbank_filter_examples.py +0 -179
  786. tooluniverse/test/test_efo.py +0 -31
  787. tooluniverse/test/test_enrichr_tool.py +0 -21
  788. tooluniverse/test/test_europe_pmc_tool.py +0 -20
  789. tooluniverse/test/test_fda_adv.py +0 -95
  790. tooluniverse/test/test_fda_drug_labeling.py +0 -91
  791. tooluniverse/test/test_gene_ontology_tools.py +0 -66
  792. tooluniverse/test/test_global_fallback.py +0 -288
  793. tooluniverse/test/test_gwas_tool.py +0 -139
  794. tooluniverse/test/test_hooks_direct.py +0 -219
  795. tooluniverse/test/test_hpa.py +0 -625
  796. tooluniverse/test/test_humanbase_tool.py +0 -20
  797. tooluniverse/test/test_idmap_tools.py +0 -61
  798. tooluniverse/test/test_list_built_in_tools.py +0 -33
  799. tooluniverse/test/test_mcp_server.py +0 -211
  800. tooluniverse/test/test_mcp_tool.py +0 -247
  801. tooluniverse/test/test_medlineplus.py +0 -220
  802. tooluniverse/test/test_odphp_tool.py +0 -166
  803. tooluniverse/test/test_openalex_tool.py +0 -32
  804. tooluniverse/test/test_openrouter_client.py +0 -288
  805. tooluniverse/test/test_opentargets.py +0 -28
  806. tooluniverse/test/test_pubchem_tool.py +0 -116
  807. tooluniverse/test/test_pubtator_tool.py +0 -37
  808. tooluniverse/test/test_rcsb_pdb_tool.py +0 -86
  809. tooluniverse/test/test_reactome.py +0 -54
  810. tooluniverse/test/test_semantic_scholar_tool.py +0 -24
  811. tooluniverse/test/test_software_tools.py +0 -147
  812. tooluniverse/test/test_stdio_hooks.py +0 -285
  813. tooluniverse/test/test_tool_description_optimizer.py +0 -49
  814. tooluniverse/test/test_tool_finder.py +0 -26
  815. tooluniverse/test/test_tool_finder_llm.py +0 -252
  816. tooluniverse/test/test_tools_find.py +0 -195
  817. tooluniverse/test/test_uniprot_tools.py +0 -74
  818. tooluniverse/test/test_uspto_tool.py +0 -72
  819. tooluniverse/test/test_xml_tool.py +0 -113
  820. tooluniverse-1.0.6.dist-info/RECORD +0 -230
  821. {tooluniverse-1.0.6.dist-info → tooluniverse-1.0.7.dist-info}/WHEEL +0 -0
  822. {tooluniverse-1.0.6.dist-info → tooluniverse-1.0.7.dist-info}/licenses/LICENSE +0 -0
  823. {tooluniverse-1.0.6.dist-info → tooluniverse-1.0.7.dist-info}/top_level.txt +0 -0
@@ -63,4 +63,3 @@ class FatcatScholarTool(BaseTool):
63
63
  )
64
64
 
65
65
  return results
66
-
@@ -0,0 +1,198 @@
1
+ #!/usr/bin/env python3
2
+ """Minimal tools generator - one tool, one file."""
3
+
4
+ from pathlib import Path
5
+ from typing import Dict, Any
6
+
7
+
8
+ def json_type_to_python(json_type: str) -> str:
9
+ """Convert JSON type to Python type."""
10
+ return {
11
+ "string": "str",
12
+ "integer": "int",
13
+ "number": "float",
14
+ "boolean": "bool",
15
+ "array": "list[Any]",
16
+ "object": "dict[str, Any]",
17
+ }.get(json_type, "Any")
18
+
19
+
20
+ def generate_tool_file(tool_name: str, tool_config: Dict[str, Any], output_dir: Path):
21
+ """Generate one file for one tool."""
22
+ schema = tool_config.get("parameter", {}) or {}
23
+ description = tool_config.get("description", f"Execute {tool_name}")
24
+ # Wrap long descriptions
25
+ if len(description) > 100:
26
+ description = description[:97] + "..."
27
+ properties = schema.get("properties", {}) or {}
28
+ required = schema.get("required", []) or []
29
+
30
+ # Build parameters - required first, then optional
31
+ required_params = []
32
+ optional_params = []
33
+ kwargs = []
34
+ doc_params = []
35
+ mutable_defaults_code = []
36
+
37
+ for name, prop in properties.items():
38
+ py_type = json_type_to_python(prop.get("type", "string"))
39
+ desc = prop.get("description", "")
40
+
41
+ if name in required:
42
+ required_params.append(f"{name}: {py_type}")
43
+ else:
44
+ default = prop.get("default")
45
+ if default is not None:
46
+ # Handle mutable defaults to avoid B006 linting error
47
+ if isinstance(default, (list, dict)):
48
+ # Use None as default and handle in function body
49
+ optional_params.append(f"{name}: Optional[{py_type}] = None")
50
+ mutable_defaults_code.append(
51
+ f" if {name} is None:\n {name} = {repr(default)}"
52
+ )
53
+ else:
54
+ optional_params.append(
55
+ f"{name}: Optional[{py_type}] = {repr(default)}"
56
+ )
57
+ else:
58
+ optional_params.append(f"{name}: Optional[{py_type}] = None")
59
+
60
+ kwargs.append(f'"{name}": {name}')
61
+ # Wrap long descriptions
62
+ if len(desc) > 80:
63
+ desc = desc[:77] + "..."
64
+ doc_params.append(f" {name} : {py_type}\n {desc}")
65
+
66
+ # Combine required and optional parameters
67
+ params = required_params + optional_params
68
+
69
+ params_str = ",\n ".join(params) if params else ""
70
+ kwargs_str = ",\n ".join(kwargs) if kwargs else ""
71
+ doc_params_str = "\n".join(doc_params) if doc_params else " No parameters"
72
+ mutable_defaults_str = (
73
+ "\n".join(mutable_defaults_code) if mutable_defaults_code else ""
74
+ )
75
+
76
+ # Infer return type
77
+ return_schema = tool_config.get("return_schema", {})
78
+ return_type = (
79
+ json_type_to_python(return_schema.get("type", "")) if return_schema else "Any"
80
+ )
81
+
82
+ content = f'''"""
83
+ {tool_name}
84
+
85
+ {description}
86
+ """
87
+
88
+ from typing import Any, Optional, Callable
89
+ from ._shared_client import get_shared_client
90
+
91
+
92
+ def {tool_name}(
93
+ {params_str}{"," if params_str else ""}
94
+ *,
95
+ stream_callback: Optional[Callable[[str], None]] = None,
96
+ use_cache: bool = False,
97
+ validate: bool = True,
98
+ ) -> {return_type}:
99
+ """
100
+ {description}
101
+
102
+ Parameters
103
+ ----------
104
+ {doc_params_str}
105
+ stream_callback : Callable, optional
106
+ Callback for streaming output
107
+ use_cache : bool, default False
108
+ Enable caching
109
+ validate : bool, default True
110
+ Validate parameters
111
+
112
+ Returns
113
+ -------
114
+ {return_type}
115
+ """
116
+ # Handle mutable defaults to avoid B006 linting error
117
+ {mutable_defaults_str}
118
+ return get_shared_client().run_one_function(
119
+ {{
120
+ "name": "{tool_name}",
121
+ "arguments": {{
122
+ {kwargs_str}
123
+ }}
124
+ }},
125
+ stream_callback=stream_callback,
126
+ use_cache=use_cache,
127
+ validate=validate
128
+ )
129
+
130
+
131
+ __all__ = ["{tool_name}"]
132
+ '''
133
+
134
+ (output_dir / f"{tool_name}.py").write_text(content)
135
+
136
+
137
+ def generate_init(tool_names: list, output_dir: Path):
138
+ """Generate __init__.py with all imports."""
139
+ imports = [f"from .{name} import {name}" for name in sorted(tool_names)]
140
+
141
+ # Generate the content without f-string escape sequences
142
+ all_names = ",\n ".join(f'"{name}"' for name in sorted(tool_names))
143
+ content = f'''"""
144
+ ToolUniverse Tools
145
+
146
+ Type-safe Python interface to {len(tool_names)} scientific tools.
147
+ Each tool is in its own module for minimal import overhead.
148
+
149
+ Usage:
150
+ from tooluniverse.tools import ArXiv_search_papers
151
+ result = ArXiv_search_papers(query="machine learning")
152
+ """
153
+
154
+ # Import exceptions from main package
155
+ from tooluniverse.exceptions import *
156
+
157
+ # Import shared client utilities
158
+ from ._shared_client import get_shared_client, reset_shared_client
159
+
160
+ # Import all tools
161
+ {chr(10).join(imports)}
162
+
163
+ __all__ = [
164
+ "get_shared_client",
165
+ "reset_shared_client",
166
+ {all_names}
167
+ ]
168
+ '''
169
+
170
+ (output_dir / "__init__.py").write_text(content)
171
+
172
+
173
+ def main():
174
+ """Generate tools."""
175
+ from tooluniverse import ToolUniverse
176
+
177
+ print("🔧 Generating tools...")
178
+
179
+ tu = ToolUniverse()
180
+ tu.load_tools()
181
+
182
+ output = Path("src/tooluniverse/tools")
183
+ output.mkdir(parents=True, exist_ok=True)
184
+
185
+ # Generate all tools
186
+ for i, (tool_name, tool_config) in enumerate(tu.all_tool_dict.items(), 1):
187
+ generate_tool_file(tool_name, tool_config, output)
188
+ if i % 50 == 0:
189
+ print(f" Generated {i} tools...")
190
+
191
+ # Generate __init__.py
192
+ generate_init(list(tu.all_tool_dict.keys()), output)
193
+
194
+ print(f"✅ Generated {len(tu.all_tool_dict)} tools in {output}")
195
+
196
+
197
+ if __name__ == "__main__":
198
+ main()
tooluniverse/hal_tool.py CHANGED
@@ -51,7 +51,7 @@ class HALTool(BaseTool):
51
51
  docs = data.get("response", {}).get("docs", [])
52
52
  results = []
53
53
  for d in docs:
54
- title = (d.get("title_s") or [None])
54
+ title = d.get("title_s") or [None]
55
55
  if isinstance(title, list):
56
56
  title = title[0]
57
57
  authors = d.get("authFullName_s") or []
@@ -328,110 +328,6 @@ class AzureOpenAIClient(BaseLLMClient):
328
328
  self.logger.error("Max retries exceeded. Unable to complete the request.")
329
329
  return None
330
330
 
331
- def infer_stream(
332
- self,
333
- messages: List[Dict[str, str]],
334
- temperature: Optional[float],
335
- max_tokens: Optional[int],
336
- return_json: bool,
337
- custom_format: Any = None,
338
- max_retries: int = 5,
339
- retry_delay: int = 5,
340
- ):
341
- if return_json or custom_format is not None:
342
- yield from super().infer_stream(
343
- messages,
344
- temperature,
345
- max_tokens,
346
- return_json,
347
- custom_format,
348
- max_retries,
349
- retry_delay,
350
- )
351
- return
352
-
353
- retries = 0
354
- eff_max = (
355
- max_tokens
356
- if max_tokens is not None
357
- else self._resolve_default_max_tokens(self.model_name)
358
- )
359
-
360
- while retries < max_retries:
361
- try:
362
- kwargs: Dict[str, Any] = {
363
- "model": self.model_name,
364
- "messages": messages,
365
- "stream": True,
366
- }
367
- if temperature is not None:
368
- kwargs["temperature"] = temperature
369
- if eff_max is not None:
370
- kwargs["max_tokens"] = eff_max
371
-
372
- stream = self.client.chat.completions.create(**kwargs)
373
- for chunk in stream:
374
- text = AzureOpenAIClient._extract_text_from_chunk(chunk) # type: ignore[attr-defined]
375
- if text:
376
- yield text
377
- return
378
- except self._openai.RateLimitError: # type: ignore[attr-defined]
379
- self.logger.warning(
380
- f"OpenRouter streaming rate limit hit. Retrying in {retry_delay} seconds..."
381
- )
382
- retries += 1
383
- time.sleep(retry_delay * retries)
384
- except Exception as e: # noqa: BLE001
385
- self.logger.error(f"OpenRouter streaming error: {e}")
386
- break
387
-
388
- yield from super().infer_stream(
389
- messages,
390
- temperature,
391
- max_tokens,
392
- return_json,
393
- custom_format,
394
- max_retries,
395
- retry_delay,
396
- )
397
-
398
- @staticmethod
399
- def _extract_text_from_chunk(chunk) -> Optional[str]:
400
- try:
401
- choices = getattr(chunk, "choices", None)
402
- except Exception:
403
- choices = None
404
- if not choices:
405
- return None
406
-
407
- first_choice = choices[0]
408
- delta = getattr(first_choice, "delta", None)
409
- if delta is None and isinstance(first_choice, dict):
410
- delta = first_choice.get("delta")
411
- if delta is None:
412
- return None
413
-
414
- content = getattr(delta, "content", None)
415
- if content is None and isinstance(delta, dict):
416
- content = delta.get("content")
417
- if not content:
418
- return None
419
-
420
- if isinstance(content, str):
421
- return content
422
-
423
- if isinstance(content, list):
424
- fragments: List[str] = []
425
- for item in content:
426
- text = getattr(item, "text", None)
427
- if text is None and isinstance(item, dict):
428
- text = item.get("text")
429
- if text:
430
- fragments.append(text)
431
- return "".join(fragments) if fragments else None
432
-
433
- return None
434
-
435
331
  def infer_stream(
436
332
  self,
437
333
  messages: List[Dict[str, str]],
@@ -663,11 +559,14 @@ class OpenRouterClient(BaseLLMClient):
663
559
 
664
560
  # Default model limits based on latest OpenRouter offerings
665
561
  DEFAULT_MODEL_LIMITS: Dict[str, Dict[str, int]] = {
666
- "openai/gpt-5": {"max_output": 128_000, "context_window": 400_000},
562
+ "openai/gpt-5": {"max_output": 128_000, "context_window": 400_000},
667
563
  "openai/gpt-5-codex": {"max_output": 128_000, "context_window": 400_000},
668
564
  "google/gemini-2.5-flash": {"max_output": 65_536, "context_window": 1_000_000},
669
565
  "google/gemini-2.5-pro": {"max_output": 65_536, "context_window": 1_000_000},
670
- "anthropic/claude-sonnet-4.5": {"max_output": 16_384, "context_window": 1_000_000},
566
+ "anthropic/claude-sonnet-4.5": {
567
+ "max_output": 16_384,
568
+ "context_window": 1_000_000,
569
+ },
671
570
  }
672
571
 
673
572
  def __init__(self, model_id: str, logger):
@@ -676,7 +575,7 @@ class OpenRouterClient(BaseLLMClient):
676
575
  import openai as _openai # type: ignore
677
576
  except Exception as e: # pragma: no cover
678
577
  raise RuntimeError("openai client is not available") from e
679
-
578
+
680
579
  self._OpenAI = _OpenAI
681
580
  self._openai = _openai
682
581
  self.model_name = model_id
@@ -685,14 +584,14 @@ class OpenRouterClient(BaseLLMClient):
685
584
  api_key = os.getenv("OPENROUTER_API_KEY")
686
585
  if not api_key:
687
586
  raise ValueError("OPENROUTER_API_KEY not set")
688
-
587
+
689
588
  # Optional headers for OpenRouter
690
589
  default_headers = {}
691
590
  if site_url := os.getenv("OPENROUTER_SITE_URL"):
692
591
  default_headers["HTTP-Referer"] = site_url
693
592
  if site_name := os.getenv("OPENROUTER_SITE_NAME"):
694
593
  default_headers["X-Title"] = site_name
695
-
594
+
696
595
  self.client = self._OpenAI(
697
596
  base_url="https://openrouter.ai/api/v1",
698
597
  api_key=api_key,
@@ -731,13 +630,13 @@ class OpenRouterClient(BaseLLMClient):
731
630
  mapping = _json.loads(mapping_raw)
732
631
  except Exception:
733
632
  mapping = {}
734
-
633
+
735
634
  if model_id in mapping:
736
635
  try:
737
636
  return int(mapping[model_id])
738
637
  except Exception:
739
638
  pass
740
-
639
+
741
640
  # Check for prefix match
742
641
  for k, v in mapping.items():
743
642
  try:
@@ -745,11 +644,11 @@ class OpenRouterClient(BaseLLMClient):
745
644
  return int(v)
746
645
  except Exception:
747
646
  continue
748
-
647
+
749
648
  # Next: built-in/default-limits map
750
649
  if model_id in self._default_limits:
751
650
  return int(self._default_limits[model_id].get("max_output", 0)) or None
752
-
651
+
753
652
  # Check for prefix match in default limits
754
653
  for k, v in self._default_limits.items():
755
654
  try:
@@ -757,7 +656,7 @@ class OpenRouterClient(BaseLLMClient):
757
656
  return int(v.get("max_output", 0)) or None
758
657
  except Exception:
759
658
  continue
760
-
659
+
761
660
  return None
762
661
 
763
662
  def test_api(self) -> None:
@@ -765,7 +664,7 @@ class OpenRouterClient(BaseLLMClient):
765
664
  test_messages = [{"role": "user", "content": "ping"}]
766
665
  token_attempts = [1, 4, 16, 32]
767
666
  last_error: Optional[Exception] = None
768
-
667
+
769
668
  for tok in token_attempts:
770
669
  try:
771
670
  self.client.chat.completions.create(
@@ -785,7 +684,7 @@ class OpenRouterClient(BaseLLMClient):
785
684
  ) and tok != token_attempts[-1]:
786
685
  continue
787
686
  break
788
-
687
+
789
688
  if last_error:
790
689
  raise ValueError(f"OpenRouter API test failed: {last_error}")
791
690
  raise ValueError("OpenRouter API test failed: unknown error")
@@ -807,39 +706,39 @@ class OpenRouterClient(BaseLLMClient):
807
706
  if custom_format is not None
808
707
  else self.client.chat.completions.create
809
708
  )
810
-
709
+
811
710
  response_format = (
812
711
  custom_format
813
712
  if custom_format is not None
814
713
  else ({"type": "json_object"} if return_json else None)
815
714
  )
816
-
715
+
817
716
  eff_max = (
818
717
  max_tokens
819
718
  if max_tokens is not None
820
719
  else self._resolve_default_max_tokens(self.model_name)
821
720
  )
822
-
721
+
823
722
  while retries < max_retries:
824
723
  try:
825
724
  kwargs: Dict[str, Any] = {
826
725
  "model": self.model_name,
827
726
  "messages": messages,
828
727
  }
829
-
728
+
830
729
  if response_format is not None:
831
730
  kwargs["response_format"] = response_format
832
731
  if temperature is not None:
833
732
  kwargs["temperature"] = temperature
834
733
  if eff_max is not None:
835
734
  kwargs["max_tokens"] = eff_max
836
-
735
+
837
736
  resp = call_fn(**kwargs)
838
-
737
+
839
738
  if custom_format is not None:
840
739
  return resp.choices[0].message.parsed.model_dump()
841
740
  return resp.choices[0].message.content
842
-
741
+
843
742
  except self._openai.RateLimitError: # type: ignore[attr-defined]
844
743
  self.logger.warning(
845
744
  f"Rate limit exceeded. Retrying in {retry_delay} seconds..."
@@ -849,8 +748,86 @@ class OpenRouterClient(BaseLLMClient):
849
748
  except Exception as e: # noqa: BLE001
850
749
  self.logger.error(f"OpenRouter error: {e}")
851
750
  import traceback
751
+
852
752
  traceback.print_exc()
853
753
  break
854
-
754
+
855
755
  self.logger.error("Max retries exceeded. Unable to complete the request.")
856
756
  return None
757
+
758
+
759
+ class VLLMClient(BaseLLMClient):
760
+ def __init__(self, model_name: str, server_url: str, logger):
761
+ try:
762
+ from openai import OpenAI
763
+ except Exception as e:
764
+ raise RuntimeError("openai package not available for vLLM client") from e
765
+
766
+ if not server_url:
767
+ raise ValueError("VLLM_SERVER_URL must be provided")
768
+
769
+ self.model_name = model_name
770
+ # Ensure server_url ends with /v1 for OpenAI-compatible API
771
+ if not server_url.endswith("/v1"):
772
+ server_url = server_url.rstrip("/") + "/v1"
773
+ self.server_url = server_url
774
+ self.logger = logger
775
+
776
+ self.client = OpenAI(
777
+ api_key="EMPTY",
778
+ base_url=self.server_url,
779
+ )
780
+
781
+ def test_api(self) -> None:
782
+ test_messages = [{"role": "user", "content": "ping"}]
783
+ try:
784
+ self.client.chat.completions.create(
785
+ model=self.model_name,
786
+ messages=test_messages,
787
+ max_tokens=8,
788
+ temperature=0,
789
+ )
790
+ except Exception as e:
791
+ raise ValueError(f"vLLM API test failed: {e}")
792
+
793
+ def infer(
794
+ self,
795
+ messages: List[Dict[str, str]],
796
+ temperature: Optional[float],
797
+ max_tokens: Optional[int],
798
+ return_json: bool,
799
+ custom_format: Any = None,
800
+ max_retries: int = 5,
801
+ retry_delay: int = 5,
802
+ ) -> Optional[str]:
803
+ if custom_format is not None:
804
+ self.logger.warning("vLLM does not support custom format, ignoring")
805
+
806
+ retries = 0
807
+ while retries < max_retries:
808
+ try:
809
+ kwargs: Dict[str, Any] = {
810
+ "model": self.model_name,
811
+ "messages": messages,
812
+ }
813
+
814
+ if temperature is not None:
815
+ kwargs["temperature"] = temperature
816
+
817
+ if max_tokens is not None:
818
+ kwargs["max_tokens"] = max_tokens
819
+
820
+ if return_json:
821
+ kwargs["response_format"] = {"type": "json_object"}
822
+
823
+ resp = self.client.chat.completions.create(**kwargs)
824
+ return resp.choices[0].message.content
825
+
826
+ except Exception as e:
827
+ self.logger.error(f"vLLM error: {e}")
828
+ retries += 1
829
+ if retries < max_retries:
830
+ time.sleep(retry_delay * retries)
831
+
832
+ self.logger.error("Max retries exceeded for vLLM request")
833
+ return None
@@ -348,7 +348,10 @@ def _start_server_for_port(port: int, **kwargs):
348
348
  try:
349
349
  # Enable stateless mode for MCPAutoLoaderTool compatibility
350
350
  server.run_simple(
351
- transport=config["transport"], host=config["host"], port=port, stateless_http=True
351
+ transport=config["transport"],
352
+ host=config["host"],
353
+ port=port,
354
+ stateless_http=True,
352
355
  )
353
356
  except Exception as e:
354
357
  print(f"❌ Error running MCP server on port {port}: {e}")
@@ -34,13 +34,15 @@ class MedRxivTool(BaseTool):
34
34
  # Format: /medrxiv/{start_date}/{end_date}/{cursor}/json
35
35
  from datetime import datetime, timedelta
36
36
 
37
- # Search last 30 days
37
+ # Search last 365 days to get more comprehensive results
38
38
  end_date = datetime.now()
39
- start_date = end_date - timedelta(days=30)
39
+ start_date = end_date - timedelta(days=365)
40
40
 
41
- url = (f"{self.base_url}/medrxiv/"
42
- f"{start_date.strftime('%Y-%m-%d')}/"
43
- f"{end_date.strftime('%Y-%m-%d')}/0/json")
41
+ url = (
42
+ f"{self.base_url}/medrxiv/"
43
+ f"{start_date.strftime('%Y-%m-%d')}/"
44
+ f"{end_date.strftime('%Y-%m-%d')}/0/json"
45
+ )
44
46
 
45
47
  try:
46
48
  resp = requests.get(url, timeout=20)
@@ -78,19 +80,36 @@ class MedRxivTool(BaseTool):
78
80
  doi = item.get("doi")
79
81
  url = f"https://www.medrxiv.org/content/{doi}" if doi else None
80
82
 
81
- # Filter by query if provided
82
- if query and query.lower() not in (title or "").lower():
83
- continue
83
+ # Filter by query if provided - search in both title and abstract
84
+ if query:
85
+ title_match = query.lower() in (title or "").lower()
86
+ abstract_match = (
87
+ query.lower() in (item.get("abstract", "") or "").lower()
88
+ )
89
+ if not (title_match or abstract_match):
90
+ continue
84
91
 
85
92
  results.append(
86
93
  {
87
- "title": title,
88
- "authors": authors,
94
+ "title": title or "Title not available",
95
+ "authors": (
96
+ authors if authors else "Author information not available"
97
+ ),
89
98
  "year": year,
90
- "doi": doi,
91
- "url": url,
92
- "abstract": item.get("abstract", ""),
99
+ "doi": doi or "DOI not available",
100
+ "url": url or "URL not available",
101
+ "abstract": item.get("abstract", "Abstract not available"),
93
102
  "source": "medRxiv",
103
+ "data_quality": {
104
+ "has_abstract": bool(
105
+ item.get("abstract")
106
+ and item.get("abstract") != "Abstract not available"
107
+ ),
108
+ "has_authors": bool(authors),
109
+ "has_year": bool(year),
110
+ "has_doi": bool(doi),
111
+ "has_url": bool(url),
112
+ },
94
113
  }
95
114
  )
96
115