Skip to main content

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.

License: Apache 2.0 Python 3.9+ PyPI Ollama

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

flowchart TD
    Q["Query"] --> R["Router"]

    R -->|"tools needed"| P["Planner"]
    R -->|"no tools"| D["Direct Answer"]

    P --> E["Executor"]
    E --> S["Solver"]

    P -. "plan fails" .-> RE["ReAct Fallback"]

    D --> A["Answer"]
    S --> A
    RE --> A

    style Q fill:#4a6670,stroke:#4a6670,color:#fff
    style R fill:#fff,stroke:#4a6670,color:#2d3b40
    style P fill:#e8f0fe,stroke:#7aa2f7,color:#3b5998
    style E fill:#e8f0fe,stroke:#7aa2f7,color:#3b5998
    style S fill:#e8f0fe,stroke:#7aa2f7,color:#3b5998
    style D fill:#edf7ef,stroke:#9ece6a,color:#2d6a2e
    style RE fill:#fdf4e7,stroke:#e0af68,color:#8a6914
    style A fill:#4a6670,stroke:#4a6670,color:#fff

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

onsetlab-0.2.0.tar.gz (69.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

onsetlab-0.2.0-py3-none-any.whl (83.2 kB view details)

Uploaded Python 3

File details

Details for the file onsetlab-0.2.0.tar.gz.

File metadata

  • Download URL: onsetlab-0.2.0.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

Hashes for onsetlab-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3574e9c85fba06576e303f8f41809ef9714a1ee84b6f8c43a3ec498a2365b658
MD5 e1a43e20952682cb3184b96b46ac17ac
BLAKE2b-256 e41e460e9e28b80bb5b4252194efaee2f6fb2b76c6020c329b17f5d3148dd5f6

See more details on using hashes here.

File details

Details for the file onsetlab-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: onsetlab-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 83.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.0

File hashes

Hashes for onsetlab-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2467852139ce7aad1b75cbe6bdfe189532e84d0c0d3fab8038aa27996646fcdd
MD5 f35f75c08b1f2f5a59915793f0c4f41b
BLAKE2b-256 f3a74d950d8bf1d25d15765cfea4334ddbc75134f449958c47450ba81481df8f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page