mirror of
https://github.com/mims-harvard/ToolUniverse.git
synced 2026-09-19 07:31:47 +08:00
f790bd5aa6
Role-play testing across new personas (forensic genetics, pain-management
pharmacogenomics, livestock breeding genomics) surfaced several places where
a tool returns a plausible-looking wrong answer instead of a clear error,
which is worse than crashing outright because it looks like real data.
- ensembl_tool.py: EnsemblRESTTool auto-defaulted species=homo_sapiens into
query params even when routing a stable-ID lookup (/lookup/id/{gene_id}),
which doesn't need or want a species filter since stable IDs are already
species-specific. This silently broke every non-human Ensembl gene lookup
chained from a symbol resolver (confirmed with bovine DGAT1) with a
misleading "ID not found" error. Now only forwards species when the
caller explicitly supplied it.
- reactome_tool.py: Reactome's /data/mapping/ endpoints return HTTP 404
NOT_FOUND as their genuine "nothing found for this identifier" signal,
which the tool treated as a hard error instead of an empty result --
breaking pathway/reaction lookups for non-human protein orthologs that
simply have no directly curated Reactome entries.
- kegg_ext_tool.py: KEGG_get_gene_pathways silently returned an empty
pathway list, indistinguishable from a real negative, when gene_id was
passed as "org:SYMBOL" (e.g. "bta:DGAT1") rather than KEGG's numeric ID
form. Now resolves the symbol the same way the no-colon path already did.
- ncbi_datasets_tool.py: NCBIDatasets_get_gene_by_symbol returned a silent
empty success for taxon tokens NCBI itself flags as ambiguous (e.g.
"cattle" resolves above species level), with no way to tell that apart
from a genuine zero-match. Now surfaces NCBI's own warning message.
- faers_analytics_tool.py: FAERS_calculate_disproportionality's internal
count fetcher swallowed all exceptions -- including HTTP 429 rate limits
-- and returned 0, so a rate-limited window produced "Insufficient data:
a=0, b=0, c=0, d=0" for well-known drug/event pairs instead of surfacing
the real upstream failure.
- fda_drug_adverse_event_tools.json: documented that
FAERS_count_additive_adverse_reactions combines multiple medicinalproducts
with OR (union), not AND (co-occurrence) -- intentional aggregation
behavior, but easily misread as combination-risk counting since a sibling
tool uses AND semantics for the same-shaped input.
- pubmed_tools.json: documented that PubMed's esearch ANDs every keyword by
default, so a realistic multi-concept query silently returns 0 results
even when relevant literature exists (confirmed: an 11-word query returned
0 on PubMed but multiple relevant hits on EuropePMC for the same string).
- translate-id.md: the skill's own worked example used the wrong tool name
casing and parameter name, so following its instructions literally failed
immediately.
Checked all 9 other open round PRs (#478-486) for overlap before fixing;
skipped one duplicate (DrugBank interaction-list bloat, already covered by
round 13's PR #485). Every fix reproduced live against the real upstream
API, and re-verified after the change with no regressions (targeted
pytest: 103 passed; shipped test_examples for every touched tool still
pass).