Skip to main content

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_cli 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_cli 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 episodes
  • total_frames: Total frame count
  • fps: 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_cli 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


Download files

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

Source Distribution

sami_cli-0.1.1.tar.gz (30.0 kB view details)

Uploaded Source

Built Distribution

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

sami_cli-0.1.1-py3-none-any.whl (26.5 kB view details)

Uploaded Python 3

File details

Details for the file sami_cli-0.1.1.tar.gz.

File metadata

  • Download URL: sami_cli-0.1.1.tar.gz
  • Upload date:
  • Size: 30.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for sami_cli-0.1.1.tar.gz
Algorithm Hash digest
SHA256 a6e3e3301fb1a2bc293aef84a10255923b1e36910c0d6ee34e8a42d56d059d89
MD5 286e96528cbbbec1ba61bb2e3ab2b6c5
BLAKE2b-256 c2b2db19aa8c176d44cb5fc373e6f739a7deca6950083907dad65ebb66036efd

See more details on using hashes here.

File details

Details for the file sami_cli-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: sami_cli-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 26.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for sami_cli-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 43b55b911af006767d10a056dcc53745d1b0ff3c1867dff17b13938a6f7b180c
MD5 a506770997f604de3544bb57b11a9079
BLAKE2b-256 5d12b438acb9275172f00ad2b49d4a6953874175b742ff044c592356c2a3e2d6

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