Skip to main content

wovyr-sdk

A Python client for the Wovyr AI Platform HTTP API, hand-written from the actual wovyr-server routes (see docs/09-api/openapi.yaml for the full contract) — the same source sdks/typescript was generated from, so the two clients cover identical ground.

Zero runtime dependencies: the HTTP layer is built on urllib from the standard library rather than requests/httpx, so there's nothing to install to use it.

Install

Published as wovyr-sdk on PyPI:

pip install wovyr-sdk

Usage

from wovyr_sdk import WovyrClient

client = WovyrClient(
    "http://127.0.0.1:8080",
    tenant="acme",       # optional, defaults to the server's "default" tenant
    principal="alice",   # optional
)

result = client.agents.run({"manifest": my_agent_yaml, "input": {"message": "Hi"}})
print(result["output"]["message"])

# Streaming:
for frame in client.agents.stream({"manifest": my_agent_yaml, "input": {}}):
    if frame["type"] == "delta":
        print(frame["text"], end="")
    if frame["type"] == "result":
        print("\ndone:", frame["output"]["message"])

Every resource is namespaced on the client: client.agents, client.workflows, client.memory, client.plugins, client.marketplace, client.secrets, client.organizations, client.projects, client.webhooks, client.audit, client.tools.

Errors are raised as WovyrApiError (.status, .code, .request_id, .body) mapping the server's {error: {...}} envelope.

Pagination: every list method returns a Page dict (data/has_more/ next_cursor/total_estimate); paginate_all drains every page:

from wovyr_sdk import paginate_all

for agent_id in paginate_all(client.agents.list, limit=25):
    ...

Development

No package manager is required to run this SDK — it's stdlib-only. To run the tests:

cargo run -p wovyr-cli -- dev --addr 127.0.0.1:8080 &
python3 -m unittest discover -s tests -v

Tests are integration tests against a real, locally running server (skip cleanly, not failing, if WOVYR_TEST_BASE_URL — default http://127.0.0.1:8080 — is unreachable), plus a handful of unit tests for the retry/backoff logic against a fake opener (no socket).

One test (test_projects_create_with_stale_if_match_is_rejected) exercises organization/project creation, which — unlike agents/workflows/memory — has no anonymous-default-tenant back-compat bypass; it needs a real org.admin role. Start the server with WOVYR_PLATFORM_ADMINS=sdk-test-admin for that test to run instead of skip.

Asyncio

For asyncio programs, wovyr_sdk.aio.AsyncWovyrClient exposes the same resource surface with every method awaitable (the sync transport runs in a worker thread, so the event loop never blocks; streaming yields frames as they arrive):

from wovyr_sdk.aio import AsyncWovyrClient

client = AsyncWovyrClient("http://127.0.0.1:8080")
result = await client.agents.run({"manifest": my_agent_yaml, "input": {"message": "Hi"}})
final = await client.workflows.wait_for_completion(execution_id)
async for frame in client.agents.stream({"manifest": my_agent_yaml}):
    ...

Retries, polling, versions

  • GET requests retry transient failures (429/502/503/504, network errors) with exponential backoff — configurable via retry=RetryOptions(...).
  • Mutations retry only when keyed: pass idempotency_key= and the same retry policy applies — the server's replay middleware makes it safe. A keyless mutation never auto-retries (it could double-execute).
  • client.workflows.wait_for_completion(execution_id) polls to a terminal status and returns the final snapshot (WovyrTimeoutError on deadline) — no more hand-rolled poll loops.
  • Versioning: the SDK version tracks the platform release it targets (same major.minor = same API surface; see CHANGELOG.md). health() emits an WovyrVersionSkewWarning once per client if the server's major.minor differs.

Known gaps

  • No redocly-style contract test wired against openapi.yaml (the TypeScript SDK's npm test runs one; this package has no npm-equivalent tool available in this environment to wire the same check to).

Release files for wovyr-sdk 0.4.1

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

Source distribution (sdist)

Source distribution for wovyr-sdk 0.4.1
File Size Uploaded
wovyr_sdk-0.4.1.tar.gz 22.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wovyr-sdk 0.4.1
File Interpreter ABI Platform
wovyr_sdk-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 42.3 kB

Release files / wovyr_sdk-0.4.1.tar.gz

Download URL wovyr_sdk-0.4.1.tar.gz
Size 22.8 kB
Tags Source
SHA-256 checksum
How to use checksums
5d2ac0ffb3de9901ed8b625896e69d134428729447771fc4271a1214c90bdaa4
BLAKE2b-256 checksum
How to use checksums
0d49a4eb4321db3145b884a37409cd5f741a5697eebdb6b274e8c64989921959
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / wovyr_sdk-0.4.1-py3-none-any.whl

Download URL wovyr_sdk-0.4.1-py3-none-any.whl
Size 19.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f763013adc0e1e4d2327f7a6042de6c4d63293807d7b4b83e8dcaa8710e2d3f6
BLAKE2b-256 checksum
How to use checksums
323ecc1dc21a0c32f47c4ac32e9adf15a266bc8cbf42f5277a43fd6eeb57602a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files

0.3.2

2 release files

0.3.0

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