Skip to main content

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

Credentials resolve, in order: explicit constructor arguments → PIPELEX_API_KEY / PIPELEX_API_URLMTHDS_API_KEY / MTHDS_API_URL (and ~/.mthds/config) → defaults. The token is optional — anonymous access works against the protocol routes (e.g. a local bare runner); the product routes return 401. The default base URL is https://api.pipelex.com. The base URL is host-only (no path/query/fragment); every endpoint composes as {base}/v1/{endpoint}.

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 & constructionfrom pipelex_sdk.client import PipelexAPIClient, DEFAULT_API_BASE_URL, MthdsFile
  • Run lifecycle typesfrom pipelex_sdk.runs import RunStatus, RunPublic, RunRead, RunResults, RunResultState, WaitForResultOptions, PollInfo
  • Product wire modelsfrom pipelex_sdk.product_models import UserProfile, MethodData, MethodWriteInput, Membership, MembershipsResponse, SubscriptionResponse, PlanView, InvoiceView, OnboardingSubmission, UploadInput, UploadedFile, PipelineRun, ...
  • Typed errorsfrom pipelex_sdk.errors import ApiResponseError, ApiUnreachableError, PipelineExecuteTimeoutError, RunFailedError, RunTimeoutError, RunLifecycleUnavailableError, RunStillRunningError
  • Versionfrom pipelex_sdk.version import __version__
  • Protocol surface (the MTHDS standard's wire types) comes from the mthds dependency — 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pipelex_sdk-0.1.1.tar.gz (114.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pipelex_sdk-0.1.1-py3-none-any.whl (30.8 kB view details)

Uploaded Python 3

File details

Details for the file pipelex_sdk-0.1.1.tar.gz.

File metadata

  • Download URL: pipelex_sdk-0.1.1.tar.gz
  • Upload date:
  • Size: 114.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pipelex_sdk-0.1.1.tar.gz
Algorithm Hash digest
SHA256 d78d585e4457a1dd0501db56f8b4976d61b7fba14eead8e70a40296167d18787
MD5 127903a9c4dce230624a0a231f1aefb3
BLAKE2b-256 1e324283ffac0148697f6474ee88362e33cd9954da0f0bd0961bf40cac98a6b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pipelex_sdk-0.1.1.tar.gz:

Publisher: publish.yml on Pipelex/pipelex-sdk-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pipelex_sdk-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pipelex_sdk-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 30.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pipelex_sdk-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e7df4902bc2a65d67efe9edbdfc07672365351ea10a836dd83c28b80a78f0cc0
MD5 6b175a7a8a7012f658ab5f6d87528b18
BLAKE2b-256 458d9b00c0b38a09d0486596a8118caaac0ffb42dc8141215cedf310876b4bbb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pipelex_sdk-0.1.1-py3-none-any.whl:

Publisher: publish.yml on Pipelex/pipelex-sdk-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page