Python SDK and CLI for SAMI Dataset Distribution Platform
Project description
SAMI CLI
Python SDK and CLI for the SAMI Dataset Distribution Platform. Upload, download, and manage robotics datasets in LeRobot format.
Note: Dataset uploads require platform admin privileges (
globalRole: platform_admin). Regular users can browse and download datasets but cannot upload.
Installation
pip install sami-cli
For development:
cd sami-cli
pip install -e ".[dev]"
Quick Start (CLI)
# Login (credentials saved to ~/.sami/)
sami login
Email: user@example.com
Password: ********
Logged in as user@example.com
Organization: Acme Robotics
# List datasets
sami list
# Upload a dataset (requires admin)
sami upload ./my_dataset --name "Robot Arm Demo"
# Download a dataset
sami download <dataset-id> --output ./downloaded
# Show your info
sami whoami
# Logout
sami logout
CLI Reference
| Command | Description |
|---|---|
sami login |
Authenticate and save credentials |
sami logout |
Clear saved credentials |
sami whoami |
Show current user info |
sami config |
View/set configuration |
sami list |
List accessible datasets |
sami upload <path> |
Upload a LeRobot dataset |
sami download <id> |
Download a dataset |
sami info <id> |
Show dataset details |
sami delete <id> |
Delete a dataset |
Command Options
# Upload with options
sami upload ./dataset \
--name "My Dataset" \
--description "Kitchen manipulation tasks" \
--task-category manipulation \
--workers 8
# Download with options
sami download abc123 \
--output ./my_data \
--workers 8
# List with filters
sami list --status ready --limit 50
# Set custom API URL
sami config --api-url https://api.example.com/api/v1
Environment Variables
For CI/CD pipelines, you can use environment variables instead of sami login:
| Variable | Description |
|---|---|
SAMI_API_URL |
Override API URL |
SAMI_ACCESS_TOKEN |
Use token directly (skip login) |
SAMI_EMAIL |
Email for login |
SAMI_PASSWORD |
Password for login |
# Example: CI/CD usage
export SAMI_ACCESS_TOKEN="your-jwt-token"
sami list
sami download abc123
Python SDK
Using Saved Credentials
After running sami login, use credentials in Python:
from sami_datasets import SamiClient
# Use saved credentials from ~/.sami/
client = SamiClient.from_saved_credentials()
# List datasets
datasets = client.list_datasets()
for ds in datasets:
print(f"{ds.name}: {ds.episode_count} episodes")
Direct Authentication
from sami_datasets import SamiClient
# Authenticate directly
client = SamiClient(
email="user@example.com",
password="your-password",
)
# Upload a LeRobot dataset
dataset = client.upload_dataset(
name="my-dataset-v1",
path="/path/to/lerobot/dataset",
description="Kitchen manipulation tasks",
task_category="manipulation",
)
print(f"Uploaded: {dataset.id}")
# Download a dataset
client.download_dataset(
dataset_id=dataset.id,
output_path="./downloaded_dataset",
)
API Methods
# Authentication
client.login(email, password)
client.get_current_user()
# Datasets
client.list_datasets(page=1, limit=20, status=None)
client.get_dataset(dataset_id)
client.upload_dataset(name, path, description=None, task_category=None, max_workers=4)
client.download_dataset(dataset_id, output_path, max_workers=4)
client.delete_dataset(dataset_id)
# Sharing
client.assign_dataset(dataset_id, organization_id, permission_level)
client.remove_assignment(dataset_id, assignment_id)
LeRobot Format
Datasets must be in LeRobot format:
my_dataset/
meta/
info.json # Required: episodes, frames, fps, features
stats.json # Optional: statistics
episodes/ # Optional: episode metadata
data/
chunk-000/ # Parquet files with episode data
chunk-001/
videos/ # Optional: video files
chunk-000/
The meta/info.json must contain:
total_episodes: Number of episodestotal_frames: Total frame countfps: Frames per second
LeRobot Integration
Downloaded datasets work directly with LeRobot:
from lerobot.common.datasets.lerobot_dataset import LeRobotDataset
# Load downloaded dataset
dataset = LeRobotDataset("./my_dataset")
# Use in training
for batch in dataset:
observation = batch["observation.state"]
action = batch["action"]
# ... train your model
Dataset Object
@dataclass
class Dataset:
id: str
name: str
description: Optional[str]
task_category: Optional[str]
robot_type: Optional[str]
episode_count: Optional[int]
total_frames: Optional[int]
fps: Optional[float]
file_size_bytes: int
upload_status: str # pending, uploading, processing, ready, failed
created_at: datetime
organization_name: str
features: Optional[Dict[str, Any]]
assignments: List[Dict[str, Any]]
Exceptions
from sami_datasets import (
SamiError, # Base exception
AuthenticationError, # Login failed
NotFoundError, # Resource not found
PermissionDeniedError, # Access denied
UploadError, # Upload failed
DownloadError, # Download failed
ValidationError, # Invalid dataset format
)
Requirements
- Python >= 3.9
- requests >= 2.28.0
- tqdm >= 4.65.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sami_cli-0.1.0.tar.gz.
File metadata
- Download URL: sami_cli-0.1.0.tar.gz
- Upload date:
- Size: 23.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02c7efea647e29dcde79b67c688ebf42e93de7a0eb53b757cd21120e87610530
|
|
| MD5 |
be0663b1523d411573b877b9ece2a74e
|
|
| BLAKE2b-256 |
d6d8471bac44eab05c27c05aa7dac6e26e3d484348854edee59e7127cae361a9
|
File details
Details for the file sami_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sami_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 22.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2fccd3e0a6e3080db952b95d2e27625485ed21073da658f404e72635e011164
|
|
| MD5 |
595a693c7ad372e7fb13932e9e9bcde0
|
|
| BLAKE2b-256 |
8e1faf3d2f6ddef2db217ea271e50cb3df82fb5f9be5e09c732478b776ac443b
|