Metadata-Version: 2.4
Name: traceplane
Version: 0.2.0
Summary: Streaming dataloader for robotics trajectory datasets
Project-URL: Homepage, https://traceplane.ai
Project-URL: Documentation, https://docs.traceplane.ai
Project-URL: Repository, https://github.com/traceplane/traceplane
Project-URL: Issues, https://github.com/traceplane/traceplane/issues
Author-email: Traceplane <hello@traceplane.ai>
License-Expression: Apache-2.0
Keywords: datasets,imitation-learning,lerobot,robotics,trajectories
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.10
Requires-Dist: fsspec>=2023.1
Requires-Dist: numpy>=1.24
Requires-Dist: pyarrow>=14.0
Requires-Dist: requests>=2.28
Provides-Extra: all
Requires-Dist: gcsfs>=2023.1; extra == 'all'
Requires-Dist: huggingface-hub>=0.20; extra == 'all'
Requires-Dist: jax>=0.4; extra == 'all'
Requires-Dist: jaxlib>=0.4; extra == 'all'
Requires-Dist: numpy>=1.24; extra == 'all'
Requires-Dist: s3fs>=2023.1; extra == 'all'
Requires-Dist: sentence-transformers>=2.0; extra == 'all'
Requires-Dist: tensorflow>=2.14; extra == 'all'
Requires-Dist: torch>=2.0; extra == 'all'
Provides-Extra: dev
Requires-Dist: pytest>=7; extra == 'dev'
Requires-Dist: torch>=2.0; extra == 'dev'
Provides-Extra: embeddings
Requires-Dist: sentence-transformers>=2.0; extra == 'embeddings'
Provides-Extra: gcs
Requires-Dist: gcsfs>=2023.1; extra == 'gcs'
Provides-Extra: hub
Requires-Dist: huggingface-hub>=0.20; extra == 'hub'
Provides-Extra: jax
Requires-Dist: jax>=0.4; extra == 'jax'
Requires-Dist: jaxlib>=0.4; extra == 'jax'
Provides-Extra: s3
Requires-Dist: s3fs>=2023.1; extra == 's3'
Provides-Extra: sim
Requires-Dist: numpy>=1.24; extra == 'sim'
Requires-Dist: torch>=2.0; extra == 'sim'
Provides-Extra: tf
Requires-Dist: tensorflow>=2.14; extra == 'tf'
Provides-Extra: torch
Requires-Dist: torch>=2.0; extra == 'torch'
Provides-Extra: training
Requires-Dist: torch>=2.0; extra == 'training'
Description-Content-Type: text/markdown

# Traceplane

Python SDK for the Traceplane trajectory data platform.

## Installation

```bash
pip install traceplane
```

With framework extras:

```bash
pip install traceplane[torch]     # PyTorch DataLoader
pip install traceplane[jax]       # JAX support
pip install traceplane[training]  # Diffusion policy training
pip install traceplane[all]       # Everything
```

## Quick Start

```python
from traceplane import TraceplaneClient

client = TraceplaneClient("https://api.traceplane.ai", api_key="tp_live_...")

# Register a dataset
client.register("my_data", "/path/to/dataset", include_data=True)

# Query with SQL
rows = client.sql_rows("SELECT * FROM my_data WHERE frame_count > 100")

# Upload data
client.upload_dataset("my_data", "/path/to/parquet/files/")

# Vector search
results = client.search_similar("my_data", episode_index=0, k=5)
```

## Features

- **SQL query engine** -- register datasets and query with full SQL, including vector UDFs (`vec_mean`, `vec_norm`, `vec_cosine_sim`, etc.)
- **Streaming dataloaders** -- PyTorch, JAX, and TensorFlow adapters with windowed sampling
- **LeRobot format** -- native reader for LeRobot v2/v3 datasets (Parquet + MP4)
- **Similarity search** -- find related episodes via embedding-based vector search
- **Dataset upload** -- push local Parquet files to the platform
- **Retargeting** -- XR hand poses to robot action space via calibration bridge
- **Training** -- built-in diffusion policy training with `traceplane-train` CLI

## Training Integration

```python
from traceplane import LeRobotReader
from traceplane.torch import TorchEpisodeLoader

reader = LeRobotReader("/path/to/lerobot/dataset")
loader = TorchEpisodeLoader(reader, batch_size=32, window_size=16)

for batch in loader:
    observations = batch["observation"]
    actions = batch["action"]
    # ... your training loop
```

## API Reference

Full documentation: [docs.traceplane.ai](https://docs.traceplane.ai)

## License

Apache-2.0
