Metadata-Version: 2.4
Name: agentroute
Version: 1.1.0
Summary: Build, deploy, and monetize AI agents
Project-URL: Homepage, https://agentroute.ai
Project-URL: Documentation, https://docs.agentroute.ai
Project-URL: Repository, https://github.com/agentroute-ai/agentroute
Author-email: AgentRoute <hello@agentroute.ai>
License: MIT
Keywords: a2a,agents,ai,llm,marketplace,mcp
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.10
Requires-Dist: docstring-parser>=0.16
Requires-Dist: httpx>=0.27
Requires-Dist: pydantic>=2.6
Requires-Dist: typing-extensions>=4.10
Provides-Extra: dev
Requires-Dist: mypy>=1.8; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest-httpx>=0.30; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.3; extra == 'dev'
Description-Content-Type: text/markdown

# 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

```bash
pip install agentroute
```

## Quick start

### Layer 0 — three-line hello world

```python
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

```python
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)

```python
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

```python
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

```python
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

```python
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)

```python
agent = Agent("local", model="ollama/llama3")
print(agent.run("hi"))
```

## Development

```bash
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.
