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_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 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_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


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.0.tar.gz (23.4 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.0-py3-none-any.whl (22.1 kB view details)

Uploaded Python 3

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

Hashes for sami_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 02c7efea647e29dcde79b67c688ebf42e93de7a0eb53b757cd21120e87610530
MD5 be0663b1523d411573b877b9ece2a74e
BLAKE2b-256 d6d8471bac44eab05c27c05aa7dac6e26e3d484348854edee59e7127cae361a9

See more details on using hashes here.

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

Hashes for sami_cli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e2fccd3e0a6e3080db952b95d2e27625485ed21073da658f404e72635e011164
MD5 595a693c7ad372e7fb13932e9e9bcde0
BLAKE2b-256 8e1faf3d2f6ddef2db217ea271e50cb3df82fb5f9be5e09c732478b776ac443b

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