Skip to main content

agent

Hanzo Agent SDK

hanzo-agent runs agents in Python. An agent is a model reached over an OpenAI-compatible /v1 API, its instructions, and the Python functions it may call as tools. It installs as hanzo-agent and imports as agents.

Install

Python 3.9 or newer.

pip install hanzo-agent

First agent

from openai import AsyncOpenAI
from agents import Agent, Runner, set_default_openai_api, set_default_openai_client

set_default_openai_client(AsyncOpenAI(base_url="http://localhost:11434/v1", api_key="ollama"))
set_default_openai_api("chat_completions")

agent = Agent(name="Assistant", instructions="You are a helpful assistant.", model="qwen3:0.6b")
result = Runner.run_sync(agent, "Write a haiku about recursion in programming.")
print(result.final_output)

One run printed:

Recursive function deferring calls,
A loop unrolled with grace,
Ends with a loop.

The two calls before the agent decide where it runs:

  • set_default_openai_client names the endpoint and the key. Above it is a local server on port 11434, Ollama with qwen3:0.6b pulled. For the hosted API pass base_url="https://api.hanzo.ai/v1", a Hanzo API key as api_key, and a model id from https://api.hanzo.ai/v1/models.
  • set_default_openai_api("chat_completions") sends POST /v1/chat/completions. Without it the SDK sends POST /v1/responses instead.

Tools

A decorated function becomes a tool the model can call:

from agents import function_tool

@function_tool
def get_weather(city: str) -> str:
    return f"The weather in {city} is sunny."

agent = Agent(
    name="Weather",
    instructions="Answer with the get_weather tool.",
    tools=[get_weather],
    model="qwen3:0.6b",
)
print(Runner.run_sync(agent, "What is the weather in Tokyo?").final_output)

With the setup above it printed The weather in Tokyo is sunny.

Errors and retries

Model calls go through the openai client and follow its rules. A 401, 402 or 403 raises on the first answer (AuthenticationError, APIStatusError, PermissionDeniedError). A 429 or 5xx is retried twice and then raises; AsyncOpenAI(..., max_retries=0) sends it once. A 200 whose body is an error object raises openai.APIError carrying the server's message, as the client does for an error inside a stream. A <think>…</think> block at the start of a reply is dropped from final_output and from the history the next turn sends; result.raw_responses keeps it.

Tracing

Runs create traces and spans and send them nowhere. To export them, add a processor:

from agents import add_trace_processor
from agents.tracing.processors import BackendSpanExporter, BatchTraceProcessor

exporter = BackendSpanExporter(endpoint="https://collector.example/ingest", api_key="...")
add_trace_processor(BatchTraceProcessor(exporter))

The exporter posts batches of JSON to that endpoint with the key as a bearer token. set_tracing_disabled(True) or OPENAI_AGENTS_DISABLE_TRACING=1 stops creating them.

Extras

pip install "hanzo-agent[web3]"   # agents.extensions.web3: AgentWallet, Web3Wallet, MpcClient
pip install "hanzo-agent[tee]"    # agents.extensions.tee: ConfidentialAgent, TEEProvider

agents.network routes a request among several agents and agents.orchestration runs workflows over registered agents; both are in the base package.

This repository

The root is also a Go module, github.com/hanzoai/agent, and sdk/ holds Python, TypeScript and Go clients published under other names. This README covers hanzo-agent only.

Development

make sync    # uv sync --all-extras --all-packages --group dev
make tests   # uv run pytest

Metadata

Release files for hanzo-agent 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hanzo-agent 0.1.2
File Size Uploaded
hanzo_agent-0.1.2.tar.gz 11.9 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for hanzo-agent 0.1.2
File Interpreter ABI Platform
hanzo_agent-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 12.0 MB

Release files / hanzo_agent-0.1.2.tar.gz

Download URL hanzo_agent-0.1.2.tar.gz
Size 11.9 MB
Tags Source
SHA-256 checksum
How to use checksums
68ba8df7bc6e8c8e2bd1b4d712114ec1413c84952da62641302fcedaad8fa950
BLAKE2b-256 checksum
How to use checksums
d1a8aa15a552b582b72795ec82f58febcabf4e8b0ea12f521fe2736d91d42603
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / hanzo_agent-0.1.2-py3-none-any.whl

Download URL hanzo_agent-0.1.2-py3-none-any.whl
Size 170.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0f668eb312bea23b40da5642480bf922a6603ae5d485af06cf67af5333304f83
BLAKE2b-256 checksum
How to use checksums
51e554b492d448098c236a18af9fa5a58e616cf920f3443dd9a67b9959ad4702
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page