mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
pip install hanzoai on 3.12 gets 8.5.156, which has no Client; on 3.9 to 3.11 it gets the 2.1 line, a different client. The README said neither. It showed KeysApi and MemoryApi, which the generated client does not have, and mapped hanzo-agent and hanzo-agents to copies here that PyPI does not publish. examples/agent and examples/tools imported AgentsApi and ToolsApi, which the document now names AgentApi and ToolApi. Both flows ran against a local server after the change. The per-agent runs read is generated without its ref, so the agent flow reads /v1/agent/runs and keeps its own rows. The status table and the Retry-After lines come from runs against a local server: a capability call is one request, two on a 401; a generated operation sleeps for Retry-After on 429 or 503 and retries three times. Co-authored-by: Hanzo Dev <[email protected]>
36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
"""tools — list the tools this key can reach.
|
|
|
|
``GET /v1/tool`` (operationId ``get_tool``), the catalog behind the
|
|
MCP surface: each entry is a tool name, its description and its input schema.
|
|
|
|
A note on the MCP endpoints, because it is easy to pick the wrong one. There is a
|
|
JSON-RPC endpoint at ``POST /v1/mcp`` that answers ``tools/list`` with the same
|
|
catalog — but it is NOT in the document, so the generator emits no method for it
|
|
and an example would have to bypass the SDK to call it, which defeats the point
|
|
of an SDK example. Of the MCP routes that ARE declared, ``/v1/automations/mcp``
|
|
404s at api.hanzo.ai. So this catalog read is the one that is both generated and
|
|
served. When ``/v1/mcp`` is added to the spec, this flow should move to it.
|
|
|
|
python -m examples.tools
|
|
"""
|
|
|
|
from hanzoai.cloud import ToolApi
|
|
|
|
from examples.client import client, run
|
|
|
|
|
|
def main() -> None:
|
|
with client() as api:
|
|
catalog = ToolApi(api).get_tool()
|
|
|
|
tools = catalog.tools or []
|
|
print(f"{len(tools)} tools")
|
|
for tool in tools[:20]:
|
|
print(f" {tool.name} — {tool.description or '(no description)'}")
|
|
if len(tools) > 20:
|
|
print(f" … and {len(tools) - 20} more")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
run(main)
|