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.2.tar.gz (30.2 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.2-py3-none-any.whl (26.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sami_cli-0.1.2.tar.gz
  • Upload date:
  • Size: 30.2 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.2.tar.gz
Algorithm Hash digest
SHA256 3eeecfc5e8c9c4f948fe858758ac1d729a4e2662cf8ffc4e6916728733682755
MD5 1768c8994c16f39f06f9bd59b5a9e8cb
BLAKE2b-256 1512b458b687b2ad1e217ac8e89e60703d1dcaab2d3a4c4b44618fc99f729c8a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sami_cli-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 26.7 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 dd502b1c218580ca2fe71b4ff40f712c04bd77f1778e4af7ce75201cd15bdc33
MD5 68030490d95817d5963034b36a59d095
BLAKE2b-256 9c5fa0aa30792debd3fa250e51eb5deeb360df4bc215ed9d834ff06d1b09a137

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