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: ignore

View 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.