Reliable tool-calling agents on local SLMs. Hybrid REWOO/ReAct architecture, MCP support, one-command export. No API keys, no cloud.
Project description
OnsetLab
Tool-calling AI agents that run locally.
Quick Start · Architecture · MCP Servers · CLI · Models · Docs
Local models are fast, free, and private. But ask one to call a tool and it falls apart. Wrong function names, broken parameters, infinite loops.
The models are capable. The framework wasn't.
OnsetLab makes 3B-7B models do reliable tool calling through a hybrid REWOO/ReAct architecture. The framework handles planning, execution, and error recovery. The model only does what it's good at: one step at a time.
Quick Start
pip install onsetlab
Requires Ollama running locally with a model pulled:
ollama pull phi3.5
from onsetlab import Agent
from onsetlab.tools import Calculator, DateTime
agent = Agent("phi3.5", tools=[Calculator(), DateTime()])
result = agent.run("What's 15% tip on $84.50?")
print(result.answer)
The agent routes the query, builds an execution plan, calls the right tool, and returns the answer. No prompt engineering required.
Architecture
The Router classifies queries as tool-needed or direct-answer using the model itself. The Planner generates structured THINK -> PLAN steps with auto-generated tool rules from JSON schemas. The Executor resolves dependencies and runs tools in order. If planning fails, the ReAct Fallback switches to iterative Thought -> Action -> Observation loops to recover.
Built-in Tools
| Tool | Description |
|---|---|
Calculator |
Math expressions, percentages, sqrt/sin/log |
DateTime |
Current time, timezones, date math, day of week |
UnitConverter |
Length, weight, temperature, volume, speed, data |
TextProcessor |
Word count, find/replace, case transforms, pattern extraction |
RandomGenerator |
Random numbers, UUIDs, passwords, dice rolls, coin flips |
More tools will be added over time.
MCP Servers
Connect any MCP-compatible server to give your agent access to external tools like GitHub, Slack, Notion, and more.
from onsetlab import Agent, MCPServer
server = MCPServer.from_registry("filesystem", extra_args=["/path/to/dir"])
agent = Agent("phi3.5")
agent.add_mcp_server(server)
result = agent.run("List all Python files in the directory")
print(result.answer)
agent.disconnect_mcp_servers()
Any MCP server available via npm works too. See the docs for examples.
Built-in registry: filesystem · github · slack · notion · google_calendar · tavily
CLI
python -m onsetlab # interactive chat
python -m onsetlab --model qwen2.5:7b # specify model
python -m onsetlab benchmark --model phi3.5 --verbose # validate a model
python -m onsetlab benchmark --compare phi3.5,qwen2.5:7b # compare models
python -m onsetlab export --format docker -o ./my-agent # export as Docker
python -m onsetlab export --format config -o agent.yaml # export as YAML
Export formats: YAML (portable config), Docker (Dockerfile + compose + Ollama), vLLM (GPU-accelerated), Script (standalone .py file). See Export & Deploy docs for details.
Tested Models
| Model | Size | RAM | Notes |
|---|---|---|---|
phi3.5 |
3.8B | 4GB+ | Default. Good balance of speed and quality |
qwen2.5:3b |
3B | 4GB+ | Fast, good for simple tasks |
qwen2.5:7b |
7B | 8GB+ | Strong tool calling |
qwen3-a3b |
MoE, 3B active | 16GB+ | Best tool calling accuracy |
llama3.2:3b |
3B | 4GB+ | General purpose |
Works with any Ollama model. Run python -m onsetlab benchmark --model your-model to verify.
Website · Playground · Documentation · PyPI
Apache 2.0
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 onsetlab-0.2.2.tar.gz.
File metadata
- Download URL: onsetlab-0.2.2.tar.gz
- Upload date:
- Size: 69.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
809100105f22c272df05cb76deeb307a7d25219040c2bde49529ad5feb3ccd99
|
|
| MD5 |
d15ce470507281391b09f37c2bff75f1
|
|
| BLAKE2b-256 |
a3853b3293a06df68245d686b179427ff76cb3d0692316cb52f26031ab87bca2
|
File details
Details for the file onsetlab-0.2.2-py3-none-any.whl.
File metadata
- Download URL: onsetlab-0.2.2-py3-none-any.whl
- Upload date:
- Size: 83.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66134ac90ee2d4ad38b82d6826a273af6ef1dee45e2723e9ceb16d86b24b7146
|
|
| MD5 |
6deb91b1486d82856bc1a5d9979f8ac5
|
|
| BLAKE2b-256 |
c03499b0df65e2192f8b242130516386015cf88e410294bae300f9c8fab4aaff
|