exo-explore/exo · error · FileNotFoundError
No safetensors files found in {self._model_path}
Error message
No safetensors files found in {self._model_path} What it means
Error "No safetensors files found in {self._model_path}" thrown in exo-explore/exo.
Source
Thrown at src/exo/worker/engines/mlx/vision.py:363
except ValueError:
image_proc = None
if image_proc is None:
image_proc = self._load_image_processor_from_module(repo)
if image_proc is not None:
self._processor = image_proc
else:
self._processor = AutoImageProcessor.from_pretrained( # type: ignore
repo, trust_remote_code=True
)
if processor_repo:
self._merge_kernel_size = vision_cfg.get("merge_kernel_size", [2, 2]) # type: ignore
self._needs_nhwc = True
logger.info(f"HF image processor loaded from {repo}")
def _load_weights_from_separate_repo(self) -> None:
safetensors_files = list(self._model_path.glob("*.safetensors"))
if not safetensors_files:
raise FileNotFoundError(f"No safetensors files found in {self._model_path}")
vision_weights: dict[str, mx.array] = {}
projector_weights: dict[str, mx.array] = {}
for sf_path in safetensors_files:
with safe_open(str(sf_path), framework="pt") as f:
keys = cast(list[str], list(f.keys())) # type: ignore
for key in keys:
if key.startswith("vision_tower."):
short_key = key[len("vision_tower.") :]
if short_key.startswith("encoder."):
short_key = short_key[len("encoder.") :]
m = re.match(
r"^(blocks\.\d+)\.(wqkv|wo)\.(weight|bias)$", short_key
)
if m:
short_key = f"{m.group(1)}.attn.{m.group(2)}.{m.group(3)}"
tensor = f.get_tensor(key) # type: ignoreView on GitHub (pinned to 21a54c5ea0)
When it happens
Trigger: Thrown at src/exo/worker/engines/mlx/vision.py:363 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of exo-explore/exo@21a54c5ea0 (2026-08-26).
Data as JSON: /api/errors/76a240aaf1f1454c.
Report an issue: GitHub.