{"record":{"id":"569636e8d9a63a51","repo":"exo-explore/exo","slug":"no-writable-model-directory-has-required-bytes","errorCode":null,"errorMessage":"No writable model directory has {required_bytes / (1024**3):.1f} GiB free. Checked: {[str(d) for d in EXO_MODELS_DIRS]}","messagePattern":"No writable model directory has (.+?) GiB free\\. Checked: (.+?)","errorType":"exception","errorClass":"InsufficientDiskSpaceError","httpStatus":null,"severity":"error","filePath":"src/exo/download/download_utils.py","lineNumber":195,"sourceCode":"        return found\n    return EXO_DEFAULT_MODELS_DIR / model_id.normalize()\n\n\ndef select_download_dir(required_bytes: int) -> Path:\n    \"\"\"Pick the first writable model directory with enough free space.\n\n    Raises ``InsufficientDiskSpaceError`` if none have enough space.\n    \"\"\"\n    for candidate_dir in EXO_MODELS_DIRS:\n        if not candidate_dir.exists():\n            continue\n        try:\n            usage = shutil.disk_usage(candidate_dir)\n            if usage.free >= required_bytes:\n                return candidate_dir\n        except OSError:\n            continue\n    raise InsufficientDiskSpaceError(\n        f\"No writable model directory has {required_bytes / (1024**3):.1f} GiB free. \"\n        f\"Checked: {[str(d) for d in EXO_MODELS_DIRS]}\"\n    )\n\n\nasync def select_download_dir_for_shard(\n    model_id: ModelId,\n    filtered_file_list: list[FileListEntry],\n    total_size: int,\n) -> Path:\n    for candidate_dir in EXO_MODELS_DIRS:\n        if not candidate_dir.exists():\n            continue\n        sub = candidate_dir / model_id.normalize()\n        if not await aios.path.isdir(sub):\n            continue\n        existing_bytes = 0\n        for file_entry in filtered_file_list:","sourceCodeStart":177,"sourceCodeEnd":213,"githubUrl":"https://github.com/exo-explore/exo/blob/21a54c5ea0230a3bec1e1a786d200126c7e34ec6/src/exo/download/download_utils.py#L177-L213","documentation":"Error \"No writable model directory has {required_bytes / (1024**3):.1f} GiB free. Checked: {[str(d) for d in EXO_MODELS_DIRS]}\" thrown in exo-explore/exo.","triggerScenarios":"Thrown at src/exo/download/download_utils.py:195 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"21a54c5ea0230a3bec1e1a786d200126c7e34ec6","analyzedAt":"2026-08-26T00:02:16.033Z","schemaVersion":2},"datasetVersion":"2026-08-26T04:18:47.238Z"}