From 8385f54e9842fae583cabf2f22e0c6184ef41066 Mon Sep 17 00:00:00 2001 From: yyovil Date: Thu, 9 Apr 2026 03:39:39 +0530 Subject: [PATCH] fix(nix): preserve voice deps on aarch64-darwin via nixpkgs (#5079) * Fixes the nix profile installation for hermes agent (cherry picked from commit c822a082a8c0ce33f3d406e6b2ae1b2833071df0) * Update nix/python.nix Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Applied gating for aarch64-darwin platform Entire-Checkpoint: 1ab2074bd4f1 --------- Co-authored-by: yyovil Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- nix/python.nix | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/nix/python.nix b/nix/python.nix index 406e7aee53..160b4ee790 100644 --- a/nix/python.nix +++ b/nix/python.nix @@ -6,14 +6,68 @@ uv2nix, pyproject-nix, pyproject-build-systems, + stdenv, }: let workspace = uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./..; }; + hacks = callPackage pyproject-nix.build.hacks { }; overlay = workspace.mkPyprojectOverlay { sourcePreference = "wheel"; }; + isAarch64Darwin = stdenv.hostPlatform.system == "aarch64-darwin"; + + # Keep the workspace locked through uv2nix, but supply the local voice stack + # from nixpkgs so wheel-only transitive artifacts do not break evaluation. + mkPrebuiltPassthru = dependencies: { + inherit dependencies; + optional-dependencies = { }; + dependency-groups = { }; + }; + + mkPrebuiltOverride = final: from: dependencies: + hacks.nixpkgsPrebuilt { + inherit from; + prev = { + nativeBuildInputs = [ final.pyprojectHook ]; + passthru = mkPrebuiltPassthru dependencies; + }; + }; + + pythonPackageOverrides = final: _prev: + if isAarch64Darwin then { + numpy = mkPrebuiltOverride final python311.pkgs.numpy { }; + + av = mkPrebuiltOverride final python311.pkgs.av { }; + + humanfriendly = mkPrebuiltOverride final python311.pkgs.humanfriendly { }; + + coloredlogs = mkPrebuiltOverride final python311.pkgs.coloredlogs { + humanfriendly = [ ]; + }; + + onnxruntime = mkPrebuiltOverride final python311.pkgs.onnxruntime { + coloredlogs = [ ]; + numpy = [ ]; + packaging = [ ]; + }; + + ctranslate2 = mkPrebuiltOverride final python311.pkgs.ctranslate2 { + numpy = [ ]; + pyyaml = [ ]; + }; + + faster-whisper = mkPrebuiltOverride final python311.pkgs.faster-whisper { + av = [ ]; + ctranslate2 = [ ]; + huggingface-hub = [ ]; + onnxruntime = [ ]; + tokenizers = [ ]; + tqdm = [ ]; + }; + } else {}; + pythonSet = (callPackage pyproject-nix.build.packages { python = python311; @@ -21,6 +75,7 @@ let (lib.composeManyExtensions [ pyproject-build-systems.overlays.default overlay + pythonPackageOverrides ]); in pythonSet.mkVirtualEnv "hermes-agent-env" {