Skip to main content

content-sdk

Install

pip install content-sdk        # https://pypi.org/project/content-sdk/

Python 3.11+. Requires only httpx and pydantic. The wheel is also attached to each GitHub release; from a clone: pip install ./packages/python-sdk.

The official Python SDK for the Content engine — the one API client. It fully encapsulates the REST API (/api/v1); the CLI, the MCP server and applications all speak through it, so the engine's rules are never duplicated.

Install

pip install content-sdk        # or: uv pip install -e packages/python-sdk

Synchronous

from content_sdk import ContentClient, outputs

with ContentClient("http://localhost:8010") as client:
    analysis = client.analyze(outputs.url_source("https://www.youtube.com/watch?v=…"))
    caps = client.get_capabilities(analysis.id)  # analysis_id is addressable
    job = client.generate(analysis.id, [outputs.audio_output()])
    job.wait()  # polls until terminal
    for artifact in job.artifacts:
        print(artifact.filename, artifact.media_type)

analyze, get_capabilities and generate accept either an analysis_id / Analysis or inline sources (ADR 0014):

client.get_capabilities([outputs.url_source("https://…")])  # stateless, by sources

Asynchronous

import asyncio
from content_sdk import AsyncContentClient, outputs


async def main():
    async with AsyncContentClient("http://localhost:8010") as client:
        analysis = await client.analyze(outputs.url_source("https://…"))
        job = await analysis.generate([outputs.audio_output()])
        await job.wait()
        print([a.filename for a in await job.artifacts()])


asyncio.run(main())

Errors

Every non-2xx maps to a typed exception carrying the stable error codes:

from content_sdk import NotFound, Gone, ValidationError

try:
    client.get_analysis("ana_stale")
except Gone as exc:  # 410 — the analysis or its facts expired
    print(exc.codes)  # ["analysis_expired"]
except NotFound:  # 404
    ...
except ValidationError as exc:  # 422 / 409 idempotency
    print(exc.codes)

Design

  • models.py — pure pydantic contract models (data only, no client).
  • resources.py — behavioural objects (Analysis, Job) bound to a client.
  • _transport.py — httpx sync/async layer; conservative retries (transport errors + 5xx on safe GETs only; creations retried only with an idempotency key).

The SDK never imports the engine and never depends on the CLI or MCP.

Sending a local file

A file source names a path the engine can read. For a file on your own machine — a laptop talking to a homelab engine — upload it first:

source = client.upload_file("~/report.pdf")  # returns a ready-to-use source
analysis = client.analyze(source)
job = client.generate(analysis.id, [{"id": "s", "type": "summary"}])

upload_file streams from disk and hands back {"type": "upload", …} — the upload id never has to be handled by hand. upload_bytes(name, data, type) does the same for bytes that were never a file, which is what a browser upload is. upload() returns the record itself (size, sha256) for callers who want it, and get_upload / delete_upload complete the endpoint.

The async client mirrors all of it, with one deliberate difference: it buffers rather than streams, because handing httpx a blocking file handle inside an async send only relocates the stall. For a large upload, prefer the sync client.

Download files

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

Source Distribution

content_sdk-0.6.6.tar.gz (34.1 kB view details)

Uploaded Source

Built Distribution

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

content_sdk-0.6.6-py3-none-any.whl (42.0 kB view details)

Uploaded Python 3

File details

Details for the file content_sdk-0.6.6.tar.gz.

File metadata

  • Download URL: content_sdk-0.6.6.tar.gz
  • Upload date:
  • Size: 34.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for content_sdk-0.6.6.tar.gz
Algorithm Hash digest
SHA256 dcc86c501136d134d0ec89b788e19160228753b78a3b4722312e8423d42c3bed
MD5 c7ea681b528574a6810b1675852079d1
BLAKE2b-256 37e04d3f56a6f87357ab2aa89e8688ad7a27db2456bf4f247aed677044b64638

See more details on using hashes here.

Provenance

The following attestation bundles were made for content_sdk-0.6.6.tar.gz:

Publisher: publish-pypi.yml on LatentNoise/content

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

File details

Details for the file content_sdk-0.6.6-py3-none-any.whl.

File metadata

  • Download URL: content_sdk-0.6.6-py3-none-any.whl
  • Upload date:
  • Size: 42.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for content_sdk-0.6.6-py3-none-any.whl
Algorithm Hash digest
SHA256 84b5a8678a39c9b53cacdb4bb18021762949bd19c5e101436326052290347b21
MD5 9a66a5adc42a4b7fca81c8f4e15740e7
BLAKE2b-256 3a47738a3db2ffa30e63a6614531776953d5bad959ec9c4646c35bf73e986e4a

See more details on using hashes here.

Provenance

The following attestation bundles were made for content_sdk-0.6.6-py3-none-any.whl:

Publisher: publish-pypi.yml on LatentNoise/content

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

Release history Release notifications | RSS feed

0.6.7

2 files

This release

0.6.6 This release

2 files

0.6.5

2 files

0.6.4

2 files

0.6.3

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.3

2 files

0.3.0

2 files

0.2.0

2 files

Supported by

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