{ lib, stdenv, buildPythonPackage, pythonAtLeast, python, fetchPypi, autoPatchelfHook, # dependencies click, filelock, jsonschema, msgpack, packaging, protobuf, pyyaml, requests, # optional-dependencies # cgraph cupy, # client grpcio, # data fsspec, numpy, pandas, pyarrow, # default aiohttp, aiohttp-cors, colorful, opencensus, opentelemetry-exporter-prometheus, opentelemetry-proto, opentelemetry-sdk, prometheus-client, pydantic, py-spy, smart-open, virtualenv, # llm async-timeout, hf-transfer, jsonref, meson, ninja, # nixl, pybind11, typer, vllm, # observability memray, # rllib dm-tree, gymnasium, lz4, ormsgpack, scipy, # serve fastapi, starlette, uvicorn, watchfiles, # serve-async-inference celery, # serve-grpc pyopenssl, # tune tensorboardx, }: let pname = "ray"; version = "2.53.0"; in buildPythonPackage rec { inherit pname version; format = "wheel"; disabled = pythonAtLeast "3.14"; src = let pyShortVersion = "cp${builtins.replaceStrings [ "." ] [ "" ] python.pythonVersion}"; platforms = { aarch64-darwin = "macosx_12_0_arm64"; aarch64-linux = "manylinux2014_aarch64"; x86_64-linux = "manylinux2014_x86_64"; }; # ./pkgs/development/python-modules/ray/prefetch.sh # Results are in ./ray-hashes.nix hashes = { x86_64-linux = { cp310 = "sha256-TbtfzhNkdj8pdBBV9Qq+M89yY5cUH5zA6EXdPMlj5FU="; cp311 = "sha256-6wAMF/cwEHH90VxExM06wPeVO7THwifmFxn+cEgZW80="; cp312 = "sha256-FPRjY+m0zwwci02GI+wzfFvUCDd4MbXltQBnkwE3u8o="; cp313 = "sha256-c9u6p5Yqf144qoz5SD4OmBcgXpiao9yFnHOMKvGuAd8="; }; aarch64-linux = { cp310 = "sha256-QQgoDYocuQ19aOXJVMNeY7i7mkuhX4jF59oOICVkdxI="; cp311 = "sha256-oLu5iwsPJaPuB1yhAXHhJg5wtrxpDNUJ7NfOEiivhU0="; cp312 = "sha256-ZeLOWNPca6o89Fgk2InBlo695WXuVN/YCpivjzGvjko="; cp313 = "sha256-cZblNY38yCEb6GT0Xm3+SCcgLfKUrzx6dv+PvAgOBSI="; }; aarch64-darwin = { cp310 = "sha256-TbkUoKbdYI+knAZpKaEoJ0Wi29c8ruZ9e4D+aEymW90="; cp311 = "sha256-vT7Ew0J3bdrCOuKxCMZPWTn0F8zEh1kA1YbHyXhGMmk="; cp312 = "sha256-2LldBH2UdJOAP7hBeuoxIl3KzasVr9x1uKI4kBlJ1Fc="; cp313 = "sha256-hbRyq2+48RifjO+BkT/ZGyTdabP6fcyn4USCe9kk9sA="; }; }; in fetchPypi { inherit pname version; format = "wheel"; dist = pyShortVersion; python = pyShortVersion; abi = pyShortVersion; platform = platforms.${stdenv.hostPlatform.system} or { }; sha256 = hashes.${stdenv.hostPlatform.system}.${pyShortVersion} or (throw "No hash specified for '${stdenv.hostPlatform.system}.${pyShortVersion}'"); }; nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ]; dependencies = [ click filelock jsonschema msgpack packaging protobuf pyyaml requests ]; optional-dependencies = lib.fix (self: { adag = self.cgraph; air = lib.unique (self.data ++ self.serve ++ self.tune ++ self.train); all = lib.unique ( self.adag ++ self.air ++ self.cgraph ++ self.client ++ self.data ++ self.default ++ self.observability ++ self.rllib ++ self.serve ++ self.serve-async-inference ++ self.serve-grpc ++ self.train ++ self.tune ); cgraph = [ cupy ]; client = [ grpcio ]; data = [ fsspec numpy pandas pyarrow ]; default = [ aiohttp aiohttp-cors colorful grpcio opencensus opentelemetry-exporter-prometheus opentelemetry-proto opentelemetry-sdk prometheus-client pydantic py-spy requests smart-open virtualenv ]; llm = lib.unique ( [ async-timeout hf-transfer jsonref jsonschema meson ninja # nixl pybind11 typer vllm ] ++ self.data ++ self.serve ++ vllm.optional-dependencies.audio ); observability = [ memray ]; rllib = lib.unique ( [ dm-tree gymnasium lz4 ormsgpack pyyaml scipy ] ++ self.tune ); serve = lib.unique ( [ fastapi requests starlette uvicorn watchfiles ] ++ self.default ); serve-async-inference = lib.unique ( [ celery ] ++ self.serve ); serve-grpc = lib.unique ( [ grpcio pyopenssl ] ++ self.serve ); train = lib.unique ( [ pydantic ] ++ self.tune ); tune = [ fsspec pandas pyarrow requests tensorboardx # `import ray.tune` fails without pydantic # Reported upstream: https://github.com/ray-project/ray/issues/58280 pydantic ]; }); postInstall = '' chmod +x $out/${python.sitePackages}/ray/core/src/ray/{gcs/gcs_server,raylet/raylet} ''; pythonImportsCheck = [ "ray" ]; meta = { description = "Unified framework for scaling AI and Python applications"; homepage = "https://github.com/ray-project/ray"; changelog = "https://github.com/ray-project/ray/releases/tag/ray-${version}"; license = lib.licenses.asl20; maintainers = with lib.maintainers; [ billhuang ]; sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; platforms = [ "aarch64-darwin" "aarch64-linux" "x86_64-linux" ]; }; }