Build, deploy, and monetize AI agents
Project description
agentroute (Python SDK)
Build, deploy, and monetize AI agents. Phase 2 ships Agent with tools,
persistent memory, conversation-history policies, and structured output —
all against any OpenAI-compatible model (OpenRouter default, plus Ollama
and custom HTTP endpoints).
Install
pip install agentroute
Quick start
Layer 0 — three-line hello world
from agentroute import Agent
agent = Agent("my-bot", model="claude-sonnet-4")
print(agent.run("Tell me a joke"))
Set AGENTROUTE_API_KEY (or OPENROUTER_API_KEY) to an OpenRouter key.
One key works for every model string (claude-sonnet-4, gpt-4o,
gemini-2.0-flash, deepseek-v3, ...).
Layer 1 — add a tool
from agentroute import Agent
agent = Agent("weather-bot", model="claude-sonnet-4")
@agent.tool
def get_weather(city: str) -> str:
"""Get the current weather for a city."""
return "Sunny, 22C"
print(agent.run("What's the weather in Zurich?"))
Memory (conversation + facts)
from agentroute import Agent, Memory, MemorySQLite
# In-RAM (lost on restart):
agent = Agent("bot", model="claude-sonnet-4", memory=Memory())
# Persistent (SQLite + FTS5 search):
agent = Agent("bot", model="claude-sonnet-4", memory=MemorySQLite("agent.db"))
agent.run("remember my favorite color is blue")
agent.run("what is my favorite color?") # remembers across runs
History policies
from agentroute import Agent, MemorySQLite, HistorySlidingWindow
agent = Agent(
"bot",
model="claude-sonnet-4",
memory=MemorySQLite("agent.db"),
history=HistorySlidingWindow(20), # keep last 20 user-turn groups
)
Also available: HistoryTruncate(max_tokens=100_000) and
HistorySummarize(model=...).
Structured output
from agentroute import Agent, Retry
from pydantic import BaseModel
class WeatherReport(BaseModel):
city: str
temp_c: float
agent = Agent("bot", model="claude-sonnet-4", output=WeatherReport)
@agent.output_validator
def sanity(ctx, output: WeatherReport) -> WeatherReport:
if output.temp_c > 60:
raise Retry("Temperature unrealistic, reconsider.")
return output
result = agent.run("Weather in Zurich?")
print(result.output.city, result.output.temp_c)
Async
import asyncio
from agentroute import Agent
async def main() -> None:
agent = Agent("bot", model="claude-sonnet-4")
result = await agent.arun("hi")
print(result.output)
asyncio.run(main())
Local models (Ollama)
agent = Agent("local", model="ollama/llama3")
print(agent.run("hi"))
Development
cd packages/python
pip install -e '.[dev]'
pytest # unit tests (integration tests auto-skipped)
pytest -m integration # integration tests (mocked + live)
ruff check src tests
mypy src/agentroute
Phase 2 scope: Agent, Tool, Context, Result, Event, ModelCloud,
resolve_model(), Config, exceptions (ErrorAgent, ErrorMaxTurns,
ErrorBudget, Retry), Memory, MemorySQLite, HistorySlidingWindow,
HistorySummarize, HistoryTruncate, structured output with validators.
Multi-agent (Team/Company), guards, MCP, A2A, and deployment land in later phases.
Project details
Release history Release notifications | RSS feed
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 agentroute-1.1.0.tar.gz.
File metadata
- Download URL: agentroute-1.1.0.tar.gz
- Upload date:
- Size: 29.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da014e549bba1131e790ebe87f0ace16fcc071654821c3cd9fff7bf3670ab3ec
|
|
| MD5 |
7b88ff454192fc5c602d9b641fbde8b2
|
|
| BLAKE2b-256 |
097566bfee6020cc7f422bd8438e1e75237d4c31904a670e82109cf227a1b135
|
File details
Details for the file agentroute-1.1.0-py3-none-any.whl.
File metadata
- Download URL: agentroute-1.1.0-py3-none-any.whl
- Upload date:
- Size: 23.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
03d8e5dc4595b66d0d2e2f6fbc67f511863c7414fb95f5087f15b32f28b738b3
|
|
| MD5 |
5f3ede1b23e39134d97f407e1fa4666b
|
|
| BLAKE2b-256 |
d506817be93360691ca84f05b6dfac0af032be38f429094c06fcfebbc5358079
|