3.9 KiB
3.9 KiB
Tool Execution in ToolUniverse
Overview
Execute individual tools through ToolUniverse's standardized interface using the run() method.
Basic Tool Execution
Standard Pattern
from tooluniverse import ToolUniverse
tu = ToolUniverse()
tu.load_tools()
# Execute a tool
result = tu.run({
"name": "tool_name_here",
"arguments": {
"param1": "value1",
"param2": "value2"
}
})
print(result)
Real-World Examples
Example 1: Disease-Target Associations (OpenTargets)
# Find targets associated with hypertension
result = tu.run({
"name": "OpenTargets_get_associated_targets_by_disease_efoId",
"arguments": {
"efoId": "EFO_0000537" # Hypertension
}
})
print(f"Found {len(result)} targets associated with hypertension")
Example 2: Protein Structure Prediction
# Get AlphaFold structure prediction
result = tu.run({
"name": "AlphaFold_get_structure",
"arguments": {
"uniprot_id": "P12345"
}
})
Example 3: Chemical Property Calculation
# Calculate molecular descriptors
result = tu.run({
"name": "RDKit_calculate_descriptors",
"arguments": {
"smiles": "CCO" # Ethanol
}
})
Example 4: Gene Expression Analysis
# Analyze differential gene expression
result = tu.run({
"name": "GeneExpression_differential_analysis",
"arguments": {
"dataset_id": "GSE12345",
"condition1": "control",
"condition2": "treatment"
}
})
Tool Execution Workflow
1. Discover the Tool
# Find relevant tools
tools = tu.run({
"name": "Tool_Finder_Keyword",
"arguments": {
"description": "pathway enrichment",
"limit": 5
}
})
# Review available tools
for tool in tools:
print(f"Name: {tool['name']}")
print(f"Description: {tool['description']}")
print(f"Parameters: {tool['parameters']}")
print("---")
2. Check Tool Parameters
# Get detailed tool information
tool_info = tu.get_tool_info("KEGG_pathway_enrichment")
print(tool_info['parameters'])
3. Execute with Proper Arguments
# Execute the tool
result = tu.run({
"name": "KEGG_pathway_enrichment",
"arguments": {
"gene_list": ["TP53", "BRCA1", "EGFR"],
"organism": "hsa" # Homo sapiens
}
})
Handling Tool Results
Check Result Type
result = tu.run({
"name": "some_tool",
"arguments": {"param": "value"}
})
# Results can be various types
if isinstance(result, dict):
print("Dictionary result")
elif isinstance(result, list):
print(f"List with {len(result)} items")
elif isinstance(result, str):
print("String result")
Process Results
# Example: Processing multiple results
results = tu.run({
"name": "PubMed_search",
"arguments": {
"query": "cancer immunotherapy",
"max_results": 10
}
})
for idx, paper in enumerate(results, 1):
print(f"{idx}. {paper['title']}")
print(f" PMID: {paper['pmid']}")
print(f" Authors: {', '.join(paper['authors'][:3])}")
print()
Error Handling
try:
result = tu.run({
"name": "some_tool",
"arguments": {"param": "value"}
})
except Exception as e:
print(f"Tool execution failed: {e}")
# Check if tool exists
# Verify parameter names and types
# Review tool documentation
Best Practices
- Verify Tool Parameters: Always check required parameters before execution
- Start Simple: Test with simple cases before complex workflows
- Handle Results Appropriately: Check result type and structure
- Error Recovery: Implement try-except blocks for production code
- Documentation: Review tool descriptions for parameter requirements and output formats
- Rate Limiting: Be aware of API rate limits for remote tools
- Data Validation: Validate input data format (e.g., SMILES, UniProt IDs, gene symbols)