The Python client for the Pipelex hosted API — the MTHDS Protocol surface plus the durable run lifecycle and the Pipelex product surface, built on the `mthds` protocol base.
Project description
pipelex-sdk
The Python client for the Pipelex hosted API.
pipelex-sdk is the Python counterpart of @pipelex/sdk, exactly as mthds (the mthds-python package) is the Python counterpart of the mthds npm package. It is the hosted superset: the five normative MTHDS Protocol routes (inherited from mthds) plus the durable run lifecycle plus the Pipelex product surface (methods, organizations, billing, API keys, onboarding, storage, run records).
One-way dependency: pipelex-sdk → mthds.
Install
pip install pipelex-sdk
Configuration
The API key resolves, in order: explicit api_key argument → PIPELEX_API_KEY → anonymous. The token is optional — anonymous access works against the protocol routes (e.g. a local bare runner); the product routes return 401.
The base URL resolves, in order: explicit base_url argument → PIPELEX_BASE_URL → the hosted default https://api.pipelex.com. The base URL is host-only (no path/query/fragment); every endpoint composes as {base}/v1/{endpoint}.
The SDK never reads the mthds resolver (MTHDS_API_KEY / MTHDS_BASE_URL / ~/.mthds/config) — those settings configure the vendor-neutral mthds tooling and whichever runner it targets, not this Pipelex client.
request_timeout_seconds (constructor argument, default 20 min) sets the per-instance blocking-execute ceiling the inherited protocol routes (execute / start / validate / models / version) use.
The client is async-only (httpx AsyncClient) and is an async context manager.
Quickstart
from pipelex_sdk.client import PipelexAPIClient
async def main() -> None:
async with PipelexAPIClient() as client:
# 1. Validate an MTHDS bundle. The verdict is always returned (never raised):
# a 200 discriminated on `is_valid`, carrying `rendered_markdown`.
report = await client.validate([bundle_text])
print(report.rendered_markdown)
if not report.is_valid:
return
# 2. Run a method end-to-end. `start_and_wait` self-heals across runner kinds:
# durable start+poll on the hosted API, blocking execute on a bare runner.
result = await client.start_and_wait(
pipe_code="my_pipe",
inputs={"topic": "quantum computing"},
)
# 3. Read the output. Hosted runs carry `main_stuff`; the bare-runner
# fallback carries the native `pipe_output`.
print(result.main_stuff or result.pipe_output)
Long runs: start + poll explicitly
Behind the hosted gateway, a synchronous execute() is cut off at ~30s and surfaces a PipelineExecuteTimeoutError pointing here. For long methods, drive the durable lifecycle yourself — the run survives client disconnects and is resumable by pipeline_run_id:
ack = await client.start(pipe_code="long_pipe", inputs={...})
result = await client.wait_for_result(ack.pipeline_run_id)
Product routes: branch on err.code, not the HTTP status
The hosted product routes raise a typed ApiResponseError carrying the RFC 9457 code discriminant. Branch on err.code, which is decoupled from the transport status:
from pipelex_sdk.errors import ApiResponseError
try:
created = await client.create_pipelex_api_key(label="ci")
print(created.api_key) # plaintext — returned only once
except ApiResponseError as exc:
if exc.code == "pipelex_api_key_limit_reached":
print("Per-account key limit reached — revoke an old key first.")
else:
raise
Public import paths (no barrel)
There is no barrel import — package __init__.py files stay empty. Import each symbol from its module:
- Client & construction —
from pipelex_sdk.client import PipelexAPIClient, DEFAULT_API_BASE_URL, MthdsFile - Run lifecycle types —
from pipelex_sdk.runs import RunStatus, RunPublic, RunRead, RunResults, RunResultState, WaitForResultOptions, PollInfo - Product wire models —
from pipelex_sdk.product_models import UserProfile, MethodData, MethodWriteInput, Membership, MembershipsResponse, SubscriptionResponse, PlanView, InvoiceView, OnboardingSubmission, UploadInput, UploadedFile, PipelineRun, ... - Typed errors —
from pipelex_sdk.errors import ApiResponseError, ApiUnreachableError, PipelineExecuteTimeoutError, RunFailedError, RunTimeoutError, RunLifecycleUnavailableError, RunStillRunningError - Version —
from pipelex_sdk.version import __version__ - Protocol surface (the MTHDS standard's wire types) comes from the
mthdsdependency — e.g.from mthds.protocol.exceptions import PipelineRequestError,from mthds.runners.api.models import PipelexValidationResult.
Development
make install # create the venv and install all extras (resolves `mthds` from ../mthds-python)
make agent-check # fix-imports + format + lint + pyright + mypy
make agent-test # run the test suite quietly (prints only on failure)
make check # full gate: agent-check aggregate + unused-imports + pylint
See CLAUDE.md for the coding standards and docs/architecture.md for the design (including the parity map against @pipelex/sdk).
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
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 pipelex_sdk-0.2.0.tar.gz.
File metadata
- Download URL: pipelex_sdk-0.2.0.tar.gz
- Upload date:
- Size: 116.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2df844f6e79c5e84465855452b0838f29db1d4356897fc6b08b057c837364539
|
|
| MD5 |
616ac00c400bb34d528a947eed1d687a
|
|
| BLAKE2b-256 |
5348585dd15cb559fe3a83b39eb5279ecca99446f388777a1d97d1823606c0d3
|
Provenance
The following attestation bundles were made for pipelex_sdk-0.2.0.tar.gz:
Publisher:
publish.yml on Pipelex/pipelex-sdk-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pipelex_sdk-0.2.0.tar.gz -
Subject digest:
2df844f6e79c5e84465855452b0838f29db1d4356897fc6b08b057c837364539 - Sigstore transparency entry: 2049646523
- Sigstore integration time:
-
Permalink:
Pipelex/pipelex-sdk-python@c5b05ef3af3538b06adb90b2cc2bda87e22ba42e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Pipelex
-
Access:
internal
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c5b05ef3af3538b06adb90b2cc2bda87e22ba42e -
Trigger Event:
push
-
Statement type:
File details
Details for the file pipelex_sdk-0.2.0-py3-none-any.whl.
File metadata
- Download URL: pipelex_sdk-0.2.0-py3-none-any.whl
- Upload date:
- Size: 31.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea94d40cfcf56fe234294d6324c4ac626c1658c61f3a15d698b968ba9fee2e0d
|
|
| MD5 |
aa37ff61c8c4efb66936b3229e60e3e7
|
|
| BLAKE2b-256 |
dd31304cd4cbcb70499563a3dd34f1120bad6c337f314c45df674b5caeb611f7
|
Provenance
The following attestation bundles were made for pipelex_sdk-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on Pipelex/pipelex-sdk-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pipelex_sdk-0.2.0-py3-none-any.whl -
Subject digest:
ea94d40cfcf56fe234294d6324c4ac626c1658c61f3a15d698b968ba9fee2e0d - Sigstore transparency entry: 2049647290
- Sigstore integration time:
-
Permalink:
Pipelex/pipelex-sdk-python@c5b05ef3af3538b06adb90b2cc2bda87e22ba42e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Pipelex
-
Access:
internal
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c5b05ef3af3538b06adb90b2cc2bda87e22ba42e -
Trigger Event:
push
-
Statement type: