Reliability oracle for AI agents — pick the right tool from the start
Project description
ToolRate Python SDK
Python client for the ToolRate API — the reliability oracle for AI agents.
Installation
Recommended (modern & fastest):
# Install uv (one-time)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Add ToolRate to your project
uv add toolrate
Alternative (without uv):
python3 -m venv .venv
source .venv/bin/activate
pip install toolrate
Note: If you see a
PEP 668"externally-managed-environment" error with plainpip, that is because of Homebrew Python. Use one of the methods above instead.
Using poetry, pdm, or rye? poetry add toolrate (or pdm add, rye add) works too.
Quick start — one line of code
The guard function wraps any tool call with automatic reliability checking:
from toolrate import ToolRate, guard
client = ToolRate(api_key="nf_live_...")
# Wrap any tool call — assesses before, reports after, automatically
result = guard(client, "https://api.openai.com/v1/chat/completions",
lambda: openai.chat.completions.create(model="gpt-4", messages=[...]))
That's it. ToolRate will:
- Check the tool's reliability score before calling
- Execute the tool call
- Report success/failure back (building the data moat)
- Classify errors automatically
Auto-fallback
When a tool fails, automatically try alternatives:
result = guard(
client,
"https://api.openai.com/v1/chat/completions",
lambda: openai.chat.completions.create(model="gpt-4", messages=msgs),
fallbacks=[
("https://api.anthropic.com/v1/messages",
lambda: anthropic.messages.create(model="claude-sonnet-4-20250514", messages=msgs)),
("https://api.groq.com/openai/v1/chat/completions",
lambda: groq.chat.completions.create(model="llama-3.3-70b", messages=msgs)),
],
min_score=50, # Skip tools scoring below 50
)
Decorator
from toolrate import ToolRate, toolrate_guard
client = ToolRate(api_key="nf_live_...")
@toolrate_guard(client, "https://api.stripe.com/v1/charges")
def charge_customer(amount, currency):
return stripe.Charge.create(amount=amount, currency=currency)
# Every call is now automatically assessed + reported
charge_customer(1000, "usd")
Journey tracking
Report fallback patterns to power hidden gem discovery:
# First attempt fails
client.report("https://api.sendgrid.com/v3/mail/send",
success=False, error_category="rate_limit",
session_id="session-123", attempt_number=1)
# Fallback succeeds
client.report("https://api.resend.com/emails",
success=True, latency_ms=180,
session_id="session-123", attempt_number=2,
previous_tool="https://api.sendgrid.com/v3/mail/send")
Discovery
Find hidden gems and fallback chains based on real agent behavior:
# Tools that shine as fallbacks
gems = client.discover_hidden_gems(category="email")
# What to try when SendGrid fails
chain = client.discover_fallback_chain("https://api.sendgrid.com/v3/mail/send")
Direct API usage
from toolrate import ToolRate
client = ToolRate(api_key="nf_live_...")
# Assess
result = client.assess("https://api.openai.com/v1/chat/completions",
context="customer support chatbot")
print(result["reliability_score"]) # 89.0
print(result["predicted_failure_risk"]) # "low"
print(result["common_pitfalls"]) # ["timeout (8% of failures)"]
print(result["top_alternatives"]) # [{"tool": "...", "score": 90}]
# Report
client.report("https://api.openai.com/v1/chat/completions",
success=True, latency_ms=2500)
client.close()
Async support
AsyncToolRate has the same interface — all methods are async.
from toolrate import AsyncToolRate
async with AsyncToolRate(api_key="nf_live_...") as client:
result = await client.assess("https://api.openai.com/v1/chat/completions")
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file toolrate-0.4.0.tar.gz.
File metadata
- Download URL: toolrate-0.4.0.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30a5131fed65996ad1f0d286795d9606a40e9c5959b7e4c528c3db8f9ac40fc3
|
|
| MD5 |
31a822e6c6a9af426cf27ac7015d0dae
|
|
| BLAKE2b-256 |
72fc7af9d7188b95054880fc0c016852839d6d0b45885dbb291ff2f830dbc7e1
|
File details
Details for the file toolrate-0.4.0-py3-none-any.whl.
File metadata
- Download URL: toolrate-0.4.0-py3-none-any.whl
- Upload date:
- Size: 10.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17f847945627c26b77bd065cc05584f1b916eb375ab82d33a26a5e973998f6c7
|
|
| MD5 |
9dd6d2452d1ddba533c1892f713ab9a7
|
|
| BLAKE2b-256 |
666647310bfe76643309f99461eac72af3ac5128523679f870300874587c8ac3
|