Skip to main content

Client library for the Sandai Operator SDK

Project description

Sandai Operator Client

Lightweight Python client for submitting tasks to a Sandai operator over Celery.

Installation

pip install sandai-operator-client

For local development:

pip install -e ".[dev]"

Quick Start

from sandai.operator_client import create_client

client = create_client("video-clipper", "v1")

artifacts, results = client.sync(
    input_artifacts=[{"uri": "file:///tmp/input.mp4", "slot": "video"}],
    options={"clip_duration": 10},
)

Core API

  • create_client(operator_name, operator_version, **kwargs) constructs an OperatorClient.
  • async_call(...) submits a task and returns a Celery AsyncResult.
  • sync(...) submits a task and waits for (artifacts, results).
  • desc fetches the operator description payload, validates its status, and caches it per client instance.
  • batch_async(...) preserves the legacy best-effort behavior and returns AsyncResult | None per task.
  • batch_sync(...) preserves the legacy best-effort behavior and returns legacy tuples per task.
  • batch_submit(...) returns structured submission objects with explicit send errors.
  • batch_collect(...) resolves structured submission objects into per-task structured results.
  • batch_sync_detailed(...) returns structured per-task execution results directly.
  • probe() performs a stronger transport/protocol health probe.
  • ping() is a compatibility helper that only confirms the submit path is reachable.
  • get_queue_info() returns the queue names used for each priority.

Task Controls

The client supports the same task-control fields used by the operator runtime:

  • timeout: converted into an absolute deadline before sending the task.
  • cancel_key: propagated to the operator so tasks can be skipped before compute starts.
  • persistent_output: stored under meta["persistent-output"] for runtimes that preserve uploaded outputs.

Batch APIs

The package now exposes two batch styles:

  • Legacy compatibility APIs: batch_async(...) and batch_sync(...) keep the previous best-effort semantics.
  • Structured APIs: batch_submit(...), batch_collect(...), and batch_sync_detailed(...) expose explicit per-task submission/execution status instead of collapsing failures into empty results.

Prefer the structured APIs for new integrations.

Health Checks

ping() and probe() are intentionally different:

  • ping() returns True when task submission succeeds.
  • probe() returns a structured HealthCheckResult with submit_ok, retrieval_ok, response_ok, and optional error details.

Use probe() when you need a meaningful health signal.

Priority Model

Supported priorities are:

  • high
  • normal
  • low
  • very_low

Queue names follow this pattern:

<priority>.<operator_name>.<operator_version>

Environment Variables

The client reads these settings when explicit connection arguments are not provided:

  • SANDAI_OPERATOR_CELERY_BROKER_URL
  • SANDAI_OPERATOR_CELERY_RESULT_BACKEND
  • SANDAI_OPERATOR_CELERY_TASK_SERIALIZER
  • SANDAI_OPERATOR_CELERY_RESULT_SERIALIZER
  • SANDAI_OPERATOR_AUTO_FORGET_RESULT

If broker/backend are not configured, the client falls back to local Redis defaults:

redis://localhost:6379/0

By default the client now submits Celery task payloads with msgpack, keeps Celery results on json, and advertises both json and msgpack in accept_content so it can interoperate with operators during rollout.

Error Model

sync() and desc normalize failures into typed exceptions where possible:

  • TaskTimeoutError
  • TaskExecutionError
  • TaskDeadlineExceededError
  • TaskCancelledError
  • InvalidTaskStatusError
  • InvalidResultFormatError
  • InvalidPriorityError

Structured batch APIs surface task errors directly on each result object instead of converting them into empty legacy tuples.

Testing

Run the client regression suite from the repository root:

python operator-client/tests/run_all_tests.py

The suite is mock-based and does not require a live Celery or Redis deployment.

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

sandai_operator_client-0.4.5.tar.gz (17.5 kB view details)

Uploaded Source

Built Distribution

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

sandai_operator_client-0.4.5-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file sandai_operator_client-0.4.5.tar.gz.

File metadata

  • Download URL: sandai_operator_client-0.4.5.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for sandai_operator_client-0.4.5.tar.gz
Algorithm Hash digest
SHA256 96aae174440015c36c6f762eaa4a2693134031c1b9859ac44500af02581178db
MD5 755f27afc58b629971a5aaec7967c14e
BLAKE2b-256 3bffddc73bd434f3bf909407a74a8cf9d0fe6190a7f0a08eae647e0546107723

See more details on using hashes here.

File details

Details for the file sandai_operator_client-0.4.5-py3-none-any.whl.

File metadata

File hashes

Hashes for sandai_operator_client-0.4.5-py3-none-any.whl
Algorithm Hash digest
SHA256 1133a05576322e94e071271ada03f7237731bc89703cdaa889a44fb6d6d038af
MD5 8adfc3a4b3383d370e3e064efbf69f45
BLAKE2b-256 ef469f603fdab5ea3cfd0aabd73a07a22adb27cdc9c552e45aca54d0db8f2dd9

See more details on using hashes here.

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