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 (WovyrTimeoutErroron 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 anWovyrVersionSkewWarningonce per client if the server's major.minor differs.
Known gaps
- No
redocly-style contract test wired againstopenapi.yaml(the TypeScript SDK'snpm testruns one; this package has no npm-equivalent tool available in this environment to wire the same check to).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wovyr_sdk-0.3.2.tar.gz.
File metadata
- Download URL: wovyr_sdk-0.3.2.tar.gz
- Upload date:
- Size: 22.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c2e0e09addf1c040ce7b25e98be2d035424e3de2e6e2c7868cf15decc02521aa
|
|
| MD5 |
6c256e620d712587d964d7b477c78e4c
|
|
| BLAKE2b-256 |
5a57bb2589da96e640eab5d92b10ae2b60765d1f4888bf25539c299110fff4d7
|
File details
Details for the file wovyr_sdk-0.3.2-py3-none-any.whl.
File metadata
- Download URL: wovyr_sdk-0.3.2-py3-none-any.whl
- Upload date:
- Size: 19.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
036dad66aee6d93420df7b93afaf016751b7cd2c43d66f3029a5a51b4094d56a
|
|
| MD5 |
ab6fc9d3f0122acb5b8af8b6b43b5c19
|
|
| BLAKE2b-256 |
b2680eba126458b8eaf5b8c3fb4fc4b3a67e2cdb244748378d66cc5aa0c59fc7
|