--- title: HF Datasets icon: /images/huggingface-logo.svg --- The HF Datasets resource mounts a [Hugging Face Dataset](https://huggingface.co/datasets) repo at some prefix such as `/ds/`. All reads are lazy: only the bytes you actually `cat`/`head` get transferred. For credential setup, see [HF Datasets Setup](/home/setup/hf_datasets). ## Install ```bash uv add "mirage-ai[hf]" ``` ## Config ```python import os from mirage import MountMode, Workspace from mirage.resource.hf_datasets import HfDatasetsConfig, HfDatasetsResource config = HfDatasetsConfig( repo_id=os.environ["HF_DATASET_REPO"], # "namespace/dataset-name" token=os.environ.get("HF_TOKEN"), # Optional: # endpoint="https://huggingface.co", # revision="main", # key_prefix="train/", ) resource = HfDatasetsResource(config) ws = Workspace({"/ds": resource}, mode=MountMode.READ) ``` `HfDatasetsConfig` takes `repo_id` in `namespace/dataset-name` form plus an optional access token. Public datasets need no token. ## Filesystem Layout Maps dataset repo files to virtual paths under the mount prefix. For example, if dataset `AlienKevin/SWE-ZERO-12M-trajectories` contains: ```text README.md data/train-00000-of-01000.parquet data/train-00001-of-01000.parquet ``` Then mounting at `/ds/` exposes: ```text /ds/ README.md data/ train-00000-of-01000.parquet train-00001-of-01000.parquet ``` ## Example ```python import asyncio import os from dotenv import load_dotenv from mirage import MountMode, Workspace from mirage.resource.hf_datasets import HfDatasetsConfig, HfDatasetsResource load_dotenv(".env.development") config = HfDatasetsConfig( repo_id=os.environ.get("HF_DATASET_REPO", "AlienKevin/SWE-ZERO-12M-trajectories"), token=os.environ.get("HF_TOKEN"), ) resource = HfDatasetsResource(config) async def main() -> None: ws = Workspace({"/ds": resource}, mode=MountMode.READ) r = await ws.execute("ls /ds/") print(await r.stdout_str()) r = await ws.execute("cat /ds/README.md | head -n 20") print(await r.stdout_str()) r = await ws.execute("find /ds/ -name '*.parquet' | head -n 5") print(await r.stdout_str()) if __name__ == "__main__": asyncio.run(main()) ``` ## Shell Commands Same set as [HF Buckets](/python/resource/hf_buckets#shell-commands) — read, text-processing, file ops, path utilities, compression, encoding, and format-specific variants for parquet/feather/orc/hdf5. ## Cache Uses `IndexCacheStore` with `index_ttl = 600` (10 minutes). Directory listings are cached and populate file-size/type entries for `stat`'s fast path, so a `readdir` + per-entry `stat` (which `ls`, FUSE `getattr`, and most shell commands trigger) costs one HTTP request instead of N. ## Use Cases - **AI agents inspecting datasets**: Mount, browse the README, sample a few rows from parquet shards without downloading the whole dataset - **Dataset triage**: `ls`, `stat`, `find` to see what's in a repo before committing to a full local copy - **Sandboxed access**: Pin a `revision` for reproducibility