Avo¶
Provider-agnostic reliability runtime for bounded, observable, resumable, replayable AI agent loops.
Bounded. Resumable. Provider-agnostic. Honest about why it stopped.
Alpha status
0.1 is an alpha foundation. Suitable for evaluation, deterministic tests, and local prototypes; not production-ready.
Install¶
Requires Python 3.11+. Core runtime depends only on Pydantic.
git clone https://github.com/Fqih/avo.git
cd avo
python -m pip install -e ".[dev,providers,sandbox]"
Optional extras¶
| Extra | Adds | When you need it |
|---|---|---|
[dev] |
pytest, mypy, ruff, coverage | Local dev + tests |
[providers] |
httpx | Talking to MiniMax, Anthropic, OpenAI endpoints |
[sandbox] |
docker-py | Using run_shell against a real Docker daemon |
[otel] |
opentelemetry-api, sdk, otlp exporter | Emitting gen_ai.* spans for a run |
[langchain] |
langchain-core | Wrapping avo providers in LangChain pipelines |
[mcp] |
mcp SDK | Authoring MCP servers or non-stdio transports |
[live-benchmark] |
httpx, matplotlib | Running python benchmark/run_benchmark.py |
Verify the install:
Prints resolved provider / model / endpoint without an HTTP call — cheapest smoke test.
What Avo gives you¶
- Deterministic agent loop — strict
StopReasontaxonomy, finiteAgentStatetransitions, replayable event log. - Provider-agnostic — Anthropic, OpenAI-compatible, Groq, Cerebras, Ollama, MiniMax; bring your own.
- Resilience — bounded retry with exponential backoff, three-state circuit breaker, request-level circuit trip on sustained upstream failure.
- Sandbox — Docker-as-a-service shell tool with ephemeral containers,
default
network_mode="none", workspace-bounded file tools. - Approval gates — per-tool approval callbacks driven by
AVO_TOOLS_REQUIRE_APPROVAL. - Resumability — append-only SQLite event log with checkpoint snapshots. Crash mid-turn, resume from the last durable state.
- Observability — OpenTelemetry
gen_ai.*spans per turn, structured JSON logs, cost tracking with USD estimator, audit log with deep secret redaction. - Plugins — entry-point groups for tools, providers, and notifiers.
Scaffold one with
avo plugin init. - Optional integrations — LangChain bridge, OpenTelemetry, MCP.
Quickstart¶
import asyncio
from avo import AgentRuntime, LoopPolicy, ModelRequest, FakeProvider
async def main() -> None:
provider = FakeProvider()
policy = LoopPolicy()
runtime = AgentRuntime(provider=provider, policy=policy)
request = ModelRequest(
run_id="hello-1",
step=1,
messages=[{"role": "user", "content": "Say hello"}],
tools=[],
)
response = await runtime.run(request)
print(response.content)
asyncio.run(main())
Repository layout¶
src/avo/ # runtime, providers, tools, integrations
tests/ # offline-by-default suite, 880+ tests
benchmark/ # cross-provider benchmark harness
docs/ # this documentation site