{ lib, stdenv, fetchFromGitHub, python3Packages, unstableGitUpdater, }: python3Packages.buildPythonApplication { pname = "exo"; version = "0-unstable-2024-11-14"; pyproject = true; src = fetchFromGitHub { owner = "exo-explore"; repo = "exo"; rev = "f1eec9fa64a0c14e0ef2eec092b799009b3d4a1e"; hash = "sha256-WrJrhMtq+S5VD3oyW1k3fkOHunTzdFk0HavjOXLhIKU="; }; build-system = with python3Packages; [ setuptools ]; pythonRelaxDeps = true; pythonRemoveDeps = [ "uuid" ]; dependencies = with python3Packages; [ aiohttp aiohttp-cors aiofiles blobfile grpcio grpcio-tools jinja2 netifaces numpy nvidia-ml-py pillow prometheus-client protobuf psutil pydantic requests rich safetensors tenacity tqdm transformers tinygrad ]; pythonImportsCheck = [ "exo" "exo.inference.tinygrad.models" ]; nativeCheckInputs = with python3Packages; [ mlx pytestCheckHook ]; disabledTestPaths = [ "test/test_tokenizers.py" ]; # Tests require `mlx` which is not supported on linux. doCheck = stdenv.hostPlatform.isDarwin; passthru = { updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; }; meta = { description = "Run your own AI cluster at home with everyday devices"; homepage = "https://github.com/exo-explore/exo"; license = lib.licenses.gpl3Only; maintainers = with lib.maintainers; [ GaetanLepage ]; mainProgram = "exo"; }; }