This release is a pre-release and may not be stable for production use.
atdata-lambda
Modal serverless processing backend for atdata datasets.
Fan out sample-level transformations across sharded WebDataset tar files using Modal for compute and Cloudflare R2 for storage. One shard = one worker — no job queue required.
Installation
pip install atdata-lambda
Requires Python 3.12+.
Quickstart
import modal
from atdata_lambda import processor, Dispatcher
app = modal.App("my-pipeline")
@processor(app, gpu="T4", memory=8192)
def embed_images(sample: ImageSample) -> EmbeddingSample:
embedding = model.encode(sample.image)
return EmbeddingSample(embedding=embedding, label=sample.label)
dispatcher = Dispatcher(embed_images)
result = dispatcher.run(
input_prefix="data/raw/train/",
output_prefix="data/embedded/train/",
)
print(result.summary())
# Job a1b2c3d4e5f6: SUCCESS — 128/128 shards completed, 0 failed
R2 Configuration
Credentials are read from environment variables (typically injected via Modal Secrets):
| Variable | Description |
|---|---|
R2_ENDPOINT_URL |
Cloudflare R2 S3-compatible endpoint |
R2_ACCESS_KEY_ID |
R2 access key |
R2_SECRET_ACCESS_KEY |
R2 secret key |
R2_BUCKET |
Target bucket name |
Or pass an R2Config explicitly:
from atdata_lambda import R2Config
config = R2Config(
endpoint_url="https://acct.r2.cloudflarestorage.com",
access_key_id="...",
secret_access_key="...",
bucket="my-bucket",
)
dispatcher = Dispatcher(embed_images, r2_config=config)
HTTP Endpoint
Expose a Modal web endpoint for event-driven dispatch (e.g. R2 bucket notifications):
from atdata_lambda import create_dispatch_endpoint
create_dispatch_endpoint(app, dispatcher)
This registers a POST endpoint accepting {"input_prefix": "...", "output_prefix": "..."}.
Architecture
Client (notebook / CLI / R2 event)
│
▼
Dispatcher ── list_shards(prefix) ──→ R2
│
│ .map()
▼
Modal workers (1 per shard)
│ read shard → apply @processor fn → write output shard
│ write .manifest.json
▼
R2 (output shards + manifests)
Modules
| Module | Responsibility |
|---|---|
_processor.py |
@processor decorator — wraps user functions, extracts Packable type info, registers with Modal |
_dispatcher.py |
Dispatcher — enumerates shards, fans out via .map(), collects JobResult |
_shard_worker.py |
process_shard — runs inside each Modal worker, reads/writes tar shards |
_manifest.py |
ManifestBuilder — per-shard .manifest.json generation alongside output |
_config.py |
R2Config — R2 credentials, list_shards for shard enumeration via boto3 |
Public API
from atdata_lambda import (
processor, # decorator
Dispatcher, # fan-out orchestrator
JobResult, # aggregate result
R2Config, # R2 connection config
ShardIndex, # shard listing result
list_shards, # enumerate .tar files at prefix
ManifestBuilder, # incremental manifest construction
ShardManifest, # manifest dataclass
write_manifest, # upload manifest to R2
ShardResult, # per-shard processing result
ProcessorError, # invalid processor configuration
create_dispatch_endpoint, # HTTP trigger registration
)
Development
uv sync # install dependencies
uv run pytest # run tests
uv run ruff check . # lint
uv run ruff format . # format
License
See LICENSE.
Metadata
Release files for atdata-lambda 0.1.1a4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| atdata_lambda-0.1.1a4.tar.gz | 10.1 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| atdata_lambda-0.1.1a4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.8 kB
Release files / atdata_lambda-0.1.1a4.tar.gz
| Download URL | atdata_lambda-0.1.1a4.tar.gz |
|---|---|
| Size | 10.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0a9a2377ba1c52222fd1d975534ac567e2d0d5566683e90c45f65df219f1a7fa
|
|
BLAKE2b-256 checksum How to use checksums |
d7507c1e898a8874e00ba4701d0e510d4cfe685ee113caa20e46b5205c0acd13
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 2, 2026.
Transparency logRelease files / atdata_lambda-0.1.1a4-py3-none-any.whl
| Download URL | atdata_lambda-0.1.1a4-py3-none-any.whl |
|---|---|
| Size | 13.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7680baad998716b1588e847b9c72ef0ec9ae43e3cff99cce7eccdf321655b965
|
|
BLAKE2b-256 checksum How to use checksums |
d8a462cc69dabc8aa19e23329b2583c3572ebcf9e36493c765218812145df75b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 2, 2026.
Transparency logSecurity for atdata-lambda 0.1.1a4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for atdata_lambda-0.1.1a4.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 2, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.